文章分类 -  python数据结构与算法

摘要:字梯问题 在字梯中你通过改变一个字母逐渐发生变化。 在每一步,你必须将一个字变换成另一个字。 下面的单词序列示出了对上述问题的一种可能的解决方案: 用图算法解决这个问题的步骤可以描述为: 将字之间的关系表示为图。 使用称为广度优先搜索的图算法来找到从起始字到结束字的有效路径。 构建字梯图 将大量的单 阅读全文
posted @ 2019-01-12 22:07 youngliu91 阅读(411) 评论(0) 推荐(0) 编辑
摘要:Vertex类 每个顶点使用字典来跟踪它连接的顶点和每个边的权重。这个字典称为'connectedTo'。 Graph类 测试: 输出: 输出: 阅读全文
posted @ 2019-01-12 13:24 youngliu91 阅读(7819) 评论(0) 推荐(0) 编辑
摘要:示例图: 邻接矩阵 实现图的最简单的方法之一是使用二维矩阵。在该矩阵实现中,每个行和列表示图中的顶点。存储在行 v 和列 w 的交叉点处的单元中的值表示是否存在从顶点 v 到顶点 w 的边。 当两个顶点通过边连接时,我们说它们是相邻的。 单元格中的值表示从顶点 v 到顶点 w 的边的权重。 邻接矩阵 阅读全文
posted @ 2019-01-12 11:58 youngliu91 阅读(20162) 评论(0) 推荐(3) 编辑
摘要:图的基本概念 顶点 也称为“节点”,是图的基本部分。它可以有一个名称,我们将称为“键”。一个顶点也可能有额外的信息。我们将这个附加信息称为“有效载荷”。 边 也称为“弧”,是图的另一个基本部分。边连接两个顶点,以表明它们之间存在关系。边可以是单向的或双向的。如果图中的边都是单向的,我们称该图是有向图 阅读全文
posted @ 2019-01-12 11:31 youngliu91 阅读(100) 评论(0) 推荐(0) 编辑
摘要:二叉搜索树 二叉搜索树(AVL树)实现 Map 抽象数据类型就像一个常规的二叉搜索树,我们将节点的平衡因子定义为左子树的高度和右子树的高度之间的差: 如果平衡因子大于零,则子树是左重的。 如果平衡因子小于零,则子树是右重的。 如果平衡因子是零,那么树是完美的平衡。 如果平衡因子是 1,0 或 1,我 阅读全文
posted @ 2019-01-10 14:21 youngliu91 阅读(2021) 评论(0) 推荐(1) 编辑
摘要:二叉搜索树 左子树中的所有键小于根中的键,右子树中的所有键都大于根。该属性适用于每个父级和子级。 二叉搜索树操作 | 操作 | 描述 | | : : | : : | |Map()|创建一个新的空 map| |put(key,val)|向 map 中添加一个新的键值对,如果键已经在 map 中,那么用 阅读全文
posted @ 2019-01-09 18:17 youngliu91 阅读(353) 评论(0) 推荐(0) 编辑
摘要:排序算法的稳定性 稳定排序算法会将相等的元素值维持其相对次序。如果一个排序算法是稳定的,当有两个相等的元素 R 和 S,且在原本的列表中 R 出现在 S 之前,那么在排序过的列表中 R 也将会是在 S 之前。 算法复杂度以及稳定性比较 | 排序算法 | 最好时间复杂度|平均时间复杂度 |最坏时间复杂 阅读全文
posted @ 2019-01-08 15:45 youngliu91 阅读(97) 评论(0) 推荐(0) 编辑
摘要:二叉堆 优先级队列的作用就像一个队列,在优先级队列中,队列中的项的逻辑顺序由它们的优先级确定:最高优先级项在队列的前面,最低优先级的项在后面。因此,当你将项排入优先级队列时,新项可能会一直移动到前面。 实现优先级队列的经典方法是使用称为二叉堆的数据结构。二叉堆将允许我们在 O(logn)中排队和 阅读全文
posted @ 2019-01-07 22:37 youngliu91 阅读(186) 评论(0) 推荐(0) 编辑
摘要:分析树 数学表达式作为分析树,例如 : 树的层次结构有助于我们了解整个表达式的求值顺序。在我们计算顶层乘法之前,我们必须计算子树中的加法和减法。作为左子树的加法结果为10。减法,即右子树,计算结果为3。 构建分析树的第一步是将表达式字符串拆分成符号列表。 有四种不同的符号要考虑:左括号,右括号,运算 阅读全文
posted @ 2019-01-06 18:46 youngliu91 阅读(1100) 评论(0) 推荐(0) 编辑
摘要:树遍历的三种方式 前序遍历: 根节点 左子树 右子树(根节点在前面) 中序遍历: 左子树 根节点 右子树(根节点在中间) 后序遍历: 左子树 右子树 根节点(根节点在后边) 举例: 前序遍历:A B D C E F 中序遍历:D B A E C F 后序遍历:D B E F C A python实现 阅读全文
posted @ 2019-01-06 18:12 youngliu91 阅读(115) 评论(0) 推荐(0) 编辑
摘要:python实现树 需要注意的是,插入左右子节点的时候: 先判断之前的结点是否为空,如果为空则直接插入,如果非空,将要插入的节点作为父节点,将原有的节点作为子节点。 测试,创建如下图所示的树: 测试一下插入节点时候原来为空节点和非空节点的情况: 阅读全文
posted @ 2019-01-06 12:19 youngliu91 阅读(100) 评论(0) 推荐(0) 编辑
摘要:树的例子 生物学的分类树: Unix系统目录或文件夹树: 树的基本概念 节点 节点是树的基本部分。它可以有一个名称,我们称之为“键”。节点也可以有附加信息。我们将这个附加信息称为“有效载荷”。虽然有效载荷信息不是许多树算法的核心,但在利用树的应用中通常是关键的。 边 边是树的另一个基本部分。边连接两 阅读全文
posted @ 2019-01-06 00:09 youngliu91 阅读(288) 评论(0) 推荐(0) 编辑
摘要:快速排序 1. 从数列中挑出一个元素,称为"基准"(pivot), 2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 3. 递归地(recurs 阅读全文
posted @ 2019-01-05 21:17 youngliu91 阅读(186) 评论(0) 推荐(0) 编辑
摘要:归并排序 将两个的有序数列合并成一个有序数列,我们称之为"归并"。 归并排序是使用分而治之策略作为提高排序算法性能的一种方法。 1. 分解 :将当前区间一分为二; 2. 求解: 递归地对两个子区间进行归并排序,递归的终结条件是子区间长度为1。 3. 合并:将已排序的两个子区间归并为一个有序的区间。 阅读全文
posted @ 2019-01-05 19:58 youngliu91 阅读(82) 评论(0) 推荐(0) 编辑
摘要:希尔排序 1. 先取一个正整数d1 0: 一次将分段的起始元素开始输入到分段插入排序中 for startposition in range(sublistcount): gapInsertionSort(alist,startposition,sublistcount) print("After 阅读全文
posted @ 2019-01-05 19:21 youngliu91 阅读(90) 评论(0) 推荐(0) 编辑
摘要:插入排序 1. 从第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素,将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5. 将新元素插入到该位置后 6. 重复步骤2~5 下图展 阅读全文
posted @ 2019-01-05 14:48 youngliu91 阅读(196) 评论(0) 推荐(0) 编辑
摘要:选择排序 1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2. 然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。 3. 依此进行,直到所有元素均排序完毕。 选择排序的实现 测试: 参考: 1. "演示动画" 阅读全文
posted @ 2019-01-05 14:30 youngliu91 阅读(82) 评论(0) 推荐(0) 编辑
摘要:冒泡排序 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比 阅读全文
posted @ 2019-01-05 13:52 youngliu91 阅读(121) 评论(0) 推荐(0) 编辑
摘要:二分查找从中间项开始,而不是按顺序查找列表。 如果该项是我们正在寻找的项,我们就完成了查找。 如果它不是,我们可以使用列表的有序性质来消除剩余项的一半。重复这个过程,直到找到我们的查找项或者确定查找项不存在。 下图展示了该算法如何快速地找到 : def binarySearch(alist,item 阅读全文
posted @ 2019-01-05 13:32 youngliu91 阅读(110) 评论(0) 推荐(0) 编辑
摘要:按照基本的顺序排序,简单地从一个项移动到另一个项,直到找到我们正在寻找的项或遍历完整个列表。 查找性能情况: 在最好的情况下,我们通过只查看一项会发现该项不在列表中。 平均来说,我们将只了解 n/2 项就知道。然而,这种复杂度仍然是 O(n)。 阅读全文
posted @ 2019-01-05 13:27 youngliu91 阅读(94) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示