潍坊市论坛

首页 » 分类 » 问答 » 进ldquo学rdquo计算
TUhjnbcbe - 2021/5/15 23:07:00
算法时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用

表示,若有某个辅助函数

,使得当n趋近于无穷大时,

的极限值为不等于零的常数,则称

的同数量级函数。记作

,称

为算法的渐进时间复杂度,简称时间复杂度。

一个算法中的语句执行次数称为语句频度或时间频度。记为

常见时间复杂度

名称运行时间(

)运行时间举例算法举例常数时间判断一个二进制数的奇偶对数时间二分搜索线性时间无序数组的搜索对数时间二次时间冒泡排序、插入排序三次时间矩阵算法的基本实现指数时间使用动态规划解决旅行推销员问题阶乘指数通过暴力搜索解决旅行推销员问题幂指时间

加法规则

乘法规则

空间复杂度

空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做

。比如直接插入排序的时间复杂度是

,空间复杂度是

。而一般的递归算法就要有

的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。

加法规则

乘法规则

冒泡算法(BubbleSort)

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

选择排序(SelectionSort)

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

插入排序(InsertionSort)

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

希尔排序(ShellSort)

希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版》的合著者RobertSedgewick提出的。

归并排序(MergeSort)

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

快速排序(QuickSort)

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

堆排序(HeapSort)

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

计数排序(CountingSort)

计数排序(Countingsort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。

桶排序(BucketSort)

桶排序(Bucketsort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排

基数排序(RadixSort)

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以是稳定的。

Arce

你能看到这里就是对我最好的赞赏

1
查看完整版本: 进ldquo学rdquo计算