2019-11-30查找

查找总括

查找的常用方法

  • 顺序查找
  • 折半查找
  • 分块查找
  • B树
  • B+树
  • 散列表

查找的相关概念

  1. 查找的概念
  • 在数据集合中寻找满足某种条件的数据元素的工程。
  1. 查找表
  • 用于查找的数据集合,由同一种数据类型(或记录)组成,可以是一个数组或链表等数据类型
  • 操作
查询某个特定的数据元素是否在查找表中 检索满足条件的某个特定的数据元素的各种属性
在查找表中插入一个数据元素 从查找表中删除一个数据元素
  1. 关键字
  • 关键字中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。
  1. 平均查找长度
  • 查找时,关键字比较次数的平均值。
  1. 排序树
  • 描述查找过程的二叉排序树


    顺序查找判定树.JPG

    折半查找判定树.JPG

查找方式详解

1.顺序查找

  • 顺序查找又称线性查找,主要用于在线性表中进行查找。
  • 代码
typedef struct{
    ElemType *elem;
    int TableLen;
}
int Search_Seq(SStable ST,ElemType key){
ST.elem[0]=key;//哨兵
/*省去查找是否成功的判断过程*/
for(int i=ST.TableLen;ST.elem[i]!=key;i--);// 从后向前查找,因为哨兵的值等于关键字,如果集合中没有相匹配的关键字,循环就会在哨兵处终止,i=0;
return i;
}
  • 无序线性表使用顺序查早平均查找长度


    顺序查找平均查找长度.JPG
  • 有序线性表使用顺序查早平均查找长度
    根据判定树进行计算


    有序序列顺序查找平均查找长度.JPG

    Cj=失败结点所在判定树层数(lj)-1;

注意
  1. 对关键字无序线性表进行顺序查找,查找失败时要遍历整个线性表。
  2. 对关键字有序线性表进行顺序查找,查找失败时不一定要遍历整个线性表。

2.折半查找

  • 折半查找又称二分查找,仅适用于有序顺序表
  • 算法思想
    1.首先将给定值key与表中中间位置元素的关键字进行比较。
    2.若相等,则返回该元素的位置
    3.若不等,则在前半部分或者后半部分进行查找。
    4.重复该过程,直到找到查找的元素为止;或查找失败。
  • 代码
int Binary_Search(SeqList L,ELemType key){
    int low=0,high=L.Length,mid;
    while(low<=high){
    mid = (low+high)/2;
    if(L.elem[mid]==key){
           return mid;
    }else if(L.elem[mid]>key){
            high = mid-1;
    }else{
            low = mid+1;
    }
    }
    return -1;
}
  • 查找失败时平均查找长度


    折半查找判定树.JPG

    平均查找长度.JPG
注意
  • 折半查找的时间复杂度为O(log2N)

折半查找与顺序查找的应用范围

  • 顺序查找适用于顺序存储链式存储,序列有序无序皆可;折半查找只适用于顺序存储,且要求序列一定有序

3.分块查找

  • 分块查找又称索引顺序查找,它吸取了顺序查找和折半查找各自的优点。
  • 如何分块
  1. 将查找表分为若干子块。块内的元素可以无序,但块间是有序的,即 对于所有块有 第i块的最大关键字小于第i+1块的所有记录的关键字。
  2. 建立索引表,索引表中的每个元素含有各块的最大关键字和各块中的第一个元素的地址,索引表按关键字有序排序。
    块内无序,块间有序
  • 如何分块
  1. 在索引表中确定待查记录所在的块,可以顺序查找或折半查找索引表。
  2. 在块内进行顺序查找。
  • 平均查找时间
  1. 分块查找的平均查找长度为索引值(LI)和块内查找(LS)之和
  2. 若块内和和块间村采用顺序查找。且长度为n的查找表均分为b块,每块有s个记录。
    ASL=LI+LS=(b+1)/2+(s+1)/2=(S^2+2S+n)/2s;当s=√n时平均查找时间最小为√n + 1
    3.若块内采用顺序查找,块间采用折半查找
    ASL=LI+LS=[log2(b+1)]+(S+1)/2
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,736评论 0 13
  • 一、相关定义 查找——查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。所有这些...
    开心糖果的夏天阅读 1,123评论 0 8
  • 查找 查找表是由同一类型的数据元素(或记录)构成的集合。关键字是数据元素中某个数据项的值,也称为键值,用它可以标识...
    keeeeeenon阅读 1,971评论 0 3
  • 本文的整理基于:http://blog.csdn.net/qq_23217629/article/details/...
    阿阿阿阿毛阅读 1,596评论 0 3
  • 目录 [1. 顺序查找][2. 二分查找][3. 插值查找][4. 斐波那契查找][5. 树表查找][6. 分块查...
    jiangmo阅读 17,622评论 4 6