1、
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
2、
不能讨论绝对查找速度,因为不知道需要查找元素的位置
只能讨论平均的时间复杂度
3、
二分查找必须是顺序存储的有序线性表
4、
不同的起点,不同的存储结构都会影响无向图的深度遍历
5、
第一次:比较:(0+16)//2 = 8,比较a8
第二次:比较: (0+7) // 2 = 3 或者 (9+16) // 2=12
6、
关于二分查找的最劣情况的计算公式(log2n)+1,其中(log2n)向下取整
7、
由题目已知元素序号(即下标)范围为1~12。查找1次成功的结点为:6。查找2次成功的结点为:3,9。查找3次成功的结点为:1,4,7,11。查找4次成功的结点为:2,5,8,10,12。成功查找所有结点的总的比较次数为:1×1+2×2+3×4+4×5=37平均比较次数为37/12。因此选择B。
8、
可以用自己的模拟栈实现
9、
第一次查到55
第二次查到93
10、
由题目已知元素序号(即下标)范围为1~12。查找1次成功的结点为:6。查找2次成功的结点为:3,9。查找3次成功的结点为:1,4,7,11。查找4次成功的结点为:2,5,8,10,12。成功查找所有结点的总的比较次数为:1×1+2×2+3×4+4×5=37平均比较次数为37/12。约为3.1
11、
查找第一个数查1次
查找第二个数查2次
查找第三个数查3次
…………
查找第n个数查n次
平均次数为(1+n)/2
12、
与第7题相同
13、
先计算模式串abaabc的next数组
abaabc
011223
当匹配到i=5时,a!=c,
abaabaabacacaabaabcc
abaabc
123456789
然后 next[5]=3,移动模式串t往后3个位置,
abaabaabacacaabaabcc
xxxabaabc
12345678
i=5,j=2,继续比较
14、
500+250+125+63+31+16+8+4+2+1=1000
15、
KMP匹配算法 时间复杂度为O(N+P)
16、
第一次middle=6,第二次middle=9,第三次middle=10,第四次middle=11,之后由于middle=11+(12-11)/2=11,一直没有变化所以为无数次
17、
答案:O(n)
思想类似于两端向中间扫描
1、设定两个指针P1、P2,分别指向数组开始和结尾,即P1指向最小值,P2指向最大值;
2、计算 *P1+*P2 的值为 SUM,与 sum 比较,记录它们的差值 DIF 和 SUM,若 SUM<sum,P1++,若SUM>sum,P2–;
3、重复以上过程直到DIF最小
18、
对于TRIE树(字典树)来说,能在O(len)的时间内查出该单词是否存在,而且空间占用少。
19、
20、
与二分法比较 斐波那契查找的平均性能比折半查找好 但最坏的情况下比折半性能差 还有一个优点,分割时只需要进行加减运算