python数据结构之搜索讲解

Python数据结构之搜索讲解

搜索的定义

搜索是在数据集合中查找特定目标的过程。在计算机科学中,最常见的搜索是在数据结构中查找某个特定值的过程。常见的搜索算法包括线性搜索、二分搜索、深度优先搜索和广度优先搜索等。下面我们将详细讲解这些搜索算法的具体实现。

线性搜索

线性搜索是最基本的搜索算法,在一个数据集合中按顺序逐个查找目标值。可以通过以下 Python 代码实现线性搜索:

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

其中 target 是要查找的目标值,lst 是数据集合。在上述代码中,我们使用了 for 循环遍历 lst,在每次循环中判断当前元素是否等于 target,如果等于则返回当前下标。如果最终没有找到目标值,则返回 -1,表示搜索失败。

二分搜索

二分搜索又称折半搜索,是一种利用数据集合有序这一特点进行优化的搜索算法。它的基本思想是将数据集合分成两部分,每次查找先判断目标值与中间值的大小关系,从而确定下一次查找的数据集合。可以通过以下 Python 代码实现二分搜索:

def binary_search(target, lst):
    low, high = 0, len(lst) - 1
    while low <= high:
        mid = (low + high) // 2
        if lst[mid] < target:
            low = mid + 1
        elif lst[mid] > target:
            high = mid - 1
        else:
            return mid
     return -1

其中 target 是要查找的目标值,lst 是有序数据集合。在上述代码中,我们首先将要查找的数据集合的范围初始化为整个 lst。然后在 while 循环中,每次查找都将数据集合分成两部分。如果中间值小于目标值,则说明目标值应该在右半部分,更新数据集合范围为右半部分。如果中间值大于目标值,则说明目标值应该在左半部分,更新数据集合范围为左半部分。如果中间值等于目标值,则说明已经找到目标值,返回中间值下标。如果最终没有找到目标值,则返回 -1,表示搜索失败。

深度优先搜索

深度优先搜索是一种利用栈实现的搜索算法,它的基本思想是先访问顶点,然后依次访问与它相邻的未被访问过的顶点,直至搜索到目标值或者无法继续搜索为止。可以通过以下 Python 代码实现深度优先搜索:

def dfs(graph, start, target):
    stack = [start]
    visited = set()
    while stack:
        node = stack.pop()
        if node in visited:
            continue
        visited.add(node)
        if node == target:
            return True
        stack.extend(graph[node] - visited)
    return False

其中 graph 是表示图的字典,start 是搜索的起始顶点,target 是要查找的目标值。在上述代码中,我们使用栈来实现深度优先搜索,将起始顶点加入栈中。对于每个出栈的顶点,我们首先判断该顶点是否已经被访问过。如果已经被访问过,则继续出栈下一个顶点;如果未被访问过,则将该顶点标记为已访问。如果该顶点等于目标值,则搜索成功,返回 True。否则,将该顶点的未访问邻居加入栈中,继续搜索下一个顶点。如果最终没有找到目标值,则返回 False,表示搜索失败。

广度优先搜索

广度优先搜索是一种利用队列实现的搜索算法,它的基本思想是先访问距离起始顶点最近的顶点,然后依次访问距离起始顶点更远的顶点,直至搜索到目标值或者无法继续搜索为止。可以通过以下 Python 代码实现广度优先搜索:

def bfs(graph, start, target):
    queue = [start]
    visited = set()
    while queue:
        node = queue.pop(0)
        if node in visited:
            continue
        visited.add(node)
        if node == target:
            return True
        queue.extend(graph[node] - visited)
    return False

其中 graph 是表示图的字典,start 是搜索的起始顶点,target 是要查找的目标值。在上述代码中,我们使用队列来实现广度优先搜索,将起始顶点加入队列中。对于每个出队列的顶点,我们首先判断该顶点是否已经被访问过。如果已经被访问过,则继续出队列下一个顶点;如果未被访问过,则将该顶点标记为已访问。如果该顶点等于目标值,则搜索成功,返回 True。否则,将该顶点的未访问邻居加入队列中,继续搜索下一个顶点。如果最终没有找到目标值,则返回 False,表示搜索失败。

示例说明

示例一

假设我们要在一个无序数组中查找目标值 8,可以使用线性搜索算法,其中 lst=[1, 3, 5, 8, 2, 4, 7, 9],代码如下:

