- 数据结构与算法
- DSA - 首页
- DSA - 概述
- DSA - 环境设置
- DSA - 算法基础
- DSA - 渐近分析
- 数据结构
- DSA - 数据结构基础
- DSA - 数据结构和类型
- DSA - 数组数据结构
- 链表
- DSA - 链表数据结构
- DSA - 双向链表数据结构
- DSA - 循环链表数据结构
- 栈与队列
- DSA - 栈数据结构
- DSA - 表达式解析
- DSA - 队列数据结构
- 搜索算法
- DSA - 搜索算法
- DSA - 线性搜索算法
- DSA - 二分搜索算法
- DSA - 插值搜索
- DSA - 跳跃搜索算法
- DSA - 指数搜索
- DSA - 斐波那契搜索
- DSA - 子列表搜索
- DSA - 哈希表
- 排序算法
- DSA - 排序算法
- DSA - 冒泡排序算法
- DSA - 插入排序算法
- DSA - 选择排序算法
- DSA - 归并排序算法
- DSA - 希尔排序算法
- DSA - 堆排序
- DSA - 桶排序算法
- DSA - 计数排序算法
- DSA - 基数排序算法
- DSA - 快速排序算法
- 图数据结构
- DSA - 图数据结构
- DSA - 深度优先遍历
- DSA - 广度优先遍历
- DSA - 生成树
- 树数据结构
- DSA - 树数据结构
- DSA - 树遍历
- DSA - 二叉搜索树
- DSA - AVL树
- DSA - 红黑树
- DSA - B树
- DSA - B+树
- DSA - 伸展树
- DSA - Trie树
- DSA - 堆数据结构
- 递归
- DSA - 递归算法
- DSA - 使用递归实现汉诺塔
- DSA - 使用递归实现斐波那契数列
- 分治法
- DSA - 分治法
- DSA - 最大最小问题
- DSA - Strassen矩阵乘法
- DSA - Karatsuba算法
- 贪心算法
- DSA - 贪心算法
- DSA - 旅行商问题(贪心算法)
- DSA - Prim最小生成树
- DSA - Kruskal最小生成树
- DSA - Dijkstra最短路径算法
- DSA - 地图着色算法
- DSA - 分数背包问题
- DSA - 带截止时间的作业排序
- DSA - 最优合并模式算法
- 动态规划
- DSA - 动态规划
- DSA - 矩阵链乘法
- DSA - Floyd-Warshall算法
- DSA - 0-1背包问题
- DSA - 最长公共子序列算法
- DSA - 旅行商问题(动态规划)
- 近似算法
- DSA - 近似算法
- DSA - 顶点覆盖算法
- DSA - 集合覆盖问题
- DSA - 旅行商问题(近似算法)
- 随机算法
- DSA - 随机算法
- DSA - 随机快速排序算法
- DSA - Karger最小割算法
- DSA - Fisher-Yates洗牌算法
- DSA有用资源
- DSA - 问答
- DSA - 快速指南
- DSA - 有用资源
- DSA - 讨论
数据结构 - 搜索算法
在上一节中,我们讨论了各种排序技术以及它们可以使用的场景。然而,排序背后的主要思想是将数据以有序的方式排列,从而更容易在已排序的数据中搜索任何元素。
搜索是在大量数据中查找特定记录(可以是单个元素或一小块数据)的过程。数据可以有多种形式:数组、链表、树、堆和图等。随着当今数据量的不断增加,有多种技术可以执行搜索操作。
数据结构中的搜索算法
可以将各种搜索技术应用于数据结构以检索特定数据。只有当搜索操作返回所需的元素或数据时,才认为搜索操作成功;否则,搜索方法不成功。
这些搜索技术分为两类:
顺序搜索
区间搜索
顺序搜索
顾名思义,顺序搜索操作会顺序遍历每个数据元素以查找所需数据。此类型的搜索不需要数据以排序方式排列。
示例 - 线性搜索
图1:线性搜索操作
区间搜索
与顺序搜索不同,区间搜索操作要求数据以排序方式排列。此方法通常以区间方式搜索数据;可以通过将数据分成多个子部分或跳过索引来搜索元素。
示例 - 二分搜索、跳跃搜索等。
图2:二分搜索操作
评估搜索算法
通常,并非所有搜索技术都适用于所有类型的数据结构。在某些情况下,顺序搜索更可取,而在其他情况下,区间搜索更可取。这些搜索技术的评估是通过检查每种搜索方法在特定输入上的运行时间来完成的。
这就是渐近符号出现的地方。要了解有关渐近符号的更多信息,请点击此处。
简单来说,程序运行的 时间复杂度 有三种不同的情况:
最佳情况
平均情况
最坏情况
我们主要关注最佳情况和最坏情况的时间复杂度,因为平均情况难以计算。并且由于运行时间基于提供给程序的输入量,因此最坏情况时间复杂度最能描述任何算法的性能。
例如,线性搜索的最佳情况时间复杂度为O(1),其中在第一次迭代中找到所需元素;而最坏情况时间复杂度为O(n),当程序遍历所有元素但仍然找不到元素时。这被标记为不成功的搜索。因此,线性搜索的实际时间复杂度被视为O(n),其中n是输入数据结构中存在的元素数量。
许多类型的搜索方法用于在各种数据结构中搜索数据条目。其中一些包括:
我们将在接下来的章节中详细介绍每种搜索方法。