软考中级(软件设计师)--数据结构基础之查找

一、查找:

给定一个值K,在含有N个记录的文件中进行搜索,寻找一个关键字等于K的记录,如找到则输出该记录,否则输出查找不成功的信息。

二、查找算法的优劣:

用比较次数的平均值来评估算法的优劣,称为平均查找长度ASL。

三、静态查找表:

  • 顺序查找(线性查找)
  • 折半查找(二分或对分查找)
  • 分块查找(索引顺序查找)

四、顺序查找:用逐一比较的办法顺序查找关键字

性能分析:平均查找长度为:(N+1)/2,时间效率O(n)
优点:算法简单、适用面广,对查找表的结构没有要求,无论记录是否按关键字有序排列均可使用。
缺点:在N值较大时,平均查找长度较大,查找效率较低。

五、折半查找(二分查找)

先给数据排序,形成有序表,把待查数据值与查找范围的中间元素值进行比较,会有四种情况出现。

  1. 待查找数值与中间元素值相等,返回中间元素值的索引。
  2. 待查找数值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行第一种,直到找到相等的值。
  3. 待查找的数值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行第一种,直到找到相等的值。
  4. 如果最后找不到相等的值,则返回错误提示信息。

平均查找长度:(n+1)/n log2(N+1)-1=log2(n-1)-1
折半查找比顺序查找的效率要高,但它 要求查找表经行顺序存储并且按关键字有序列表,因此对表经行元素的插入和删除时,需要移动大量的元素,所以折半查找适用于表不易变动,且又经常经行查找的情况。

六、分块查找:

又称索引顺序查找,是对顺序查找方法的一种改进,其性能介于顺序查找和折半查找之间。
在分块查找过程中,首先把表分成若干块,每一块中的关键字不一定有序,但有块之间是有序的,即后一块中所有记录的关键字均大于前一块中最大的关键字,还建立了一个索引表,索引表按关键字有序。

七、查找步骤分两步经行:

  1. 对索引表使用折半查找法(因为索引表是有序表)
  2. 确定了待查关键字所在的子表后,在子表内采用顺序查找法(因为各子表内部是无序表)

八、哈希表

根据关键码值而直接经行访问的数据结构。由关键码的值决定数据的这个存储地址,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫坐散列表。
优点:查找速度极快(O(1)),查找效率与元素个数N无关。

九、哈希查找方法中,冲突(数值数量大于哈希值数量)是不可能避免的,只能可能减少。

  1. 构造好的哈希函数
    所选函数尽可能简单、以便提高转换速度。
    所选函数对关键码计算除的地址,应在哈希地址内集中并大致均匀分布,以减少空间浪费。
  2. 制定一个好的解决冲突的方案
    查找时,如果哈希函数计算出的地址查不到关键码,则应当一句解决冲突的规则,有规律地查询其它相关单元。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章