各查找复杂度计算

一、查找

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)哈希查找

     哈希表 不同的算法实现:直接赋值,求余法等

                   解决冲突算法:线性探测法处理(当这个冲突的地址已经被使用时,那么从该地址开始查找,直到第一个没有被使用的地址来用);链式地址法;

你可能感兴趣的:(数据结构)