广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python查找算法之分块查找算法的实现
  • 269
分享到

Python查找算法之分块查找算法的实现

2024-04-02 19:04:59 269人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、分块查找算法 分块查找是二分法查找和顺序查找的改进方法,分块查找要求索引表是有序的,对块内结点没有排序要求,块内结点可以是有序的也可以是无序的。 分块查找就是把一个大的线性表分解

一、分块查找算法

分块查找是二分法查找和顺序查找的改进方法,分块查找要求索引表是有序的,对块内结点没有排序要求,块内结点可以是有序的也可以是无序的。

分块查找就是把一个大的线性表分解成若干块,每块中的节点可以任意存放,但块与块之间必须排序。与此同时,还要建立一个索引表,把每块中的最大值作为索引表的索引值,此索引表需要按块的顺序存放到一个辅助数组中。查找时,首先在索引表中进行查找,确定要找的结点所在的块。由于索引表是排序的,因此,对索引表的查找可以采用顺序查找或二分查找;然后,在相应的块中采用顺序查找,即可找到对应的结点。

例如,有这样一列数据:23、43、56、78、97、100、120、135、147、150。如下图所示:

在这里插入图片描述

想要查找的数据是 150,使用分块查找法步骤如下:

步骤1:将上图所示的数据进行分块,按照每块长度为 4 进行分块,分块情况如下图所示:

在这里插入图片描述

说明:每块的长度是任意指定的,博主在这里用的长度为4,读者可以根据自己的需要指定每块长度。

步骤2:选取各块中的最大关键字构成一个索引表,即选取上图所示的各块的最大值,第一块最大的值是 78,第二块最大的值是 135,第三块最大值是 155,形成的索引表如下图所示:

在这里插入图片描述

步骤3:用顺序查找或者二分查找判断想要查找数据 150 在上图所示的索引表中的哪块内容中,这里博主用的是二分查找法,即先取中间值 135 与 150 比较,如下图所示:

在这里插入图片描述

步骤4:结果是中间位置的数据 135 比目标数据 150 小,因此目标数据在 135 的下一块内。将数据定位在第 3 块内,此时将第 3 块内的数据取出,进行顺序比较,如下图所示:

在这里插入图片描述

步骤5:通过顺序查找第 3 块的内容,终于在第 9 个位置找到目标数,此时分块查找结束。

总结:至此,分块查找算法已经讲解完毕。通过和二分查找法和顺序查找法对比来看,分块查找的速度虽然不如二分查找算法,但比顺序查找算法快得多。当数据很多且块数很大时,对索引表可以采用二分查找,这样能够进一步提高查找的速度。

二、实例:实现分块查找算法

具体代码如下:


def search(data, key):  # 用二分查找 想要查找的数据在哪块内
    length = len(data)  # 数据列表长度
    first = 0  # 第一位数位置
    last = length - 1  # 最后一个数据位置
    print(f"长度:{length} 分块的数据是:{data}")  # 输出分块情况
    while first <= last:
        mid = (last + first) // 2  # 取中间位置
        if data[mid] > key:  # 中间数据大于想要查的数据
            last = mid - 1  # 将last的位置移到中间位置的前一位
        elif data[mid] < key:  # 中间数据小于想要查的数据
            first = mid + 1  # 将first的位置移到中间位置的后一位
        else:
            return mid  # 返回中间位置
    return False


# 分块查找
def block(data, count, key):  # 分块查找数据,data是列表,count是每块的长度,key是想要查找的数据
    length = len(data)  # 表示数据列表的长度
    block_length = length // count  # 一共分的几块
    if count * block_length != length:  # 每块长度乘以分块总数不等于数据总长度
        block_length += 1  # 块数加1
    print("一共分", block_length, "块")  # 块的多少
    print("分块情况如下:")
    for block_i in range(block_length):  # 遍历每块数据
        block_data = []  # 每块数据初始化
        for i in range(count):  # 遍历每块数据的位置
            if block_i * count + i >= length:  # 每块长度要与数据长度比较,一旦大于数据长度
                break  # 就退出循环
            block_data.append(data[block_i * count + i])  # 每块长度要累加上一块的长度
        result = search(block_data, key)  # 调用二分查找的值
        if result != False:  # 查找的结果不为False
            return block_i * count + result  # 就返回块中的索引位置
    return False


data = [23, 43, 56, 78, 97, 100, 120, 135, 147, 150, 155]  # 数据列表
result = block(data, 4, 150)  # 第二个参数是块的长度,最后一个参数是要查找的元素
print("查找的值得索引位置是:", result)  # 输出结果

运行结果如下图所示:

在这里插入图片描述

从上面的运行结果看到,当查找 150 时,查找结果完全符合上述描述的步骤。

到此这篇关于python查找算法之分块查找算法的实现的文章就介绍到这了,更多相关Python 分块查找算法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python查找算法之分块查找算法的实现

