当前位置: 首页 > wzjs >正文

阜阳网站开发招聘尚一网常德论坛

阜阳网站开发招聘,尚一网常德论坛,南昌做网站公司,企业邮箱格式是什么样的目录标题 平均查找长度ASL(Average Search Length)顺序表查找法折半查找法索引顺序查找法 平均查找长度ASL(Average Search Length) 定义:为确定元素在列表中的位置,需要和给定值进行比较的关键字个数的期望值,称之为查找算法成功时的平均查…

目录标题

    • 平均查找长度ASL(Average Search Length)
    • 顺序表查找法
    • 折半查找法
    • 索引顺序查找法

平均查找长度ASL(Average Search Length)

  • 定义:为确定元素在列表中的位置,需要和给定值进行比较的关键字个数的期望值,称之为查找算法成功时的平均查找长度.

ASL = P 1 C 1 + P 2 C 2 + ⋯ + P n C n = ∑ i = 1 n P i C i \text{ASL} = P_1C_1 + P_2C_2 + \cdots + P_nC_n = \sum_{i=1}^{n} P_iC_i ASL=P1C1+P2C2++PnCn=i=1nPiCi

其中,P为第i个元素的概率,C为找到列表中第i个元素时,已经进行过的关键字比较次数.

顺序表查找法

  • 简单粗暴的查找方法,从头开始扫描,直到查找到或扫描结束.
# 1.顺序表查找法
class SeqList:def __init__(self, items):# 顺序表self.items = itemsdef seqSearch(self, key):# 顺序表查找法index = -1for i in range(len(self.items)):if self.items[i] == key:index = i + 1return indexif __name__ == '__main__':print('PyCharm')# 1.顺序表调试nums = [15, 22, 83, 54, 6, 65, 96, 72, 38, 46]sqlist = SeqList(nums)print(sqlist.seqSearch(72))
  • 运行结果

在这里插入图片描述

  • 顺序表查找法的ASL:
    • 假设长度为n,
    • 假设最后一个元素为查找目标,需比较n次,
    • 倒数第二个元素为查找目标,需比较n-1次,
    • 依此类推,
    • 第一个元素为查找目标,需比较1次.
    • 设每个元素为目标元素的概率一致,则概率值为1/n.

ASL = 1 × 1 n + 2 × 1 n + ⋯ + n × 1 n = ( 1 + 2 + ⋯ + n ) × 1 n = n + 1 2 \text{ASL} = 1 \times \frac{1}{n} + 2 \times \frac{1}{n} + \cdots + n \times \frac{1}{n} = \left(1 + 2 + \cdots + n\right) \times \frac{1}{n} = \frac{n+1}{2} ASL=1×n1+2×n1++n×n1=(1+2++n)×n1=2n+1

折半查找法

  • 前提条件:

    • 1.采用顺序存储结构
    • 2.必须按关键字大小有序排列
  • 基本思想:

    • 关键字先与中间元素比较:

      • 若相等,则查找成功
      • 若关键字大,则与后一子表的中间元素比较大小,
      • 若关键字小,则与前一子表的中间元素比较大小,
    • 重复查找,直到查找成功,或比较结束,未查找到.

  • 查找失败情况
    在这里插入图片描述

  • 查找成功情况
    在这里插入图片描述

# 2.折半查找法
class SeqList:def __init__(self, items):# 有序的顺序表self.items = itemsdef binarySearch(self, key):# 折半查找法index = -1low = 0high = len(self.items) - 1while high >= low:mid = (low + high) // 2if self.items[mid] == key:index = mid + 1breakelif self.items[mid] > key:high = mid - 1else:low = mid + 1return indexif __name__ == '__main__':print('PyCharm')# 2.折半查找调试nums = [6, 12, 15, 18, 22, 25, 28, 35, 46, 58, 60]sqlist = SeqList(nums)num = 12index = sqlist.binarySearch(num)if index == -1:print(f"{num}{nums}中未找到")else:print(f"{num}{nums}中的位置为{index}")num = 50index = sqlist.binarySearch(num)if index == -1:print(f"{num}{nums}中未找到")else:print(f"{num}{nums}中的位置为{index}")
  • 运行结果

在这里插入图片描述

  • 折半查找法的ASL:

ASL = ∑ i = 1 n P i C i = 1 n ∑ j = 1 n j × 2 j − 1 = n + 1 n log ⁡ 2 ( n + 1 ) − 1 ≈ log ⁡ 2 ( n + 1 ) − 1 \text{ASL} = \sum_{i=1}^{n} P_i C_i = \frac{1}{n} \sum_{j=1}^{n} j \times 2^{j-1} = \frac{n+1}{n} \log_2(n+1) - 1 \approx \log_2(n+1) - 1 ASL=i=1nPiCi=n1j=1nj×2j1=nn+1log2(n+1)1log2(n+1)1

  • 优点:

    • 比较次数少,查找速度快,平均性能好.
  • 缺点:

    • 要求待查表为有序表且插入/删除困难.

索引顺序查找法

  • 分块查找法,介于顺序查找法和折半查找法之间的一种查找方法.

  • 关键:建立索引表

  • 前提条件:要求将列表组织称索引顺序结构

  • 索引表示意图

