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

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/attilax/p/15197295.html
Copyright © 2011-2022 走看看