Atitit 查找算法 艾提拉大总结 目录 1. 查找算法分类 1 1.1. 简单查找算法之折半查找、插值查找、斐波那契查找 1 1.2. 按照数据结构查找法分类 hash 表 1 2. 第8章查找

Atitit 查找算法 艾提拉大总结

目录

1. 查找算法分类 1

1.1. 简单查找算法之折半查找、插值查找、斐波那契查找 1

1.2. 按照数据结构查找法分类 hash 表 1

2. 第8章查找 291 1

2.1. 8.3顺序表查找 295 2

2.2. 8.4有序表查找 298 2

2.3. 8.4.1折半查找 298 2

2.4. 8.4.2插值查找 301 2

2.5. 8.4.3斐波那契查找 302 2

2.6. 8.5线性索引查找 306 2

2.7. 8.6二叉排序树 313 2

2.8. 8.8多路查找树(b树) 341 3

2.9. 8.9散列表查找(哈希表)概述 353 3

 

 

  1. 查找算法分类
    1. 简单查找算法之折半查找、插值查找、斐波那契查找

 

    1. 按照数据结构查找法分类 hash 表

 

  1. 第8章查找 291

8.1开场白 292

当你精心写了一篇博文或者上传一组照片到互联网上,来自世界各地的无数“蜘蛛”便会蜂拥而至。所谓蜘蛛就是搜索引擎公司服务器上软件,它把互联网当成了蜘蛛网,没日没夜的访问上面的各种信息。

8.2查找概论 293

比如网络时代的新名词,如“蜗居”、“蚁族”等,如果需要将它们收录到汉语词典中,显然收录时就需要查找它们是否存在,以及找到如果不存在时应该收录的位置。

    1. 8.3顺序表查找 295

8.3.1顺序表查找算法 296

8.3.2顺序表查找优化 297

    1. 8.4有序表查找 298

我在纸上已经写好了一个100以内的正整数请你猜,问几次可以猜出来。当时已经介绍了如何才可以最快的猜出这个数字。我们把这种每次取中间记录查找的方法叫做折半查找。

实现这三种查找算法前,都需要对数据进行排序,三种的算法复杂度大致为log(n),针对于分布均匀的数组,插值查找的性能好于折半查找,插值查找涉及到了乘法除法运算,对于大量的数据查找效率显出低效,fabonacci查找只含有加减法运算,可以节省一定的计算量。

    1. 8.4.1折半查找 298
    2. 8.4.2插值查找 301

 

插值查找,与折半查找类似,也有三个“哨兵”,不过这次mid的取值不是通过简单low与high相加的一般。mid的取值是要通过计算key与low所对应元素的差异性。mid=low + ( key - a[low] ) * ( high - low ) / ( a[high]-a[low] )。后面的查找过程与折半查找类似

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

插值查找与二分查找的原理类似,区别就在于mid值的选取。

在插值查找中,mid = low + ( (key - a[low]) / (a[high] - a[low]) ) * (high - low)。该算法对表长较大,而关键字分布比较均匀的情况下,性能较高,而对于分布不均匀的数据,则不太适用。

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

当翻字典找单词比如better我们绝逼不是从字典中间开始找,而是,相对靠前找吧,这就是按照一定的比例来进行分割查找的过程;
折半查找,我们计算mid的方式是:
mid = (low + high) / 2, 也就是 low + 1/2 * (high - low) ;
插值将其改进成:
mid = low + (key-a[low]/a[high]-a[low])*(high-low);
也就是将上述的比例参数1/2改进为自适应的,根据关键字在整个有序表中所处的位置,让mid值的变化更靠近关键字key,这样也就间接地减少了比较次数。

    1. 8.4.3斐波那契查找 302

 

 

斐波那契查找利用了黄金分割原理来实现。
黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。

斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,从第3个数开始,后面的数为前面2个数的和,随着,数组长度的增加,前一个数比后一个数的值,越来越接近0.618,利用这个特性,可以将黄金比例运用到查找技术中。

