一、查找
1)线性查找
平均查找长度:P=1/n;C = i;则对pc相乘求和得:(1+2+3+....+n)= (1+n)/2;
时间复杂度:O(n);
2)二分查找:
平均查找长度:p= 1/n; C =k* 2^(k-1); 则对PC相乘求和得:(1*2^0 +2*2^1+......+k*2^(k-1) )/n = (n+1)log2(n+1)/n -1;
计算方法:将二分查找法,转化为二叉树对应的高度为h 那么n= 2^h-1;那么对应每一行查找长度为c= k*2^(k-1);
时间复杂度:O(logn);
设初始问题规模为cn, 其中c为系数。二分查找依次将问题划分为cn , cn/2 , cn/4, ...... cn/(2^i)直到为c时停止。
则由此得, 2^i = n , i = logn. 即总共有logn 个节点(考虑最差情况),且已知每次操作需要时间为常量t , T = logn * t , 舍去系数,得 O(n) = logn.
3)二叉排序树查找
平均查找长度:因为各种二叉排序树的不同而不同 1) log2^n, 2) (n+1)/2;
时间复杂度:log2^n;
4)哈希查找
哈希表 不同的算法实现:直接赋值,求余法等
解决冲突算法:线性探测法处理(当这个冲突的地址已经被使用时,那么从该地址开始查找,直到第一个没有被使用的地址来用);链式地址法;