Python数据结构
文章平均质量分 96
番茄大人
月更出奇迹
展开
-
数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)
参考自 MOOC数据结构与算法Python版目录一、广度优先搜索1.1 BFS算法过程1.2 广度优先搜索算法分析二、深度优先搜索2.1 骑士周游2.1.1 问题定义2.1.2 构建骑士周游图2.1.3 构建走棋关系图2.1.4 骑士周游问题算法实现2.1.5 骑士周游问题算法分析与改进2.2 通用的深度优先搜索2.3 通用的深度优先搜索算法分析一、广度优先搜索在单词关系图建立完成以后, 需要继续在图中寻找词梯问题的最短序列,即要用到“广度优先搜索Breadth First Search”算法对单词关原创 2021-01-05 20:09:18 · 583 阅读 · 0 评论 -
数据结构与算法(python):图(Graph)的基本概念及应用
参考自 MOOC数据结构与算法Python版目录一、图Graph的概念1.1 互联网1.2 社交网络:六度分隔理论二、术语表三、图抽象数据类型:ADT Graph3.1 定义3.2 ADT Graph的实现方法3.2.1 邻接矩阵Adjacency Matrix3.2.2 邻接列表Adjacency List四、ADT Graph的实现:实例4.1 Vertex类4.2 Graph 类五、图的应用5.1 词梯问题5.1.1 构建单词关系图5.1.2 采用字典建立桶一、图Graph的概念图Graph是原创 2021-01-05 14:19:37 · 8355 阅读 · 0 评论 -
数据结构与算法(python):平衡二叉查找树(AVL)
参考自 MOOC数据结构与算法Python版目录一、AVL树的定义二、AVL树的性能O(log n)三、AVL树的Python实现3.1 put方法3.2 UpdateBalance方法3.3 rebalance重新平衡3.4 rotateLeft 左旋3.5 如何调整平衡因子3.6 AVL树的实现: 更复杂的情形3.6 rebalance四、ADT Map的实现方法小结一、AVL树的定义能够在key插入时一直保持平衡的二叉查找树: AVL树(AVL是发明者的名字缩写)利用AVL树实现ADT原创 2021-01-04 17:14:07 · 573 阅读 · 0 评论 -
数据结构与算法(python):二叉查找树及操作
参考自 MOOC数据结构与算法Python版目录原创 2020-10-07 19:37:18 · 920 阅读 · 0 评论 -
数据结构与算法(python):优先队列和二叉堆
参考自 MOOC数据结构与算法Python版目录一、优先队列1.1 二叉堆Binary Heap实现优先队列一、优先队列队列有一种变体称为“优先队列”,优先队列的出队跟队列一样从队首出队,但在优先队列内部, 数据项的次序却是由“优先级”来确定:高优先级的数据项排在队首,而低优先级的数据项则排在后面。这样,优先队列的入队操作就比较复杂,需要将数据项根据其优先级尽量挤到队列前方。有什么方案可以用来实现优先队列?1.1 二叉堆Binary Heap实现优先队列二叉堆能够将优先队列的入队和出队复杂度都保原创 2020-09-30 15:34:42 · 492 阅读 · 0 评论 -
数据结构与算法(python):树结构
参考自 MOOC数据结构与算法Python版目录一、什么是树1.1 树结构相关术语1.2 树的定义二、树的嵌套列表实现一、什么是树树是一种基本的“非线性”数据结构。跟自然界中的树一样, 数据结构树也分为:根、 枝和叶等三个部分。一般数据结构的图示把根放在上方,叶放在下方。分类树的三个特征:分类体系是层次化的一个节点的子节点与另一个节点的子节点相互之间是隔离、独立的每一个叶节点都具有唯一性1.1 树结构相关术语术语说明根Root树中唯一一个没有入边的节点路径P原创 2020-09-25 16:13:30 · 1664 阅读 · 2 评论 -
数据结构与算法(python):映射抽象数据类型 ADT Map
参考自 MOOC数据结构与算法Python版目录一、ADT Map的定义1.1 字典1.2 ADT Map定义的操作二、ADT Map的代码实现一、ADT Map的定义1.1 字典“字典”是一种可以保存key-data键值对的数据类型,其中关键码key可用于查询关联的数据值data,这种键值关联的方法称为“映射Map。ADT Map的结构是键-值关联的无序集合。关键码具有唯一性,通过关键码可以唯一确定一个数据值1.2 ADT Map定义的操作函数含义Map()创建一个空映原创 2020-09-22 12:33:19 · 1133 阅读 · 0 评论 -
数据结构与算法(python):散列 Hash与区块链技术
参考自 MOOC数据结构与算法Python版目录一、什么是散列基本概念二、完美散列函数2.1 散列函数MD5/SHA2.2 Python的散列函数库hashlib2.3 完美散列函数用于数据一致性校验三、散列函数的最酷应用:区块链技术3.1 区块链的组成3.2 为什么有效散列值那么难计算3.3 为什么矿工抢着生成区块?3.4 区块链技术飞速扩张的应用四、散列函数设计4.1 折叠法4.2 平方取中法4.3 对非数项进行散列一、什么是散列如果我们事先能知道要找的数据项应该出现在数据集中的什么位置, 就可以原创 2020-09-21 23:22:02 · 365 阅读 · 1 评论 -
数据结构与算法(python):归并排序和快速排序算法及分析
参考自 MOOC数据结构与算法Python版目录一、归并排序 Merge Sort1.1 算法思路1.2 代码及算法分析一、归并排序 Merge Sort1.1 算法思路归并排序是递归算法, 思路是将数据表持续分裂为两半, 对两半分别进行归并排序【步骤】递归的基本结束条件是:数据表仅有1个数据项,自然是排好序的;缩小规模:将数据表分裂为相等的两半,规模减为原来的二分之一;调用自身:将两半分别调用自身排序,然后将分别排好序的两半进行归并,得到排好序的数据表1.2 代码及算法分析【代原创 2020-08-15 16:40:36 · 369 阅读 · 1 评论 -
数据结构与算法(python):插入排序和谢尔排序算法及分析
参考自 MOOC数据结构与算法Python版目录一、插入排序 Insertion Sort1.1 算法思路1.2 代码及算法分析二、谢尔排序Shell Sort1.1 算法思路1.2 代码及算法分析一、插入排序 Insertion Sort1.1 算法思路插入排序维持一个已排好序的子列表, 其位置始终在列表的前部, 然后逐步扩大这个子列表直到全表。【步骤】第1趟, 子列表仅包含第1个数据项, 将第2个数据项作为“新项”插入到子列表的合适位置中, 这样已排序的子列表就包含了2个数据项第2趟,原创 2020-08-14 17:28:27 · 181 阅读 · 0 评论 -
数据结构与算法(python):冒泡排序和选择排序算法及分析
参考自 MOOC数据结构与算法Python版目录一、冒泡排序(Bubble Sort)1.1 算法思路1.2 算法分析二、选择排序2.1 算法思路及分析一、冒泡排序(Bubble Sort)1.1 算法思路在于对无序表进行多趟比较交换,每趟包括了多次两两相邻比较, 并将逆序的数据项互换位置, 最终能将本趟的最大项就位,经过n-1趟比较交换, 实现整表排序,每趟的过程类似于“气泡”在水中不断上浮到水面的经过。【步骤】第1趟比较交换, 共有n-1对相邻数据进行比较一旦经过最大项,则最大项会一路交原创 2020-08-13 22:26:04 · 146 阅读 · 0 评论 -
数据结构与算法(python):顺序查找与二分查找算法
参考自 MOOC数据结构与算法Python版目录一、顺序查找1.1 无序表1.2 有序表二、二分查找2.1 二分查找:代码2.2 分而治之:递归算法一、顺序查找通过下标,我们可以按照顺序来访问和查找具有线性或者顺序关系的数据项。从列表的首项开始,按照下标增长的顺序,逐个比对数据项,如果到最后一个都未发现要查找的向,则查找失败顺序查找的算法复杂度是O(n)1.1 无序表【代码】def sequantialSearch(alist, item): pos = 0 found原创 2020-08-13 21:13:11 · 883 阅读 · 0 评论 -
数据结构与算法(python):动态规划案例分析
参考自 MOOC数据结构与算法Python版目录一、博物馆大盗问题一、博物馆大盗问题大盗潜入博物馆, 面前有5件宝物, 分别有重量和价值, 大盗的背包仅能负重20公斤, 请问如何选择宝物, 总价值最高?itemweightvalue1232343484585910【思路】我们把m(i,W)m(i, W)m(i,W)记为:前 iii (1<=i<=5)(1<=i<=5)(1<=i<=5)个宝物原创 2020-08-11 17:23:30 · 384 阅读 · 0 评论 -
数据结构与算法(python)递归:找零问题
参考自 MOOC数据结构与算法Python版目录一、什么是递归Recursion初识递归数列求和递归“三定律”递归的应用任意进制转换Python中的递归深度限制递归可视化:分形树Python的海龟作图系统turtle module一、什么是递归Recursion递归是一种解决问题的方法,它将问题分解为规模更小的相同问题,在算法流程中调用自身初识递归数列求和问题:给定一个不定长列表, 返回所有数的和。需要一个循环和一个累加变量来迭代求和。举个例子:求全括号表达式的和:total=(1+(3原创 2020-07-06 11:23:28 · 1163 阅读 · 0 评论 -
数据结构与算法(python) 线性结构:有序列表Ordered List
参考自 MOOC数据结构与算法Python版目录一、什么是有序表OrderedList二、抽象数据类型:有序表OrderedList2.1 OrderedList的基本操作2.2 Python实现一、什么是有序表OrderedList– 有序表是一种数据项依照其某可比性质(如整数大小、 字母表先后) 来决定在列表中的位置– 越“小”的数据项越靠近列表的头, 越靠“前”二、抽象数据类型:有序表OrderedList2.1 OrderedList的基本操作函数含义Orde原创 2020-07-05 11:09:42 · 6713 阅读 · 0 评论 -
数据结构与算法(python) 线性结构:无序列表 Unordered List以及链表
参考自 MOOC数据结构与算法Python版目录什么是列表List抽象数据类型ListList的基本操作Python实现链表:节点Node什么是列表List一种数据项按照相对位置存放的数据集,特别的,被称为“无序表unordered list”, 其中数据项只按照存放位置来索引,如第1个、第2个……、最后一个等。抽象数据类型ListList的基本操作函数含义List()创建一个空列表add(item)添加一个数据项到列表中,假设item原先不存在于列表中app原创 2020-07-05 10:20:53 · 3525 阅读 · 0 评论 -
数据结构与算法(python) 线性结构:双端队列Deque
参考自 MOOC数据结构与算法Python版目录什么是双端队列Deque抽象数据类型DequeDeque的基本操作Python实现ADT Queue双端队列的应用回文词的判定什么是双端队列Deque– 跟队列相似,其两端可以称作“首”“尾”端,但deque中数据项既可以从队首加入,也可以从队尾加入;数据项也可以从两端移除。某种意义上说,双端队列集成了栈和队列的能力。抽象数据类型DequeDeque的基本操作函数含义Deque()创建一个空双端队列addFront(原创 2020-07-02 21:37:57 · 1489 阅读 · 0 评论 -
数据结构与算法(python) 线性结构:队列Queue
参考自 MOOC数据结构与算法Python版目录什么是队列什么是队列队列是一种有次序的数据集合,其特征是:– 新数据项的添加总发生在一端("尾rear"端)– 而现存数据项的一处总发生在另一端(“首front”端)遵循先进先出(FIFO:First-infirst-out)...原创 2020-07-02 20:26:52 · 3394 阅读 · 1 评论 -
数据结构与算法(python) 线性结构:栈Stack
目录什么是线性结构栈抽象数据类型及Python实现什么是栈什么是线性结构线性结构是一种有序数据项的集合, 其中每个数据项都有唯一的前驱和后继线性结构总有两端, 在不同的情况下, 两端的称呼也不同有时候称为“左”“右”端、 “前”“后”端、“顶”“底”端 - 两端的称呼并不是关键, 不同线性结构的关键区别在于数据项增减的方式有的结构只允许数据项从一端添加,而有的结构则允许数据项从两端移除以下是4个最简单但功能强大的结构栈Stack队列Queue双端队列Deque列表List原创 2020-06-21 19:15:15 · 292 阅读 · 0 评论