算法知识整理 1 - 常用排序方法的时间与空间复杂度

常用排序算法时间、空间复杂度 Time and Space Complexity of Commonly Used Sorting Algorithm
在这里插入图片描述
Recursion
递归就是指程序调用自身的编程思想,即一个函数调用本身;递归有两部分组成:递归体和递归出口 or 递归体和递归出口
Iteration
迭代是利用已知的变量值,根据递推公式不断演进得到变量新值的编程思想。

假设顺序表中包含5个关键字{a,b,c,d,e},它们的查找概率分别为{0.25,0.3,0.2,0.1,0.15},为了使查找成功时的平均查找长度达到最小,则顺序表中数据元素的出现顺序是( )
Answer: b,a,c,e,d
类似于哈夫曼编码的思想,让概率大的查找次数少就可以保证总的查找次数最小,所以对序列依照查找概率排序,概率最大的找的次数最小,
根据题干的“使查找成功时的平均查找长度达到最小”,所以将经常需要查找(查找概率大)的数据放在顺序表中较前的位置。
所以b的查找概率0.3最大,应放在顺序表最前位置。d的查找概率为0.1最小,放在最后位置。

哪些排序在某趟排序结束后不一定能选出一个元素放在其最终位置上?
Answer: 希尔排序。。。and???
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 所以每一趟选择的元素都会放在他的最终位置

冒泡排序, 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。比如按照升序排序则每一趟会将前面未排序部分的最大的往后交换到已排序的最前面,为其最终位置

堆排序如果要求升序则建立大根堆,降序则建立小根堆,堆顶元素为最大或者最小的元素,将这个元素与最后一个位置的元素交换,再将剩余元素还原成大小跟堆,每一趟都会选出一个未排序中的最大或者最小放大他的最终位置

希尔排序由于是按照增量排序,步长不同可能元素不一定到他最终位置

将一个递归算法转换为非递归算法,通常需要借用的数据结构是( 栈 )
解析:栈和递归的原理是一样的。。。
栈是后进先出,递归何尝不是。
递归的第一次判断先‘进’,最后返回;终止条件最后‘进’,第一个返回
自己的理解:递归可用来查找或者删除。比方说递归在很多嵌套文件夹里面找一个要找的文件,那么,每一个路过的文件夹或文件就相当于压进栈的元素。当找到目标文件后,目标文件就是最后一个进栈的元素,而也是第一个出栈的元素,明显对应栈的"LIFO"后进先出。

用邻接矩阵存储有n个结点(0,1,…,n)和e条边的有向图(0≤e≤n(n-1))。在邻接矩阵中删除结点i(0≤i≤n-1)的时间复杂度是(O(n))
解析:
邻接矩阵用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据。
删除一个节点,需要对比所有元素,所以是n。
在这里插入图片描述
一个算法应该是(B)
A 程序 B 问题求解步骤的描述 C要满足五个基本特性

解析:算法是思想,不一定是程序,可以使描述解决问题的方法,所以a不选;c只是算法的必要条件,不是充分条件

算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有序序列,其中每一条指令表示一个或多个操作;此外,一个算法还具有下列5个重要特征(本部分可参考本问ocean老哥回答):(1)有穷性;(2)确定性;(3)可行性;(4)输入(>=0);(5)输出(>=1)。
所以答案选B。

精俭排序,即一对数字不进行两次和两次以上的比较,以下是“精俭排序”的是 AB在这里插入代码片
插入排序
归并排序
选择排序
堆排序

A.插入排序,前面是有序的,后面的每一个元素与前面有序的元素比较,比较过的就是有序的了,不会再比较一次,例如:
3 2 1 5 第一趟:【2,3,1,5】,2和3比较,3后移;第二趟:【1,2,3,5】,1和2,1和3比较,而2,3不会比较。
B.每次合并后,内部都是有序的,内部的元素之间不用再比较
C.选择排序,每次在后面的元素中找到最小的,找最小元素的过程是在没有排好序的那部分进行,所有肯定会比较多次;
D.堆排序:每次要调整堆,举个例子试试,很容易看出来。

总之,只要是每次操作是在排好序的那部分元素之间操作,就符合题意,否则不是。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章