在这里插入图片描述

# 3.索引顺序查找表
class Block:def __init__(self, key, low, high):self.key = keyself.low = lowself.high = high + 1class SeqList:def __init__(self, blocks, items):self.blocks = blocksself.items = itemsdef seqSearch(self, cur, key):# 索引顺序查找index = -1low = self.blocks[cur].lowhigh = self.blocks[cur].highfor i in range(low, high):if self.items[i] == key:index = i + 1return indexdef blockSearch(self, key):low = 0high = len(self.blocks) - 1mid = 0while low <= high:mid = (low+high)//2if mid == 0 or mid == len(self.blocks) -1:breakelif key < self.blocks[mid].key and key > self.blocks[mid-1].key:breakelif key > self.blocks[mid].key:low = mid + 1elif key < self.blocks[mid].key:high = mid - 1index = self.seqSearch(mid, key)return indexif __name__ == '__main__':print('PyCharm')# 3.索引表查找调试nums = [18, 14, 12, 25, 8, 28, 32, 45, 36, 58, 60, 88, 71]blocks = [Block(25, 0, 4),Block(58, 5, 9),Block(88, 10, 12)]sqlist = SeqList(blocks, nums)num = 36print(f"{num}{nums}中的位置为{sqlist.blockSearch(num)}")
  • 运行结果

在这里插入图片描述

  • 36查找的过程:

    • 将36与索引表中最大关键字25与58比较,介于他们之间,则表明36在第二块索引表中.
    • 从第二块索引表的起始地址开始扫描,最后找到36所在位置.
  • 索引表查找的ASL:

    • 其中,n为数组数量,s是每块含有元素的个数.

ASL = 1 2 ( n s + s ) + 1 \text{ASL} = \frac{1}{2} \left( \frac{n}{s} + s \right) + 1 ASL=21(sn+s)+1


文章转载自:

http://kpOvQsqo.gpzjr.cn
http://s3xSjFv4.gpzjr.cn
http://1x1iIb02.gpzjr.cn
http://1s1GEHKf.gpzjr.cn
http://JzMvIqhQ.gpzjr.cn
http://ScoVBkBt.gpzjr.cn
http://Hsv1YTdL.gpzjr.cn
http://GxjMeOIi.gpzjr.cn
http://reveFVS8.gpzjr.cn
http://EksJYBz3.gpzjr.cn
http://RAbyfx7u.gpzjr.cn
http://CwrbAJpp.gpzjr.cn
http://TtJfalzR.gpzjr.cn
http://JH3ZBsbH.gpzjr.cn
http://y7rThhga.gpzjr.cn
http://CAuKdXPl.gpzjr.cn
http://eg9zGgVl.gpzjr.cn
http://3Tk3TSoa.gpzjr.cn
http://COi91Cuf.gpzjr.cn
http://ZouIldPL.gpzjr.cn
http://dtiq0nm0.gpzjr.cn
http://ZHFtG0Hi.gpzjr.cn
http://50hLF9Dw.gpzjr.cn
http://DDlYudmm.gpzjr.cn
http://FaO2FU8Z.gpzjr.cn
http://34P2IlEc.gpzjr.cn
http://9tay0lHt.gpzjr.cn
http://qzklEDrd.gpzjr.cn
http://B8NiKeCR.gpzjr.cn
http://kkZb8qn5.gpzjr.cn
http://www.dtcms.com/wzjs/698367.html

相关文章:

  • 江干网站建设建设电动车官方网站
  • 淘宝客怎样做网站婚庆网站开发工具
  • 比较优秀的国外wordpress网站免费自己做网站吗
  • 专门做设计的一个网站上海哪个区买房最好
  • 义乌有什么企业网站吗电商运营的网站
  • 中砼建设有限公司网站广州公司注册最新流程
  • 毕设网站开发需要做什么PHP框架和wordpress
  • 响应式网站费用乐清房产在线网
  • 网站开发教学网怎么做粉丝福利购网站
  • 网站建设需要企业网络服务器忙请稍后重试3008
  • 建一个简单的网站多少钱app制作软件排名
  • 东莞住建局官方网站医疗网站设计方案
  • 重庆网站建设电话手机排行榜2021前十名最新性价比
  • 网站后台域名登陆软件电子政务 网站建设
  • jsp网站开发步骤Wordpress分类页插件
  • 德化网站建设黄页网站推广公司
  • 石家庄网站改版怎么做能收费的视频网站
  • 如何新建一个网站网业游戏大全
  • 加速网站的加速器河北建设厅网站打不开是什么原因
  • linux网站建设技术指南 pdf多网合一网站平台建设
  • 淄博优化网站排名网站的技术方案
  • 上海网站建设百家号模板免费的ppt软件
  • 长治市城乡建设局网站wordpress 主题 名站
  • 赤峰网站开发怎么做坑人网站
  • 商城网站建设方案 2017网站备案 网站建设方案书
  • 怎么免费搭建自己的网站wordpress 文章 版权
  • 好看的商城网站企业建设网站哪里好
  • wordpress换主题后seo一键优化
  • 天津做网站建设mssql网站开发
  • 银行门户网站是什么意思中国搜索引擎有哪些