Python实现常用查找数据结构及算法详解

5星 · 超过95%的资源 3 下载量 39 浏览量 更新于2024-08-30 1 收藏 1.69MB PDF 举报
查找数据结构及算法(Python实现) 一、基本概念 查找(Searching)是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。关键字(Key)是数据元素中某个数据项的值,又称为键值。主键(Primary Key)是可唯一地标识某个数据元素或记录的关键字。 查找表按照操作方式可分为静态查找表(Static Search Table)和动态查找表(Dynamic Search Table)。静态查找表只做查找操作,主要操作是查询某个“特定的”数据元素是否在表中和检索某个“特定的”数据元素和各种属性。动态查找表在查找中同时进行插入或删除等操作。 二、无序表查找 无序表查找是数据不排序的线性查找,遍历数据元素。算法分析:最好情况是在第一个位置就找到了,此为O(1);最坏情况在最后一个位置才找到,此为O(n);所以平均查找次数为(n+1)/2。最终时间复杂度为O(n)。Python实现代码如下: ``` def sequential_search(lis, key): length = len(lis) for i in range(length): if lis[i] == key: return i else: return False ``` 三、有序表查找 查找表中的数据必须按某个主键进行某种排序!二分查找(Binary Search)是查找表中的算法核心,在查找表中不断取中间元素与查找值进行比较,以二分之一的倍率进行表范围的缩小。时间复杂度为O(log(n))。Python实现代码如下: ``` def binary_search(lis, key): low = 0 high = len(lis) - 1 time = 0 while low < high: time += 1 mid = int((low + high) / 2) if key < lis[mid]: high = mid - 1 elif key > lis[mid]: low = mid + 1 else: # 打印折半的次数 print("折半次数:", time) return mid ``` 四、散列查找 散列查找(Hash Search)是根据关键字的散列值来确定记录的存储位置的查找方法。散列函数将关键字转换为数组的索引,然后根据索引值来访问记录。时间复杂度为O(1)。Python实现代码如下: ``` def hash_search(lis, key): hash_value = hash(key) % len(lis) if lis[hash_value] == key: return hash_value else: return False ``` 五、其他查找算法 还有许多其他的查找算法,如二叉排序树(Binary Sort Tree)、 AVL树(AVL Tree)、红黑树(Red-Black Tree)等。这些算法都有其优缺점,选择哪种算法取决于实际情况。 查找算法有很多种,每种算法都有其优缺点。选择合适的查找算法是非常重要的。Python提供了许多查找算法的实现,开发者可以根据实际情况选择合适的算法来提高查找效率。
2021-08-20 上传
数据结构与算法(Python) 一、引入概念 1-01算法引入 1-02 时间复杂度与大O表示法 1-03-最坏时间复杂度与计算规则 1-04-常见时间复杂度与大小关系 1-05-代码执行时间测量模块 1-06-Python列表类型不同操作的时间效率 1-07-Python列表与字典操作的时间复杂度 1-08-数据结构引入 二、顺序表 2-01 内存、类型本质、连续存储 recv 2-02 基本顺序表与元素外围顺序表 recv 2-03 顺序表的一体式结构与分离式结构 recv 2-04 顺序表数据区替换与扩充 recv 三、栈 3-01 栈与队列的概念 3-02 栈的实现 3-03 队列与双端队列的实现 四、链表 4-01 链表的提出 4-02 单链表的ADT模型 4-03 Python中变量标识的本质 4-04 单链表及结点的定义代码 4-05 单链表的判空、长度、遍历与尾部添加结点的代码实现 4-06 单链表尾部添加和在指定位置添加 4-07 单链表查找和删除元素 4-08 单链表与顺序表的对比 4-09 单向循环链表遍历和求长度 4-10 单向循环链表添加元素 4-11 单向循环链表删除元素 4-12 单向循环链表删除元素复习及链表扩展 4-13 双向链表及添加元素 4-14 双向链表删除元素 五、排序与搜索 5-01 排序算法的稳定性 5-02 冒泡排序及实现 5-03 选择排序算法及实现 5-04 插入算法 5-05 插入排序 5-06 插入排序2 5-07 希尔排序 5-08 希尔排序实现 5-09 快速排序 5-10 快速排序实现1 (1) 5-10 快速排序实现1 5-11 快速排序实现2 5-12 归并排序 5-13 归并排序 代码执行流程 5-14 归并排序时间复杂度及排序算法复杂度对比 5-15 二分查找 5-16 二分查找时间复杂度 六、树和树的算法 6-01 树的概念 6-02 二叉树的概念 6-03 二叉树的广度优先遍历 6-04 二叉树的实现 6-05 二叉树的先序、中序、后序遍历 6-06 二叉树由遍历确定一棵树 ———————————————— 版权声明:本文为CSDN博主「dwf1354046363」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dwf1354046363/article/details/119832814