码迷,mamicode.com
首页 > 其他好文 > 详细

第7章学习小结

时间:2020-06-27 13:29:49      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:构造方法   返回   知识点   bsp   常用   不能   时间复杂度   邻接表   位置   

一、线性表的查找

    1、顺序查找:

typedef KeyType int;//这个根据具体情况去定义;在这里定义为int; typedef struct{
    KeyType key;
    InfoType otherinfo;//这个根据具体情况去改,这里只是抽象的说成还要添加这些类型。 
 }ElemType;
 
 typedef struct{
     ElemType *R;
     int length;
 }SSTable; 

 

①查找过程:按顺序一个一个比对,直到找到为止;若全部对比完都没找到,则意味着查找失败。

②设置哨兵与没有设置哨兵的区别:时间复杂度同样是O(n),但是从比较次数来看,设置哨兵的时间复杂度为O(2n),而没有设置哨兵的时间复杂度为O(n)。

    2、二分查找:

int Search_Bin(SSTable ST,KeyType key)
{//在有序表ST表中折半查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0;
   int low = 1 ,high = ST.length;//置查找区间初值。 
   int mid;
   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; //表中不存在待查元素; 
  }

 

①要求表中的元素按关键字有序排列

②查找过程:从表的中间记录开始,如果与中间记录的关键字相同,则查找成功;若大于或小于中间记录的关键字,则在表中大于或小于中间记录的那一半中查找,重复操作,

    直到查找成功,或者在某一步中查找区间为空,则代表查找失败。

③边界问题:

  a)剩余3个数:从中间记录开始比对,最终转化成剩余1个数的问题。

  b)剩余2个数:假设取上,那么mid=l,如果a[mid]>x,则r=l-1,l>r。

  c)剩余1个数:与剩余两个数一样。

(因此,当l>=r,都是在搜索范围内)

④应用场景:

  a)当找不到时,返回l或者r。

  b)多条相同关键字记录时,根据mid往前往后找相同关键字的记录。

⑤注意:

  a)对于数组a使用二分查找法查找:首先排序,然后查找,T(n)=O(nlog2(n))。

  b)链表不能以时间复杂度O(log2(n))实现折半查找,因为链表不能随机存取。

 

  二、树表的查找

    1、二叉排序树

      ①性质:若左子树不为空,左子树上所有结点的值均小于根结点的值;若右子树不为空,右子树上所有结点的值均大于根结点的值;他的左、右子树也分别为二叉排序树。

       ②查找:

  a)若key=T->data.key,说明查找成功。

  b)若大于,则递归查找右子树。

  c)若小于,则递归查找左子树。

③插入:若小于则插入左子树,若大于则插入右子树

④删除:当删除结点左右不为空时,找左子树的最右结点,找右子树的最左结点。

    2、平衡二叉树:平衡因子定义为该结点左子树和右子树的深度之差,平衡二叉树上所有结点的平衡因子只能是-1、0和1.只要二叉树上有一个结点的平衡因子的绝对值大

         于1,则该二叉树不平衡

    3、B-树:多叉树,一层有多个关键字。可减小高度,避免内外存反复的交换。

    4、B+树:类似B-树,可实现区间查找。

 

  三、散列表

    1、构造方法:计算简单;分布应均匀,尽可能减少冲突。

①数字分析法:仅适用于事先知道关键字集合。

②平方取中法:适用于不能事先了解关键字的所有情况,或难于直接从关键字中找到取值较分散的几位。

③折叠法:适用于散列地址的位数较少,而关键字的位数较多。

④除留余数法:最常用的构造散列函数的方法,选p为小于表长的最大质数。

    2、处理冲突的方法

①开放地址法:

  a)线性探测法:从冲突地址的下一单元顺序寻找空单元,如果最后一个位置也没找到空单元,则回到表头开始继续查找。

                             如果找不到空位,说明散列表已满,需要进行溢出处理。

  b)二次探测法:正增量为往后查找,负增量为往前查找

  c)伪随机探测法

②链地址法:类似邻接表,将所有冲突的地址以链式存储的形式放在相应位置的后面。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我觉得这一章学得不够好,这一章几乎把前面的知识点都用上了,看来我还是需要再对前面的知识点捣一捣,不过还好,csdn上有需要知识点可以学到,可以补充了解,再接再励,学期要结束了,期末考来了,得复习了。

第7章学习小结

标签:构造方法   返回   知识点   bsp   常用   不能   时间复杂度   邻接表   位置   

原文地址:https://www.cnblogs.com/ldx539/p/13198055.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!