zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    php 内置的 webserver 研究。
    php 系列
    git 以及 github 使用系列
    中午和同事聊天,了解的一点网络方面的东西。
    javascript中0.01*2324=23.240000000000002 ?
    javascript的 replace() 方法的使用讲解
    PHP中的ORM
    javascript 函数 add(1)(2)(3)(4)实现无限极累加 —— 一步一步原理解析
    animate.css
    面向对象编程
  • 原文地址:https://www.cnblogs.com/attilax/p/15197295.html
Copyright © 2011-2022 走看看