【ALG 算法】022 | 顺序查找、二分查找

【ALG 算法】022 | 顺序查找、二分查找

[69] 查找基本概念

例如:在信息表中,姓名无法作为关键字,但是身份证号可以(唯一性)

1.对查找表的常见操作

2.查找算法的评价指标

  1. 查找长度: 在查找运算中,需要对⽐关键字的次数称为查找⻓度。
  2. 平均查找⻓度(ASL, Average Search Length): 所有查找过程中进⾏关键字的⽐较次数的平均值:

ASL = \sum_{i=1}^n P_i C_i

其中,n代表数据元素个数, P_i 代表第i个元素的概率, C_i 代表第i个元素的查找长度。通常认为查找任何⼀个元素的概率都相同。 在二叉搜索树(BST)中曾经提及 ASL 的计算,以左边的二叉树为例:

总平均查找长度: ASL = (1 × 1 + 2 × 2 + 3 × 4 + 4 × 1)/8 = 2.62

二叉排序树查找成功ASL

因此,总平均查找长度: ASL = (3 × 7 + 4 × 2)/9 = 3.22

二叉排序树查找失败ASL

右侧二叉树的平均查找长度也同理可以计算。
ASL 的数量级反应了查找算法时间复杂度。评价⼀个查找算法的效率时,通常考虑查找成功、查找失败两种情况的 ASL

[70] 顺序查找

1.顺序查找的算法思想

顺序查找,⼜叫“线性查找”,通常⽤于线性表。
算法思想:从头到脚挨个找(或者反过来也OK)。

查找实现

例如以线性表为例,

顺序查找

哨兵模式

也可以用“哨兵”方法来实现顺序查找 :

使用0号位置存储“哨兵”,即要查找的元素,后尾向头部依次遍历搜索。

顺序查找成功 哨兵模式
顺序查找失败 哨兵模式

如果成功,则返回序数,失败则返回0。
优点:⽆需判断是否越界(最终一定会结束循环),效率更⾼(但是也高不了多少,因为阶数一样)。

查找效率分析

查找成功,每一个元素查找的可能性均等:
{ASL}_{s} = \frac{1 + 2 + 3 + . . . + n}{n} = \frac {n + 1}{2}

因为查找元素为n个,每个查找元素的概率均等,都是 \frac{1}{n} ,其总期望见上。
{ASL}_{f} = n + 1
总体时间复杂度: O(N)

2. 顺序查找的优化(对有序表)

如果原顺序表,本来就是有顺序的(递增或者递减排序),在查找到某个元素(大于或者小于)要寻找的值的时候,对后续的元素就不需要再进行判定了。
原有对顺序表的判定将转化成为“判定树”结构。

查找判定树

⼀个成功结点的查找⻓度 = ⾃身所在层数,⼀个失败结点的查找⻓度 = 其⽗节点所在层数默认情况下,各种失败情况或成功情况都等概率发⽣。由n个结点划分出共有n+1种查找失败的情况。上图中,方形是失败结点,圆形是成功结点。

3. 顺序查找的优化(被查概率不相等)

对于被查概率不相等时,被查概率⼤的放在靠前位置s,这样查找成功时候 ASL 更少。

概率不同的查找

[71] 折半查找

1.查找过程推演

折半查找,⼜称“⼆分查找”,仅适⽤于有序、具有随机存取的顺序表。链表不具备随机存取的特点,不适用于二分查找。
【问题】
在数组 {7,10,13,16,19,29,32,33,37,41,43} 顺序表中查找33,并返回其位序。

二分查找1
二分查找2
二分查找3
二分查找4

查找失败的例子暂时省略,依照查找成功可以推演。
算法程序实现:

注意,在查找失败的时候,lowhigh指针均在mid的基础上加1或者减1,因为在上一轮的判定过程中,已经排除mid位置与target不符合,所以,可以直接跳过该序列。另外,如果顺序表时降序排列,代码的逻辑需要重新修改。

2.查找效率分析,使用判定树

以上查找分析查找过程,画查找判定树: - 查找成功判定树:

二分查找成功判定树

{ASL}_{s} = \frac{1 + 2 × 2 + 3 × 4 + 4 × 4}{11} = 3

二分查找失败判定树

{ASL}_{f} = \frac{3 × 4 + 4 × 8}{12} = 3.67

3. 查找判定树的构造

判定树构造

因此,折半查找的判定树中,若 mid = ⌊(low + high) / 2 ⌋ ,则对于任何⼀个结点,必有:

右子树结点数 - 左子树结点数 =0 或 1

所以,根据平衡二叉树(AVL)定义,折半查找的判定树⼀定是平衡⼆叉树。在折半查找的判定树中,只有最下⾯⼀层是不满的。树高: h = ⌈\log_2{(N + 1)}⌉ 这里的树⾼不包含含失败结点。

判定树结点关键字:左 < 中 < 右,同时,满⾜⼆叉排序树(BST)的定义。 所以,二分查找是综合了二叉排序树和平衡二叉树的一种算法。

4. 查找效率分析

N个结点,将区间段划分成N + 1个,因此失败结点:N +1 个,等于成功结点的空链域数量。
在判定树的前提下,查找成功的 ASL_s ≤ h , 查找失败的 ASL_f ≤ h
因此,折半查找的时间复杂度为 O(\log_2{N})

深圳SEO优化公司南阳如何制作网站多少钱大鹏品牌网站设计吕梁网站关键词优化推荐漯河百度关键词包年推广呼和浩特网站制作设计推荐茂名关键词排名包年推广报价来宾网站优化按天计费多少钱石家庄网站优化排名公司滁州网站设计公司莆田关键词按天计费价格海口网站建设设计多少钱兴安盟seo哪家好重庆SEO按天扣费价格怀化至尊标王推荐晋中网站开发哪家好资阳百度关键词包年推广公司北京seo排名哪家好醴陵网站优化按天收费多少钱达州百度标王公司咸宁seo网站优化商洛网站搭建价格漯河百度标王推荐太原百度竞价多少钱吉安关键词按天扣费哪家好池州网站seo优化多少钱南山网站改版价格嘉兴seo价格西乡网站优化推广长治seo网站优化多少钱思茅关键词排名价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化