第 7 章学习小结

查找:1、逻辑结构:线性结构;非线性结构

           2、存储结构:顺序结构;链式结构

一、

平均查找长度是衡量查找算法效率的最主要指标。

二、线性表的查找

(1)顺序查找

/*设置监视哨的顺序查找的算法描述*/

typedef struct{
Elemtype *elem;
int TableLen;
}SSTable;
int Search_Seq(SSTable ST,Elemtype key){
ST.elem[0]=key; //哨兵
for(int i=ST.TableLen;ST.elem[i]!=key;--i);//从后往前找
return i; // 若表中不存在该元素,i=0
}

查找成功ASL=(n+1)/2

查找失败ASL=(n+1)*1

辅助空间为O(1),仅有一个(即“哨兵”),与n 无关

优点:算法简单,对表结构无任何要求,有序、无序、顺序结构、链式结构均适用

缺点:平均查找长度较大,查找效率较低

(2)二分查找(仅适用于有序的顺序表)

int Search_Bin(SSTable ST, KeyType key, int low, int high)

{

low = 1; high = ST.length;

    while(low <= high)

    {

    mid = (low+high)/2;

    if(key == ST.R[mid].key)  return mid;

    else if(key < ST.R[mid].key)  high=mid-1;

    else low=mid+1;

    }

    return 0;

}

等概率查找时ASL=log2(n+1)−1

时间复杂度为O(log2n)

(3)分块查找

三、树表的查找

(1)二叉排序树

二叉排序树查找算法的性能取决于二叉树的结构

其ASL最好情况log3n成正比,最差情况为树高h(此时为单支树)

二叉排序树上的查找与二分查找相差不大,但对于需要经常进行插入、删除和查找运算的表,采用二叉排序树比较好。

(2)平衡二叉树

平衡因子:左子树和右子树的深度之差(左减右),

平衡二叉树上所有结点的平衡因子只可能是-1、0和1

四、散列表的查找

(1)构造方法

1、数字分析法

2、平方取中法

3、折叠法

4、除留余数法

(2)处理冲突的方法

1.  开放地址法

      (1)线性探测法

      (2)二次探测法

     (3)伪随机探测法

2.    链地址法

 

第 7 章学习小结_第1张图片

你可能感兴趣的:(第 7 章学习小结)