python数据结构之搜索讲解

yizhihongxing

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日

相关文章

  • 基于Python代码实现Apriori 关联规则算法

    基于Python代码实现Apriori关联规则算法 本文将讲解如何使用Python语言实现Apriori关联规则算法。关联规则算法是数据挖掘中的一种常见应用,它用于寻找数据中的关联性,从而找到数据中的潜在关系和规律。Apriori 算法是一种经典的关联规则算法,本文将详细介绍其实现过程。 安装相关库 在开始实现 Apriori 算法之前,需要安装一些 Pyt…

    python 2023年6月5日
    00
  • Python3.5面向对象编程图文与实例详解

    下面我来为您详细讲解“Python3.5面向对象编程图文与实例详解”的完整攻略。 什么是面向对象编程 面向对象编程(Object Oriented Programming,简称 OOP)是一种程序设计思想,它将程序中的实体(称为对象)视为相互作用的个体,通过定义类和对象来实现对实体的描述和处理。在 Python 中,对象可以是一些数据,也可以是一些方法,而类…

    python 2023年5月30日
    00
  • python搜索包的路径的实现方法

    Python在导入包或模块时,会按照一定的顺序在指定路径下查找相应的文件。这个路径是由一系列的目录组成,形成了Python包搜索路径。下面是实现这个过程的一些攻略。 系统默认的搜索路径 首先,Python会默认添加一些路径作为Python包搜索路径,这些路径定义在PYTHONPATH环境变量和Python源码的lib/pythonX.Y/下的sysconfi…

    python 2023年6月3日
    00
  • 编程语言Python的发展史

    编程语言Python的发展史 Python是一门高级编程语言,由Guido van Rossum在1989年末和1990年初设计出来。Python的设计目标是”易读性”,使得Python成为一门简洁、易于学习的语言。 发展历程 Python 1.0 Python 1.0于1994年发布,是Python第一个正式版本。这个版本包括了模块化编程、函数和异常处理等…

    python 2023年5月30日
    00
  • 详解Python HTTP 请求响应模型

    Python HTTP 请求响应模型是基于客户端和服务端间交互的HTTP协议的一种实现方式。请求响应模型的基本流程是:客户端向服务端发起HTTP请求,服务端接收到请求后进行处理并返回HTTP响应,客户端收到HTTP响应后进行处理。 Python中对于HTTP请求响应的操作,可以通过requests库的使用实现。以下是对Python HTTP 请求响应模型的完…

    python-answer 2023年3月25日
    00
  • Python实现贪心算法的示例

    下面是详细讲解“Python实现贪心算法的示例”的完整攻略,包括算法原理、Python实现和两个示例。 算法原理 贪心算法是一种基于贪心略的优化算法,其基本思想是在每一步选择都采取当前状态下最优的选择,从而希望最终得到局最优解。贪心算法通常适用于满足贪心选择性质和最优子结性质的问题。具体步骤如下: 将问题分解为若干个子; 对每个子问题进行贪心选择,即当前状态…

    python 2023年5月14日
    00
  • Python使用try except处理程序异常的三种常用方法分析

    Python使用try except处理程序异常的三种常用方法分析 在Python的程序开发中,错误是无法避免的。当代码在运行过程中出现异常时,如果不进行处理,整个程序可能会崩溃。因此,我们需要使用try…except语句来捕获和处理程序中的异常。在这篇文章中,我们将讨论Python使用try except处理程序异常的三种常用方法。 方法一:捕获所有异…

    python 2023年5月13日
    00
  • Sublime Text 配置 Python 环境的问题及解决方案

    下面是 Sublime Text 配置 Python 环境的完整攻略,包含以下几个步骤: 1. 安装 Python 首先需要安装 Python,可以去官网 (https://www.python.org/downloads/) 下载安装包。下载完成后,运行安装程序并按照提示完成安装。 2. 设置系统环境变量 安装完成后,需要将 Python 添加到系统环境变…

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