求一个design 11的注册码是什么,要文字版的不要网上的安装方法谢谢


VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

我按照时间复杂度把它们分成了彡类分三节课来讲解。

1. 最好情况、最坏情况、平均情况时间复杂度

对于要排序的数据有的接近有序,有的完全无序有序度不同的数據,对于排序的执行时间肯定是有影响的我们要知道排序算法在不同数据下的性能表现。Ps,针对特定的数据来源的情景来选择合适的排序算法。

2. 2. 时间复杂度的系数、常数 、低阶

我们知道时间复杂度反应的是数据规模 n 很大的时候的一个增长趋势,所以它表示的时候会忽略系数、常数、低阶但是实际的软件开发中,我们排序的可能是 10 个、100 个、1000 个这样规模很小的数据所以,在对同一阶时间复杂度的排序算法性能对比的时候我们就要把系数、常数、低阶也考虑进来。

3. 比较次数和交换(或移动)次数

这一节和下一节讲的都是基于比较的排序算法基于比较的排序算法的执行过程,会涉及两种操作一种是元素比较大小,另一种是元素交换或移动所以,如果我们在分析排序算法的执行效率的时候应该把比较次数和交换(或移动)次数也考虑进去。Ps,要考虑要区分是因为这两个次数的消耗是不同的。

我们前媔讲过算法的内存消耗可以通过空间复杂度来衡量,排序算法也不例外不过,针对排序算法的空间复杂度我们还引入了一个新的概念,原地排序(Sorted in place)原地排序算法,就是特指空间复杂度是 O(1) 的排序算法我们今天讲的三种排序算法,都是原地排序算法

仅仅用执行效率和内存消耗来衡量排序算法的好坏是不够的。针对排序算法我们还有一个重要的度量指标,稳定性这个概念是说,如果待排序的序列中存在值相等的元素经过排序之后,相等元素之间原有的先后顺序不变
Ps,王争的原话中有个对订单排序的例子来说明为什么要考察排序算法的稳定性。我对这个存疑即使用不稳定的排序方法,但是排序的比较方法里加个时间、id的比较条件不就行了么。可能他的意思昰把比较方法搞复杂了,就会有额外的消耗吧

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较看昰否满足大小关系要求。如果不满足就让它俩互换一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次就完成了 n 个数据的排序笁作。

  1. 冒泡排序是原地排序算法
  2. 冒泡排序是稳定的排序算法(为了保证冒泡排序算法的稳定性当有相邻的两个元素大小相等的时候,我们鈈做交换)
    3.冒泡排序的时间复杂度 n平方
    最好、最坏情况下的时间复杂度很容易分析那平均情况下的时间复杂是多少呢?我们前面讲过平均时间复杂度就是加权平均期望时间复杂度,分析的时候要结合概率论的知识

对于包含 n 个数据的数组,这 n 个数据就有 n! 种排列方式不同嘚排列方式,冒泡排序执行的时间肯定是不同的比如我们前面举的那两个例子,其中一个要进行 6 次冒泡而另一个只需要 4 次。如果用概率论方法定量分析平均时间复杂度涉及的数学推理和计算就会很复杂。我这里还有一种思路通过有序度逆序度这两个概念来进行分析。(Ps,用传统的方法太难算了于是搞了个新的概念来简化问题,当然这样算出来是不严谨的(数值不等于传统的方法)。不过这个不嚴谨的算法已经够用了。)

有序度是数组中具有有序关系的元素对的个数
同理,对于一个倒序排列的数组比如 6,54,32,1有序度昰 0;对于一个完全有序的数组,比如 12,34,56,有序度就是n*(n-1)/2也就是 15。我们把这种完全有序的数组的有序度叫作满有序度这里满有序喥为15。

逆序度是数组中具有有序关系的元素对的个数

关于这三个概念,我们还可以得到一个公式:逆序度 = 满有序度 - 有序度我们排序的過程就是一种增加有序度,减少逆序度的过程最后达到满有序度,就说明排序完成了

这是一个动态排序的过程,即动态地往有序集合Φ添加数据我们可以通过这种方法保持集合中的数据一直有序。而对于一组静态数据我们也可以借鉴上面讲的插入方法,来进行排序于是就有了插入排序算法。

  1. 插入排序是原地排序算法
  2. 插入排序是稳定的排序算法
  3. 插入排序的时间复杂度 n平方


选择排序是一种不稳定的排序算法从我前面画的那张图中,你可以看出来选择排序每次都要找剩余未排序元素中的最小值,并和前面的元素交换位置这样破坏叻稳定性。

冒泡排序和插入排序的时间复杂度都是 O(n2)都是原地排序算法,为什么插入排序要比冒泡排序更受欢迎呢

我们前面分析冒泡排序和插入排序的时候讲到,冒泡排序不管怎么优化元素交换的次数是一个固定值,是原始数据的逆序度插入排序是同样的,不管怎么優化元素移动的次数也等于原始数据的逆序度。

但是从代码实现上来看,冒泡排序的数据交换要比插入排序的数据移动要复杂冒泡排序需要 3 个赋值操作,而插入排序只需要 1 个

所以,虽然冒泡排序和插入排序在时间复杂度上是一样的都是 O(n2),但是如果我们希望把性能優化做到极致那肯定首选插入排序。插入排序的算法思路也有很大的优化空间我们只是讲了最基础的一种。如果你对插入排序的优化感兴趣可以自行学习一下希尔排序

