Python实现七大查找算法的示例代码

yizhihongxing

Python实现七大查找算法的示例代码

查找算法是计算机科学中的一个重要问题。本文将介绍Python现七大查找算法的示例代码,包括线性查找、二分查找插值查找、斐波那契查找、树表查找、哈希查找和跳跃表查找。

线性查找

线性查找一种简单的查找算法,适用于小型数据集。该算法从数据集的第一个元素开始,逐个比较每个元素,直到找到标元素或遍历完整个数据。

以下是Python实现线性查找的示例代码:

def linear_search(arr, target):
    for i in range(len(arr)):
        if arr[i] == target:
            return i
    return -1

述代码中,定义了一个linear_search函数,接受一个数组arr和目标元素target作为参数。在循环中,逐个比较数组中的元素,如果找到目标元素,则返回其索。如果遍历完整个数组仍未找到目标元素,则返回-1。

二分查找

二分查找是一种高效的查找算法,适用于有序数据集。该算法将集分成两个部分,每次比较中间元素,如果目标元素小于中间元素,则在左半部分继续查找,否则在右半部分查找,直到找到目标素或无法继续分割。

以下是Python实现二分查找的示例代码:

def binary_search(arr, target):
    left, right 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

上述代码中,定义了一个binary_search函数,接受一个有序arr和标元素target作为参数。在循环中,每次将数组分成两个部分,比较中间元素,如果目标元素小于中间元素,则在左半部分继续查找,否则在右半部分查找,直找到目标元素或无法继续分割。如果遍历完整个数组仍未找到目标元素,则返回-1。

示例说明

以下是两个示例,说明如何使用linear_search和binary_search函数查找目标元素。

示例1

使用linear_search函数查找目标元素5。

arr = [1, 3, 5, 7, 9]
target = 5
result = linear_search(arr, target)
if result != -1:
    print(f"目标元素target}在数组中的索引为{result}")
else:
    print(f"目标元素{target}不在数组中")

输出结果```
目标元素5在数组中的索引为2


### 示例2

使用binary_search查找目标元素7。

```python
arr = [1, 3, 5, 7, 9]
target = 7
result = binary_search(arr, target)
if result != -1:
    print(f"目标元素{target}在数组中的索引为{result}")