本文链接: https://www.lsjlt.com/news/123117.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python查找算法之分块查找算法的实现
    一、分块查找算法 分块查找是二分法查找和顺序查找的改进方法,分块查找要求索引表是有序的,对块内结点没有排序要求,块内结点可以是有序的也可以是无序的。 分块查找就是把一个大的线性表分解...
    99+
    2022-11-12
  • Python查找算法之插补查找算法的实现
    一、插补查找算法 插补查找算法又称为插值查找,它是折半查找算法的改进版。插补查找是按照数据的分布,利用公式预测键值所在的位置,快速缩小键值所在序列的范围,慢慢逼近,直到查找到数据为止...
    99+
    2022-11-12
  • Python查找算法之折半查找算法的实现
    一、折半查找算法 折半查找算法又称为二分查找算法,折半查找算法是将数据分割成两等份,首先用键值(要查找的数据)与中间值进行比较。如果键值小于中间值,可确定要查找的键值在前半段;如果键...
    99+
    2022-11-12
  • Python算法练习之二分查找算法的实现
    目录1. 算法描述2. 算法分析3. 算法思路4. 代码实现纯算法实现递归法实现1. 算法描述 二分法是一种效率比较高的搜索方法 回忆之前做过的猜数字的小游戏,预先给定一个小于100...
    99+
    2022-11-11
  • 【Python查找算法】二分查找、线性查找、哈希查找
    目录 1 二分查找算法  2 线性查找算法 3 哈希查找算法 1 二分查找算法         二分查找(Binary Search)是一种用于在有序数据集合中查找特定元素的高效算法。它的工作原理基于将数据集合分成两半,然后逐步缩小搜...
    99+
    2023-10-10
    算法 python
  • 详解Go语言实现线性查找算法和二分查找算法
    目录线性查找算法二分查找算法小结线性查找 线性查找又称顺序查找,它是查找算法中最简单的一种。它的基本思想是在在一组数据中,从第一个元素开始,依次和预期值比较,直到和预期值相等,则查找...
    99+
    2022-12-20
    Go线性查找算法 Go二分查找算法 Go查找算法
  • Python查找算法如何实现
    本文小编为大家详细介绍“Python查找算法如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python查找算法如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。查找算法是用来检索序列数据(群体)中是...
    99+
    2023-06-30
  • python二分查找算法的递归实现方法
    本文实例讲述了python二分查找算法的递归实现方法。分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = ...
    99+
    2022-06-04
    递归 算法 方法
  • Python详细解析之二分查找算法
    本篇文章给大家带来了关于python的相关知识,其中主要整理了二分查找算法的相关问题,包括了算法描述、算法分析、算法思路等等内容,下面一起来看一下,希望对大家有帮助。二分法是一种效率比较高的搜索方法回忆之前做过的猜数字的小游戏,预先给定一个...
    99+
    2022-06-28
    python
  • C#二分查找算法
    1、定义: 折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。 要计算把目标值插入到该数组中的索引值。最开始的思路: ①.先把目标数插入到数组中 ②...
    99+
    2022-11-13
  • java算法之二分查找法的实例详解
    java算法之二分查找法的实例详解原理假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1。通过数组长度可取出中间位置元素的索引,将其值与目标值比较,如果中间位置元素值大于目标值,则...
    99+
    2023-05-31
    java 算法 二分查找法
  • 详解Python查找算法的实现(线性,二分,分块,插值)
    目录1. 线性查找2. 二分查找3. 插值查找4. 分块查找5. 总结查找算法是用来检索序列数据(群体)中是否存在给定的数据(关键字),常用查找算法有: 线性查找:线性查找也称为顺序...
    99+
    2022-11-10
  • Java实现查找算法的示例代码(二分查找、插值查找、斐波那契查找)
    目录1.查找概述2.顺序查找3.二分查找3.1 二分查找概述3.2 二分查找实现4.插值查找4.1 插值查找概述4.2 插值查找实现5.斐波那契查找5.1 斐波那契查找概述5.2 斐...
    99+
    2022-11-13
  • C语言算法--有序查找(折半查找/二分查找)
    目录题目解法一: 挨个遍历方法二:折半查找/二分查找(仅适用于有序查找)总结题目 首先我们来把题目瞅一眼: 在一个有序数组中查找具体的某个数字n。 编写int binary_sea...
    99+
    2022-11-12
  • Python 语言实现六大查找算法
    目录一、顺序查找算法二、折半查找算法三、插补查找算法四、哈希查找算法五、分块查找算法六、斐波那契查找算法七、六种查找算法的时间复杂度一、顺序查找算法 顺序查找又称为线性查找,是最简单...
    99+
    2022-11-12
  • 如何使用PHP实现顺序查找和二分查找算法
    这篇文章主要介绍了如何使用PHP实现顺序查找和二分查找算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用PHP描述顺序查找和二分查找(也...
    99+
    2022-10-19
  • 快速查找与二分查找算法如何在Java中实现
    这期内容当中小编将会给大家带来有关快速查找与二分查找算法如何在Java中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 快速查找:这个是相当简单的,以数组举例,就用一个for循环去查找数组中需要查...
    99+
    2023-05-31
    java 快速查找 二分查找
  • php如何实现查找算法
    小编给大家分享一下php如何实现查找算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支...
    99+
    2023-06-14
  • 用C语言实现二分查找算法
    目录一.前言二.二分查找法1.什么是二分查找法2.如何用c语言来实现二分查找法三.总结总结一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,...
    99+
    2022-11-12
  • Python二分查找算法怎么应用
    本篇内容主要讲解“Python二分查找算法怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python二分查找算法怎么应用”吧!1. 算法描述二分法是一种效率比较高的搜索方法回忆之前做过的...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作