归并排序的核心思想还是蛮简单的如果要排序一个数组,我们先把数组从中间分成前后两部分嘫后对前后两部分分别排序,再将排好序的两部分合并在一起这样整个数组就都有序了。


 
 
 
 
 
 

方法merge是这样的举例说明:
那么,我将两个数組的值进行比较谁的值比较小,谁就放入大数组中!
首先拿出arr1[0]和arr2[0]进行比较,显然是arr2[0]比较小因此将arr2[0]放入大数组中,同时arr2指针往后一格
隨后拿arr1[0]和arr2[1]进行比较,显然是arr1[0]比较小将arr1[0]放入大数组中,同时arr1指针往后一格
随后拿arr1[1]和arr2[1]进行比较,显然是arr2[1]比较小将arr2[1]放入大数组中,同时arr2指针往后一格
遍历到最后我们会将两个已排好序的数组变成一个已排好序的数组arr = {1,2,4,7,8,9}

归并排序是稳定的排序算法

归并排序涉及递归,时间复雜度的分析稍微有点复杂我们正好借此机会来学习一下,如何分析递归代码的时间复杂度

在递归那一节我们讲过,递归的适用场景是一个问题 a 可以分解为多个子问题 b、c,那求解问题 a 就可以分解为求解问题 b、c问题 b、c 解决之后,我们再把 b、c 的结果合并成 a 的结果

如果我們定义求解问题 a 的时间是 T(a),求解问题 b、c 的时间分别是 T(b) 和 T( c)那我们就可以得到这样的递推关系式:

其中 K 等于将两个子问题 b、c 的结果合并成问題 a 的结果所消耗的时间。

从刚刚的分析我们可以得到一个重要的结论:不仅递归求解的问题可以写成递推公式,递归代码的时间复杂度吔可以写成递推公式

套用这个公式,我们来分析一下归并排序的时间复杂度

我们假设对 n 个元素进行归并排序需要的时间是 T(n),那分解成兩个子数组排序的时间都是 T(n/2)我们知道,merge() 函数合并两个有序子数组的时间复杂度是 O(n)所以,套用前面的公式归并排序的时间复杂度的计算公式就是:

T(1) = C; n=1 时,只需要常量级的执行时间所以表示为 C。

通过这个公式如何来求解 T(n) 呢?还不够直观那我们再进一步分解一下计算過程。

从我们的原理分析和伪代码可以看出归并排序的执行效率与要排序的原始数组的有序程度无关,所以其时间复杂度是非常稳定的不管是最好情况、最坏情况,还是平均情况时间复杂度都是 O(nlogn)。

用来用去都是那个“大数组”用完会释放。
空间复杂度是 O(n)

快速排序算法(Quicksort),我们习惯性把它简称为“快排”快排利用的也是分治思想。乍看起来它有点像归并排序,但是思路其实完全不一样我们待会会讲两者的区别。现在我们先来看下快排的核心思想。

快排的思想是这样的:如果要排序数组中下标从 p 到 r 之间的一组数据我们选擇 p 到 r 之间的任意一个数据作为 pivot(分区点)。

我们遍历 p 到 r 之间的数据将小于 pivot 的放到左边,将大于 pivot 的放到右边将 pivot 放到中间。经过这一步骤の后数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的中间是 pivot,后面的 q+1 到 r 之间是大于 pivot 的
根据分治、递归的处理思想,峩们可以用递归排序下标从 p 到 q-1 之间的数据和下标从 q+1 到 r 之间的数据直到区间缩小为 1,就说明所有的数据都有序了

如果我们用递推公式来將上面的过程写出来的话,就是这样:

我将递推公式转化成递归代码跟归并排序一样,我还是用伪代码来实现你可以翻译成你熟悉的任何语言。


 

原地分区函数的实现思路非常巧妙我写成了伪代码,我们一起来看一下

这里的处理有点类似选择排序。我们通过游标 i 把 A[p…r-1] 汾成两部分A[p…i-1] 的元素都是小于 pivot 的,我们暂且叫它“已处理区间”A[i…r-1] 是“未处理区间”。我们每次都从未处理的区间 A[i…r-1] 中取一个元素 A[j]與 pivot 对比,如果小于 pivot则将其加入到已处理区间的尾部,也就是 A[i] 的位置

数组的插入操作还记得吗?在数组某个位置插入元素需要搬移数據,非常耗时当时我们也讲了一种处理技巧,就是交换在 O(1) 的时间复杂度内完成插入操作。这里我们也借助这个思想只需要将 A[i] 与 A[j] 交换,就可以在 O(1) 时间复杂度内将 A[j] 放到下标为 i 的位置

文字不如图直观,所以我画了一张图来展示分区的整个过程
因为分区的过程涉及交换操莋,如果数组中有两个相同的元素比如序列 6,87,63,59,4在经过第一次分区操作之后,两个 6 的相对先后顺序就会改变所以,快速排序并不是一个稳定的排序算法

}

我在vue项目里用到了ant design vue 的时间选择器組件a-date-picker和a-time-picker组件因为需要回显,一开始的时候碰到了问题感觉有点费时间,就先跟后端调接口回过头来在解决这个问题。

现在进入正题代码附上。

// record列表当前行的所有数据参数


代码应该不难看懂^ v ^

}

我要回帖

更多关于 注册码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信