黄金比例查找也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率;

    1. 8.5线性索引查找 306( 线性索引包括:稠密索引、分块索引、倒排索引)

 

上述查找针对海量数据时,耗时非常大,故有了索引查找。 
线性索引包括:稠密索引、分块索引、倒排索引。

 

稠密索引

稠密索引即数据集中每一个记录都对应一个索引。如下图所示: 

对于稠密索引来说,索引的关键字一定是按照有序排列的。 
缺点:索引量与数据量是同样规模的,反复读取索引耗时大。

分块索引

即对数据集进行分块,每个块之间是有序的,对每个块建立索引项,从而减少索引的数量。 
分块满足的两个条件

 

 

我母亲年纪大了,经常在家里找不到东西,于是她用一小本子,记录了家里所有小东西放置的位置,比如户口本放在右手床头柜下面抽屉中,钞票放在衣……咳,这个就不提了。

8.5.1稠密索引 307

8.5.2分块索引 308

8.5.3倒排索引 311

    1. 8.6二叉排序树 313

后来老虎来了,一人拼命地跑,另一人则急中生智,爬到了树上。而老虎是不会爬树的,结果……。爬树者改变了跑的思想,这一改变何等重要,捡回了自己的一条命。

8.6.1二叉排序树查找操作 316

8.6.2二叉排序树插入操作 318

8.6.3二叉排序树删除操作 320

8.6.4二叉排序树总结 327

8.7平衡二叉树avl树) 328

平板就是一个世界,当诱惑降临,人心中的平衡被打破,世界就会混乱,最后留下的只有孤独寂寞失败。这种单调的机械化的社会,禁不住诱惑的侵蚀,最容易被侵蚀的,恰恰是最空虚的心灵。

8.7.1平衡二叉树实现原理 330

8.7.2平衡二叉树实现算法 334

    1. 8.8多路查找树(b树) 341

要观察一个公司是否严谨,看他们如何开会就知道了。如果开会时每一个人都只是带一张嘴,即兴发言,这肯定是一家不严谨的公司。

8.8.12-3树 343

8.8.22-3-4树 348

8.8.3b树 349

8.8.4b+树 351

    1. 8.9散列表查找(哈希表)概述 353

你很想学太极拳,听说学校有个叫张三丰的人打得特别好,于是到学校学生处找人,工作人员拿出学生名单,最终告诉你,学校没这个人,并说张三丰几百年前就已经在武当山作古了。

8.9.1散列表查找定义 354

8.9.2散列表查找步骤 355

8.10散列函数的构造方法 356

8.10.1直接定址法 357

8.10.2数字分析法 358

8.10.3平方取中法 359

8.10.4折叠法 359

8.10.5除留余数法 359

8.10.6随机数法 360

8.11处理散列冲突的方法 360

我们每个人都希望身体健康,虽然疾病可以预防,但不可避免,没有任何人可以说,生下来到现在没有生过一次病。

8.11.1开放定址法 361

8.11.2再散列函数法 363

8.11.3链地址法 363

8.11.4公共溢出区法 364

8.12散列表查找实现 365

8.12.1散列表查找算法实现 365

8.12.2散列表查找性能分析 367

8.13总结回顾 368

8.14结尾语 369

如果我是个喜欢汽车的人,时常搜汽车信息。那么当我在搜索框中输入“甲壳虫”、“美洲虎”等关键词时,不要让动物和人物成为搜索的头条。

  1. ref

Atitit 查找算法 艾提拉大总结

大话数据结构读书笔记艾提拉总结.docx

Atitit.数据结构原理概论

(2条消息)简单查找算法之折半查找、插值查找、斐波那契查找 - 不积跬步,无以致千里;不积小流,无以成江海 - CSDN博客.html

插值查找(死循环)与斐波那契查找.html

(2条消息)数据结构之线性索引查找 - rainxuanz的博客 - CSDN博客.html

原文地址:https://www.cnblogs.com/attilax/p/15197295.html