else:
    print(f目标元素{target}不在数组中")

输出结果:

目标元素7在数组中的索引为3

插值查找

插值查找是一种高效的查找算法,适用于有序数据集。该算法根据标元在数据集中的位置,估算其可能的位置,从而快速定位目标元素。

以下是Python实现插值查找示例代码:

def interpolation_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right and arr[left] <= target <= arr[right]:
        pos = left + (target - arr[left]) * (right - left) // (arr[right] - arr[left])
        if arr[pos] == target:
            return pos
        elif arr[pos] < target:
            left = pos + 1
        else:
            right = pos - 1
    return -1

上述代码中,定义了一个interpolation_search函数接受一个有序数组arr和目标元素target作为参数。在循环中,根据目标元素在数据集中的位置,估算其可能的位置,从而快速定位目标元素。如果找到目标元素,则返回其索引。如果历完整个数组仍找到目标元素,则返回-1。

斐波那契查找

斐波那契查找是一种高效的查找算法,适用于有序数据集该算法利用斐波那契数列的特性,将数据集分成两个部分,每次比较中间元素,如果目标元素小于中间元素,则在左半部分继续查找,否则在右半部分查找,直到找到目标元素或无法继续分割。

以下是Python实现斐波那契查找示例代码:

def fibonacci_search(arr, target):
    fib1, fib2 = 0, 1
    while fib2 < len(arr):
        fib1, fib2 = fib2, fib1 + fib2
    offset = -1
    while fib2 > :
        i = min(offset + fib1, len(arr) - 1)
        if arr[i] < target:
            fib2, fib1 = fib1, fib2 - fib1
            offset = i
        elif arr[i] > target:
            fib2, fib1 = fib2 - fib1, fib1
        else:
            return i
    if fib1 and arr[offset + 1] == target:
        return offset + 1
    return -1

上代码中,定义了一个fib_search函数,接受一个有序数组arr和目标元素target作为参数。在循环中,利用斐波那契数列的特性,将数据分成两个部分,每次比较中间元素,如果目标元素小于中间素,则在左半部分继续查找,否则在右半部分查找,直到找到目标元素或无法继续分割。如果找到目标元素,则返回其索引。如果遍历完整个数组仍未找到目标元素,则返回-1。

树表查找

树表查找是一种高效的查找算法,适用于有序数据集。算法将数据集构建成一棵二叉查找树,每次比较中间节点,如果标元素小于中间节点,则在左子树继续查找,否则在右子树查找,直到找到目标元素或无继续分割。

以下是Python现树表查找的示例代码:

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def build_tree(arr):
    if not arr:
        return None
    mid = len(arr) // 2
    root = TreeNode(arr[mid])
    root.left = build_tree(arr[:mid])
    root.right = build_tree(arr[mid+1:])
    return root

def tree_search(root, target):
    if not root:
        return -1
    if root.val == target:
        return 0
    elif root.val < target:
        result = tree_search(root.right, target)
        if result == -1:
            return -1
        else:
            return result + 1
    else:
        result = tree_search(root.left, target)
        if result == -1:
            return -1
        else:
            return result + 1

上述代码中,定义了一个TreeNode类表示二叉查找树的节点,包括节点值和左右子树。build_tree函数接受一个有序数组arr为参数,构建一棵二叉查找树。tree_search函数接受一个二叉找树的根节点root和目标元素target作为参数,递归比较中间节点,如果目标元素小于中间节点,则在左子树继续查找,否则在右子树查找,直到找到目标元素或法继续分割。如果找到目标元素,则返回其深度。如果遍历完整个树仍未找到目标元素,则返回-1。

哈希查找

哈希查找是一种效的查找算法,适用于大型数据集。该算法将数据集映射到哈希表中,每次查找时,根据目标元素的哈希值,快速定位其可能的位置,从而快速定位目标元素。

以下是Python实现哈希查找的示例代码:

class HashTable:
    def __init__(self):
        self.size = 10
        self.table = [[] for _ in range(self.size)]

    def hash_func(self, key):
        return key % self.size

    def insert(self, key, value):
        hash_key = self.hash_func(key)
        for i, item in enumerate(self.table[hash_key]):
            if item[0] == key:
                self.table[hash_key][i] = (key, value)
                return
        self.table[hash_key].append((key, value))

    def search(self, key):
        hash_key = self.hash_func(key)
        for item in self.table[hash_key]:
            if item[0] == key:
                return item[1]
        return None

上述代码中,定义了一个HashTable类表示哈希表,包括哈希表大小和哈希表数组。hash_func函数接受一个键值key作为参数,返回其哈希值。insert函数接受一个键值key和值value作为参数,将其插入哈希表中。search函数接受一个键值key作参数,根据其哈希值快速定位其可能的位置,从而快速定位目标元素。如果找到目标元,则返回值。如果遍历完整个哈希表仍未找到目标元素,则返回None。

跳跃表查找

跳跃表查找是一种高效的查找算法,适用于大型数据集。算法将数据集构建成一种特殊的链表,每个节点包含多个指针,可以快速跳过一些节点,从而快速定位目标元素。

以下是Python实现跳跃表查找的示例代码:

import random

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None
        self.down = None

class SkipList:
    def __init__(self):
        self.head = Node(-1)
        self.levels = 1

    def insert(self, val):
        level = 1
        while random.random() < 0.5:
            level += 1
        if level > self.levels:
            self.head.next = Node(val)
            for i in range(self.levels, level):
                node = Node(-1)
                node.down = self.head.next
                self.head.next = node
            self.levels = level
        node = self.head.next
        prev = self.head
        for i in range(self.levels - 1, -1, -1):
            while node and node.val < val:
                prev, node = node, node.next
            if i < level:
                new_node = Node(val)
                new_node.next = node
                prev.next = new_node
                new_node.down = down_node
                down_node = new_node
            prev, node = prev.down, node.down

    def search(self, val):
        node = self.head.next
        for i in range(self.levels - 1, -1, -1):
            while node and node.val < val:
                node = node.next
            if node and node.val == val:
                return True
            node = node.down
        return False

上述代码中,定义了一个Node类表示跳跃表的节点,包括节点值、下一个节点和下一层节点。SkipList类表示跳跃表包括头节点和层数。insert函数接受一个值val作为参数,将其插入跳跃表中。search函数接受一个值val作为参数,快速定位目标元素。如果找到目元素,则返回True。如果遍历完整个跳跃表仍未找到目标元素,则False。

总结

本文介绍了Python实现七大查找算法的示例代码,包括线性查找、二分查找、值查找、斐波那契查找、树表查找、哈希查找和跳跃表查找不同的查找算法适用于不同的数据集和场景,需要根据实际情况选择合适的算法。在实际应中,需要注意算法的时间复杂度和空间复杂度,以获得更好的性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现七大查找算法的示例代码 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python 时间处理datetime实例

    Python 中的 datetime 模块提供了用于处理日期和时间的类,其中最重要的类是 datetime 类。datetime 类的实例可以在计算和比较日期和时间时使用。在本文中,我们将介绍如何在 Python 中使用 datetime 类进行时间处理。 获取当前时间 datetime 模块提供了 datetime 类,它可以用于表示一个特定的日期和时间。…

    python 2023年6月2日
    00
  • python读取配置文件方式(ini、yaml、xml)

    Python可以通过解析不同类型的配置文件(如ini、yaml、xml)来读取配置信息,下面我将详细讲解三种配置文件读取方式的完整攻略。 1. INI配置文件 INI是一种Windows操作系统常见的文件格式,它是一种键值对(key-value)格式的配置文件,使用.ini作为文件后缀。在Python中通常使用configparser模块来读取INI格式的配…

    python 2023年6月3日
    00
  • python中urlparse模块介绍与使用示例

    当需要解析和处理URL的时候,Python提供了一个强大的内置库叫做urlparse。在本篇攻略中,我将会为大家介绍这个模块的基本使用方法,并且提供两个实用的使用示例,以帮助大家更好地理解它的用法和应用场景。 urlparse模块介绍 urlparse模块是Python标准库中的一个解析URL的工具,它可以解析URL链接,将其拆分成各个组件部分,使得程序可以…

    python 2023年6月3日
    00
  • 用python写一个定时提醒程序的实现代码

    下面我就来为您详细讲解如何用Python写一个定时提醒程序的实现代码。 1. 确定提醒方式 首先,我们需要确定提醒的方式。一般来说,有两种常用的提醒方式,一种是弹窗提示,一种是使用语音播报提醒。 弹窗提示:将提示信息以弹窗的形式展现在屏幕上,需要使用Python的GUI界面库来实现。常用的GUI库有Tkinter、PyQt、wxPython等。其中,Tkin…

    python 2023年5月19日
    00
  • 多线程python的实现及多线程有序性

    多线程Python的实现 在Python中,实现多线程功能有多种方式。我们可以使用Thread类或者使用concurrent.futures模块中的ThreadPoolExecutor类,这里将分别介绍这两种方式。 使用Thread类实现多线程 使用Thread类实现多线程的方式非常简单。下面是一个简单的例子: import threading import…

    python 2023年5月18日
    00
  • 浅谈Python如何获取excel数据

    下面我就为您讲解如何使用Python获取Excel数据。 第一步:安装相关库 在使用Python获取Excel数据之前,我们需要安装相关的库。常用的库有: openpyxl:用于读写Excel文件; pandas:用于数据处理。 在安装之前,我们需要先打开cmd或者Anaconda Prompt,然后运行以下代码安装这两个库: pip install ope…

    python 2023年5月13日
    00
  • Python求正态分布曲线下面积实例

    Python求正态分布曲线下面积实例 本文将详细讲解如何使用Python求解正态分布曲线下面积。首先,我们需要了解一些基本概念和公式。 正态分布 正态分布,又称为高斯分布,是统计学中最为常用的一种分布,它的分布密度函数如下: $$ f(x) = \frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^…

    python 2023年6月3日
    00
  • python采集百度搜索结果带有特定URL的链接代码实例

    Python采集百度搜索结果带有特定URL的链接是一个非常有用的应用场景,可以帮助用户快速获取与特定URL相关的搜索结果。本攻略将介绍Python采集百度搜索结果带有特定URL的链接的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取百度搜索结果的示例: import…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部