print(linear_search(8, [1, 3, 5, 8, 2, 4, 7, 9]))

这段代码将返回 3,表示在给定的数组中找到了目标值 8,并且它的下标为 3

示例二

假设我们要在一个有序数组中查找目标值 6,可以使用二分搜索算法,其中 lst=[1, 2, 3, 4, 5, 6, 7, 8, 9],代码如下:

print(binary_search(6, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

这段代码将返回 5,表示在给定的有序数组中找到了目标值 6,并且它的下标为 5

以上便是 Python 数据结构之搜索讲解的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据结构之搜索讲解 - Python技术站

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

相关文章

  • opencv实现图片模糊和锐化操作

    这里是详细讲解“opencv实现图片模糊和锐化操作”的完整攻略。 前言 OpenCV是一个开源的计算机视觉库,拥有强大的图像处理能力。本文将介绍如何使用OpenCV对图像进行模糊和锐化操作。 环境准备 在开始操作之前,我们需要先准备好以下环境: Python的安装环境 OpenCV Python库的安装 安装OpenCV库可以通过以下命令实现: pip in…

    python 2023年5月18日
    00
  • 详解Python 单子的其他特性

    下面给出Python中单例模式的完整攻略。 什么是单例模式 单例是一种创建型设计模式,用于确保一个类只有一个对象。这个类提供了这个唯一的对象的访问点,以便任何用户都可以方便地访问这个实例。 Python单例模式的实现 Python的单例模式可以通过各种方式来实现,下面介绍其中两种: 方式一:使用装饰器实现 通过装饰器的方式实现单例模式,代码如下: def s…

    python-answer 2023年3月25日
    00
  • python获取标准北京时间的方法

    获取标准北京时间可以使用Python内置的datetime模块,该模块提供了各种日期和时间的处理函数,包括获取当前时间的函数。 步骤 以下是获取标准北京时间的步骤: 1.导入datetime模块 import datetime 2.获取当前时间 now = datetime.datetime.now() 3.转换为标准北京时间 bj_time = now +…

    python 2023年6月3日
    00
  • Python实现爬取知乎神回复简单爬虫代码分享

    本攻略将介绍如何使用Python实现爬取知乎神回复的简单爬虫代码。我们将使用requests库和BeautifulSoup库获取网页内容,并使用正则表达式提取神回复的内容。我们将提供两个示例代码,分别用于获取单个问题的神回复和获取多个问题的神回复。 安装所需库 在开始前,我们需要安装requests、BeautifulSoup和re库。我们可以使用以下命令在…

    python 2023年5月15日
    00
  • pip报错“ImportError: cannot import name ‘main’ from ‘pip._internal.cli.cmdoptions’ (/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py)”怎么处理?

    原因 “ImportError: cannot import name ‘main’ from ‘pip._internal.cli.cmdoptions’ (/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py)” 错误通常是以下原因引起的: pip 版本不兼容:如果您的 pip 版本…

    python 2023年5月4日
    00
  • 使用PyCharm安装pytest及requests的问题

    使用PyCharm安装pytest及requests主要包含以下步骤: 步骤一:打开PyCharm 首先打开PyCharm,确保系统安装好了Python环境。 步骤二:创建Python项目 在PyCharm中点击”Create New Project”,选择Python并设置项目名称和路径,然后点击”Create”。 步骤三:安装pytest和request…

    python 2023年5月13日
    00
  • Python集成学习之Blending算法详解

    以下是关于“Python集成学习之Blending算法详解”的完整攻略: 简介 Blending算法是一种集成学习方法,它将多个基模型的预测结果进行加权平均,得到最终的预测结果。在本教程中,我们将介绍Blending算法的原理和实现方法,包括数据集划分、基模型训练、Blending模型训练等。 数据集划分 Blending算法需要将原始数据集划分为训练集和测…

    python 2023年5月14日
    00
  • Python爬虫beautifulsoup4常用的解析方法总结

    Python爬虫BeautifulSoup4常用的解析方法总结 BeautifulSoup4是一个Python库,用于解析HTML和XML文档,并提供了一些方便的方法来获取和操作文档中的元素。在Python爬虫中,BeautifulSoup4是常用的工具之一。本文将总结BeautifulSoup4常用的解析方法。 解析HTML文档 以下是一个示例代码,演示如…

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