第七章学习小结

本章学习了几种查找方式和哈希表。

一、基本概念

(1)查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(。

(2)无序查找和有序查找。

      无序查找:被查找数列有序无序均可;
      有序查找:被查找数列必须为有序数列。

(3)平均查找长度(ASL):需和指定key进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。

(4)关键字(Key):是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。若关键字可以唯一地标识一个记录,则称此关键字为主关键字;若关键字对应多个记录,则称此关键字为次关键字。\

二、查找方法

顺序查找:

int Search(SSTable ST,keyType key)
{
    for(i = ST.length;i>=1;--i)
        if(ST.R[i].key == key)
            return i;
    return 0;
}

  查成功最好的情况是在第一次就找到,此时的算法时间复杂度为O(1),最坏的情况是查找到只余一个元素时才找到,需要n次比较,时间复杂度为O(n)。

带哨兵的顺序查找:

int Search_Seq(SSTable ST,KeyType key){
ST.R[0].key = key;
for(int i = ST.length;ST.R[i].key!=key;--i);
  return i ;  
 }

二分查找:

int binarySearch(int[] a, int key)
{
    int low = 0;                          
    int high = a.length-1;       
    while(low <= high)
    {
        int mid = (low + high)/2;   
        if(key < a[mid])             
        else if(key > a[mid])        
            low = mid + 1;            
        else
            return mid;                  
    }
    return -1;
}

  除此之外,还有分块查找和二叉排序树。接下来还引入了二叉平衡树

三、心得

学会了一些新的查找方式,感觉各有各的特点,要灵活运用。期末快到了,感觉还是有很多学得不精的地方,上网课也经常容易走神,还是要好好复习,准备考试。

 

posted @ 2020-06-28 20:15  缪芊  阅读(153)  评论(0编辑  收藏  举报