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日

相关文章

  • 在 Windows 上的 fabfile 中使用 activate_this.py 激活 python 虚拟环境

    【问题标题】:Activate a python virtual environment using activate_this.py in a fabfile on Windows在 Windows 上的 fabfile 中使用 activate_this.py 激活 python 虚拟环境 【发布时间】:2023-04-04 17:10:02 【问题描述…

    Python开发 2023年4月6日
    00
  • Odoo – 在python中减去2个“时间”字段

    【问题标题】:Odoo – Subtract 2 “time” fields in pythonOdoo – 在python中减去2个“时间”字段 【发布时间】:2023-04-07 00:54:01 【问题描述】: for emp in employee: contract_id = contract_pool.search(cr, uid, [(’emp…

    Python开发 2023年4月7日
    00
  • python机器学习实现神经网络示例解析

    下面我会给你详细讲解“python机器学习实现神经网络示例解析”的完整攻略。该攻略主要分为以下三个部分: 神经网络简介 Python机器学习实现神经网络步骤与示例分析 示例说明 1. 神经网络简介 神经网络是一种由多个节点(或称神经元)组成的信息处理系统。每个神经元都可以接收输入信息、处理信息,并传递给下一个神经元。具有多层结构的神经网络被称作深度神经网络,…

    python 2023年5月19日
    00
  • 使用Python制作一个简易的远控终端

    制作一个简易的远控终端通常包括以下步骤: 步骤一:安装必要的库 创建一个新的Python虚拟环境并安装必要的模块(socket、os、subprocess和json): python -m venv myenv # 创建虚拟环境 source myenv/bin/activate # 激活虚拟环境 pip install socket os subproce…

    python 2023年6月2日
    00
  • python之数字图像处理方式

    Python之数字图像处理方式 概述 数字图像处理是一种运用数学、物理和计算机技术对图像进行处理的科学技术,常见的应用包括图像增强、目标检测、模式识别等,其在电影制作、医学影像、智能监控等领域都有广泛的应用。 Python 作为一种简单易学、功能强大的编程语言,也有着丰富的数字图像处理相关工具及库,如 Pillow、OpenCV、Scikit-image 等…

    python 2023年6月3日
    00
  • python pandas处理excel表格数据的常用方法总结

    我将为你详细介绍“python pandas处理excel表格数据的常用方法总结”的完整实例教程。 标题一:pandas读取excel表格数据 pandas提供的read_excel()函数可以方便地读取excel表格数据。以下是一个读取excel数据的示例: import pandas as pd # 读取excel数据 excel_data = pd.r…

    python 2023年5月13日
    00
  • python中bs4.BeautifulSoup的基本用法

    BeautifulSoup是一个Python库,用于解析HTML和XML文档,并提供了一些方便的方法来获取和操作文档中的元素。本文将详细讲解bs4.BeautifulSoup的基本用法,包括两个示例。 示例一:解析HTML文档 以下是一个示例代码,演示如何使用bs4.BeautifulSoup解析HTML文档: from bs4 import Beautif…

    python 2023年5月15日
    00
  • 简单介绍Python的Tornado框架中的协程异步实现原理

    Python的Tornado框架是一个轻量级的Web框架,采用非阻塞的编程方式实现了高性能的异步处理。在Tornado框架中,最为核心的部分就是协程(Coroutine)异步实现原理,可以帮助我们更加深入了解Tornado框架的底层实现。 什么是协程? 首先,我们需要了解什么是协程。协程是一种用户态线程,不同于操作系统调度线程,协程可自己控制进程中的多个任务…

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