
数据结构
文章平均质量分 88
Moelimoe
Every single day that makes no difference is a betrayal to my life.
展开
-
数据结构之图:加权有向图与dijkstra算法找到最短路径,Python——28
加权有向图与dijistra算法找到最短路径加权有向图的构造去往dijstra算法class DirectedEdge: def __init__(self, _from, _to, weight): self._from = _from self._to = _to self.weight = weight def get...原创 2020-04-20 21:29:07 · 2649 阅读 · 5 评论 -
数据结构之图:加权无向图与寻找最小生成树,Python——27
加权无向图与寻找最小生成树加权无向图的介绍引入加权无向图是一种为每条边关联一 个权重值或 是成本的图模型。这种图能够自然地表示许多应用。在一副航空图中,边表示航线,权值则可以表示距离或是费用。在一副电路图中,边表示导线,权值则可能表示导线的长度即成本,或是信号通过这条先所需的时间。此时我们很容易就能想到,最小成本的问题,例如,从西安飞纽约,怎样飞才能使时间成本最低或者是金钱成本最低?给...原创 2020-04-20 17:58:42 · 2158 阅读 · 0 评论 -
数据结构之图:有向图的拓扑排序,Python代码实现——26
有向图的拓扑排序拓扑排序介绍什么是拓扑排序?一个有向图的拓扑排序(Topological sort 或 Topological ordering)是根据其有向边从顶点U到顶点V对其所有顶点的一个线性排序举个例子:让一个拓扑排序的图中的所有顶点代表某项要执行的任务组合,那么它的边就可以代表要执行要执行其中某一项任务必须要先先于另外一项任务的限制条件,在这个例子中,拓扑排序就是这项任务组合的...原创 2020-04-20 15:34:56 · 1577 阅读 · 0 评论 -
数据结构之图:有向图的介绍与实现,Python代码实现——25
有向图的介绍引入在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,但不能说是b->a,此时我们就需要使用有向图来解决这一类问题,它和我们之前学习的无向图,最大的区别就在于连接是具有方向的,在代码的处理上也会有很大的不同。定义有向图(Digraph或Directed graph)是一副由一系列顶...原创 2020-04-20 13:26:07 · 7948 阅读 · 0 评论 -
数据结构之图:用图解决案例,Python代码实现——24
用图解决畅通工程案例畅通工程-续介绍案例和之前并查集中实现的一样,但问题略有改动,需要判断9-10城市是否相通,9-8城市是否相通:使用图解决次案例:创建一个图无向图Undigraph对象 ,表示城市的图;分别调用Undigraph对象的addEdge(0,1),addEdge(6,9),addEdge(3,8),addEdge(5,11),addEdge(2,12),addE...原创 2020-04-20 11:26:39 · 750 阅读 · 0 评论 -
数据结构之图:图的搜索,Python代码实现——23
图的搜索深度优先搜索(Depth First Search)定义从例子出发理解DFS是一种用于遍历或搜寻树类或图类数据结构的算法,这种算法从根结点出发(如果是图,则任意选择一个顶点作为根结点),在回溯之前会尽可能地遍历每一个分支。DFS类似于树的先序遍历假设左结点优先于右结点,并且不会重复遍历,则上图的DFS路径:A→B→D→F→E→C→G如果不遍历时不标记已遍历,则会重复遍历,...原创 2020-04-20 10:29:30 · 1541 阅读 · 0 评论 -
数据结构之图:无向图的介绍与功能实现,Python——22
无向图(Undigraph)的介绍引入生活中的图,有地图,集成电路板的图,可以看类似的看做是数据结构中的图数据有"一对一",“一对多”和“多对多”的关系,前两种分别表示线性表和树的存储结构性质,而多对多则可表示图的存储结构性质定义图是由有限的(并且可能是可变的)组的顶点(vertices,或称点points,结点nodes),以及一系列由这些每两个顶点之间相连的有向或无向的边(ed...原创 2020-04-20 10:01:17 · 11004 阅读 · 4 评论 -
数据结构之并查集:并查集解决案例, Python——21
并查集解决案例畅通工程案例问题介绍:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府"畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?在我们的测试数据文件夹中有一个trffic project.txt文件,它就是诚征道路统计表,下面是对数据的解释:解题思路:...原创 2020-04-19 23:19:47 · 286 阅读 · 0 评论 -
数据结构之并查集:路径压缩继续优化并查集——20
路径压缩继续优化并查集在实现的并查集中,在合并操作merge(item1, item2)时,会不管两个元素所在的分组大小,总是将item1的分组合并到item2的分组,这样可能会导致树的深度无必要地增加:如果是大树合并到小树上,会导致树的深度增加,进而造成增删改查等操作的代价增大因此我们要对并查集的合并操作进行优化。优化合并方式每次合并时,都将小分组的元素往大分组合并,由于本例初始...原创 2020-04-19 23:04:02 · 237 阅读 · 0 评论 -
数据结构之并查集:UF-Tree优化并查集——19
并查集的优化在上一节了解到并查集的快速查询,合并,判断归属组等操作,虽然这些操作都非常方便,但是在数据量较大的情况下,并查集的效率并不算高:上一节中实现代码中使用的合并方法(merge,API设计中为union),每次合并都需要遍历全部元素的次数,而最少要合并N-1次才能将所有元素合并到同一组,因此我们要对其合并进行优化为了提升union算法的性能,我们需要重新设计find方法和merge方...原创 2020-04-19 21:48:32 · 300 阅读 · 0 评论 -
数据结构之并查集:并查集的介绍与Python代码实现——18
并查集的介绍并查集(Union-find)数据结构也称作合并查找集(Merge-find set)或者不相交集数据结构(disjoint-set data structure),它是一种记录了由一个或多个元素组成的不连续的分组的集合。并查集提供常数量的复杂度来添加、合并以及确定两个元素是否属于同一个集合。并查集除了能够实现这些快速便利的操作,它在Krukal算法中寻找最小生成树的图也起着关键...原创 2020-04-19 21:01:35 · 604 阅读 · 0 评论 -
数据结构之平衡树:红黑树的介绍与Python代码实现——17
红黑树的介绍与Python代码实现红黑树的介绍红黑树(Red-Black Tree)是一种平衡二叉查找树,它是一种以比较简单的方式实现的2-3查找树红黑树基于2-3查找树的表现红链接:将两个2-结点连接起来构成一个3-结点 ;黑链接:则是2-3树中的普通链接。红黑树的定义:红黑树是含有红黑链接并满足下列条件的二叉查找树: .红链接均为左链接;没有任何一个结点同时和两条...原创 2020-04-19 19:18:07 · 1763 阅读 · 2 评论 -
数据结构之平衡树:2-3查找树的介绍——16
平衡树(AVL tree)引入之前学习的树,都不是平衡的,查找时需要一个一个往内比较,一个结点只储存一个值,数据量存储较大,树的深度会非常的深,导致数据查询时效率会十分的低,本次学习的平衡树就能解决这个问题定义平衡树,即AVL tree,命名来源于第一种该类型树的两个发明者Adelson-Velsky 和 Landis,有时也叫Balanced tree,平衡树是一种能自我保持“平衡...原创 2020-04-19 17:37:06 · 406 阅读 · 1 评论 -
数据结构之优先队列:最小索引优先队列,Python代码实现——15
最小索引优先队列(Min index priority queue)在之前实现的最大优先队列和最小优先队列,他们可以分别快速访问到队列中最大元索和最小元素,但是他们有一 个缺点,就是没有办法通过索引访问已存在于优先队列中的对象,并更新它们。为了实现这个目的,在优先队列的基础上,学习一种新的数据结构,索引优先队列。接下来我们以最小索引优先队列举列,最大优先索引队列,有兴趣可以自行实现。实现思...原创 2020-04-19 16:33:51 · 758 阅读 · 1 评论 -
数据结构之优先队列:优先队列的介绍与基础操作实现,Python代码实现——14
优先队列(Priority queue)的介绍优先队列是计算机中一种抽象的数据结构类,它有着一个类似和队列或者堆的结构,但是其中每个元素额外有一个优先级别在一个优先队列中,一个高优先顺序的元素会先执行与低优先顺序的元素。在它的执行过程中,如果两个元素拥有相同的优先顺序,则会根据他们进入队列的先后顺序来确定执行先后,但是在在其他类型的数据结构中,如果两个元素优先级别相同,则不会定义这两个元素的...原创 2020-04-19 15:42:54 · 455 阅读 · 0 评论 -
数据结构之堆:堆的排序,Python代码实现——13
堆的排序,使用Python代码实现上一节对堆进行了简单的实现,但是实现的堆只是部分有序(父结点大于子结点,子结点之间无序)接下来我们实现对堆的所有元素进行升序排序排序过程实现步骤:构造堆;得到堆顶元素,这个值就是最大值;交换堆顶元索和数组中的最后一个元素 ,此时所有元索中的最大元素已经放到合适的位置;对堆进行调整,重新让除了最后一个元索的剩余元索中的最大值放到堆顶;重复2-4这...原创 2020-04-19 15:05:36 · 306 阅读 · 0 评论 -
数据结构之堆:堆的介绍与python实现——12
堆的简单实现与代码实现堆的定义再定义堆之前,我们先回顾一下完全二叉树的定义:完全二叉树:除了最后一层的结点有可能没有达到最大值外,其它层的结点值都达到最大值,此外最后一层的叶子结点会尽可能连续集中在左边堆的基本定义:堆是一种是基于树的专用数据结构,一般是将一颗完全二叉树的结点按照层序遍历的顺序存于数组中来实现的堆具有以下几个特性在堆中,最高(或最低)优先级的元素始终都存储在堆的...原创 2020-04-19 12:14:14 · 343 阅读 · 0 评论 -
数据结构之二叉树:折纸问题——11
数据结构之二叉树:Python代码解决折纸问题折纸问题要求:请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。分析:我们把对折后的纸张翻过来让粉色朝下,这时把第-次对折产生的折痕看做是根结点,那第二次对...原创 2020-04-19 11:19:20 · 629 阅读 · 0 评论 -
数据结构之二叉树:二叉查找树的先序、中序、后序、层序遍历,Python代码实现——10(续)
数据结构之二叉查找树的代码实现本节继续对上一节BST的功能实现在实现之前,先对要实现的功能进行一下简单的介绍BST的基础遍历方式以一个简化的树为例,一棵树包含根(父)结点和其左子树及右子树:遍历顺序的先后是指根(父)结点被遍历的相对顺序先序遍历:指的是“先根后左再右”中序遍历:指的是“先左后根再右”后序遍历:指的是“先左后又再根”如果子树也存在子树,则也需按此规则进行遍历,...原创 2020-04-19 01:44:19 · 599 阅读 · 0 评论 -
数据结构之二叉树:二叉查找树基本功能,Python代码实现——10
数据结构之二叉查找树的代码实现定义二叉查找树(Binary Search Tree,BST),是一种内存中特殊的树类型的存储结构,它允许对存储在其结点的数据进行增删改查,或者用作动态的数据集合,或是通过key查找对应value的查找表;创建结点设计:可以使用顺序表或链表实现二叉树,这里使用链表实现,在学习堆时再使用顺序表实现使用链表结点设计:class Node: de...原创 2020-04-19 01:09:36 · 510 阅读 · 0 评论 -
数据结构之树:树的介绍——9
数据结构链表之树,介绍篇树的基本定义介绍:树(tree)是计算机中非常重要的数据结构,它的外形看起来像一颗倒挂着的的树,使用树这种结构可以描述生活中很多的事物,如族谱,单位的组织架构,xml,html的中属性的关系,文件目录,路由协议,某些数据库的索引,机器学习中的决策树等定义:树是由n(n>=1)个有限结点(node)组成的一个具有层次关系的集合,某些结点之前存在特定的关系,用连线...原创 2020-04-18 22:34:10 · 423 阅读 · 0 评论 -
数据结构链表之符号表,Python3实现——8
数据结构链表之符号表符号表的介绍之前章节介绍的顺序表和链表都是一个节点储存一个元素的表,但在日常生活中我们还有很多一次需要储存成对或多个值的情况,例如:符号表最主要的目的将一对元素,用一个键和一个值将其联系起来,储存的值则是一个键和一个值共同组成的数据对,在查询元素时,我们只需要找到键即可查找到对应的元素符号表的键具有唯一性符号表的实现可以用数组(Python中为列表)实现,也...原创 2020-04-11 21:04:29 · 466 阅读 · 0 评论 -
数据结构链表之队列,Python3实现——7
数据结构链表之队列队列概述定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取队列可以使用顺序表(Python中列表)实现,也可以用链表实现,这里介绍链表实现的方法主要实现以下几个功能:is_empty()判断是否队列为空size()查看队列长度enqueue()向队列插入元素dequeue(...原创 2020-04-09 19:02:19 · 335 阅读 · 0 评论 -
数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
栈能解决的常见问题,使用代码实现基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题案例括号匹配问题(点我直接到代码实现)逆波兰表达式求值问题(点我直接到代码实现)括号匹配问题在给定的字符串中,编写程序实现确定该字符串类的括号是否匹配的问题使用栈解决这个问题的思路:括号匹配python代码实现from Structure.lin...原创 2020-04-09 17:35:53 · 365 阅读 · 0 评论 -
数据结构链表之栈,Python3简单实现——5
数据结构链表之栈栈的概述定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表。引入名词:将数据存入栈的动作称为压栈,将数据取出栈的动作称为弹栈;栈的特点:先进入栈的元素会被压入栈底,最后一位元素所处的位置就是栈顶,弹栈时最后一个元素最先被读取,依次往下取出,因此叫做First In Last Out栈可以用顺序表(python中列表)实现...原创 2020-04-09 13:49:13 · 307 阅读 · 0 评论 -
数据结构链表之循环链表——4
循环链表与约瑟夫问题循环链表定义定义:循环链表的定义十分简单,只需使一条单链表的尾部结点指向头结点,即可完成循环链表循环链表的构建class Node: def __init__(self, item): self.item = item self.next = Nonefirst = Node('aa')second = Node('...原创 2020-04-08 20:15:23 · 195 阅读 · 0 评论 -
数据结构链表之单链表的快慢指针——3
单链表之快慢指针单链表的快慢指针简介快慢指针指链表中定义两个指针,两个指针的移动速度一快一慢,一般快指针移动步长为慢指针的两倍快慢指针适合解决的几个典型问题中间值问题单向链表是否有环问题有环链表的入口问题先定义一个简单的节点class Node: def __init__(self, item): self.item = item s...原创 2020-04-08 16:57:59 · 377 阅读 · 0 评论 -
数据结构链表之单向链表:Python3 实现单向链表——1
Python3 实现单向链表链表定义与简介定义:链表与顺序表(Python中列表)性质相反,链表是物理单元上非顺序的、非连续的,在逻辑顺序上其数据元素是通过指针实现的,组成链表的每一个元素也可以叫做链表的节点,节点可以在运行时动态生成单向链表中所有的元素也可以称之为节点,每个节点包含两个区域,如上图item区域称为数据域,next区域为指针域,单向链表中尾节点的判断只需判断该节点的指针(...原创 2020-04-06 17:13:16 · 297 阅读 · 0 评论 -
数据结构链表之双向链表:Python3 实现双向链表——2
Python3 实现双向链表双向链表定义:双向链表是链表中的一种,双向链表也叫双链表,它由多个节点组成,每个节点由一个数据域和两个指针域组成,一个指针指向前驱元素,一个指向后继元素双向链表一般用来构造循环链表,这个后面我们也会学习到定义简单的双向链表class Node: """The nodes of double linked list""" def __ini...原创 2020-04-07 22:25:13 · 523 阅读 · 0 评论