1、二分查找的前提是有序,二分查找要求元素有序、顺序存储
2、二分查找的最坏时间复杂度为O(log n)
实例:有序表中有1000个元素,则用二分查找查找元素X最多需要比较10次
解析:二分查找的最坏时间复杂度为O(log n),把n等于1000带入得到,log1000>9,<10,取整那么至少10
3、用概率查找改进查找效率,是经过多次查找以后使得查找次数越多的元素查找速度越快
解析:查找次数多的意思是多次查找中某几个目的数多次出现,那么既然是改进查找,肯定不能是折半(折半只有一种顺序),所以采用顺序查找,将经常要查的那一些往前面靠,所以查找地更快一些
实例:假设顺序表中包含5个关键字{a,b,c,d,e},它们的查找概率分别为{0.25,0.3,0.2,0.1,0.15},为了使查找成功时的平均查找长度达到最小,则顺序表中数据元素的出现顺序是
b,a,c,e,d
解析:让概率大的查找次数少就可以保证总的查找次数最小,所以对序列依照查找概率排序,概率最大的找的次数最小
4、二分查找法:middle =(right +left )/2,当>middle 时,left =middle +1;反之,right =middle -1
实例:有序数组1 2 3 4 5 6 7 8 9查找3的二分查找序列是
解析:
索引:0 1 2 3 4 5 6 7 8
值: 1 2 3 4 5 6 7 8 9
第一步:left = 0;right = 8;middle = (0+8)/2=4;为5
第二步:left = 0;right = 3;middle = (0+3)/2=1;为2
第三步:left = 2;right = 3;middle = (2+3)/2=2;为3
停止
5、对长度为 n 的线性表排序,最坏情况下时间复杂度:
- 二分法查找为O(log n) ;
- 顺序查找法为 O ( n );
- 分块查找时间复杂度与分块规则有关;
- 哈希查找时间复杂度为 O(1) ,因其通过计算 HashCode 来定位元素位置,所以只需一次即可
6、BFS(广度优先)生成树与DFS(深度优先)生成树
解析:http://data.biancheng.net/view/45.html
实例:BFS生成树的树高比DFS生成树的树高小或者相等
解析:BFS是广度优先遍历,DFS是深度优先遍历。
对于一些特殊的图,比如只有一个顶点的图,其BFS生成树的树高和DFS生成树的树高相等。
一般的图,根据图的BFS生成树和DFS树的算法思想,BFS生成树的树高比DFS生成树的树高小。
7、KMP算法
https://www.sohu.com/a/336648975_453160
8、能在O (1) 时间内访问线性表的第i个元素的结构是单链表
9、Hash表的查找效率取决于散列函数、处理冲突的方法和装填因子。
- 冲突的产生概率与装填因子(表中记录数与表长之比)的大小成正比,即装填得越满越容易发生冲突
- 采用合适的处理冲突的方式避免产生聚集现象,也将提高查找效率,例如用拉链法解决冲突时就不存在聚集现象,用线性探测法解决冲突时易引起聚集现象
10、给定一个整数sum,从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum,最快的平均时间复杂度是O(n)
11、分块查找的基本思想是首先在索引表中进行查找,以便确定给定的关键字可能存在的块号,然后再在相应的块内进行顺序查找
12、顺序查找方法和折半查找方法的平