非常抱歉,朋友们。因为工作变动的关系,新工作压力很大,转型期没有再做这个压力很大的更新。 今天上来看到有朋友追问,感觉很不好意思。既然有朋友在追看,我就决心把这事做到底,所以会继续不定期更新本博。 谢谢。 希望有问题能在博客里留言,也帮我加点人气。...
2014-10-23 07:09 阅读(749) 评论(6)
python数据结构与算法 39 树的遍历树的遍历 在学习完成树的基本结构以后,我们开始研究一些树的应用模式。访问树的全部节点,一般有三种模式,这些模式的不同之处,仅在于访问节点的顺序不同。我们把这种对节点的访问称为“遍历”,这三种遍历模式叫做前序、中序和后序。下面我们对遍历模式作更仔细的定义,同时研究使用这延续模式的例子。 前序遍历...
2014-06-07 17:18 阅读(1218) 评论(0)
python数据结构与算法 38 分析树分析树 树的结构完成以后,该是时候看看它能做点什么实事儿了。这一节里,我们研究一下分析树。分析树能够用于真实世界的结构表示,象语法或数学表达式一类的。 图1 一个简单语句的分析树 图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分。 图2 ((7+3)(52))的分析树 我们也可以把数学表达式如((7+3...
2014-05-12 16:11 阅读(748) 评论(1)
python数据结构与算法 37 树的实现树的实现 记住上一节树的定义,在定义的基础上,我们用以下的函数创建并操作二叉树: BinaryTree()创建一个二叉树实例 getLeftChild()返回节点的左孩子 getRightChild()返回节点的右孩子 setRootVal(val)把val变量值赋给当前节点 getRootVal()返回当前节点对象。 insertLeft(val)创建一个新二叉树作为当前...
2014-05-07 13:13 阅读(1028) 评论(0)
python数据结构与算法 36 树的基本概念树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树。树在计算机科学中应用广泛,象操作系统、图形学、数据库系统、网络等都要用到树。树和他们在自然界中的表哥――植物树――非常相似,树也有根,有分枝,有叶子...
2014-05-06 16:01 阅读(865) 评论(0)
python数据结构与算法 35 快速排序快速排序 快速排序也使用了分而治之的策略来提高性能,而且不需要额外的内存,但是这么做的代价就是,列表不是对半切分的,因而,性能上就有所下降。 快速排序选择一个数值,一般称为“轴点”,虽然有很多选取轴点的方法,我们还是简单地把列表中第一个元素做为轴点了。轴点的作用是帮助把列表分为两个部分。列表完成后,轴点所在的位置叫做“切分点”,从这一点上把列表分成两部分供后续调用。 图12所示,54将作...
2014-05-03 20:37 阅读(702) 评论(0)
python数据结构与算法 34 归并排序归并排序 在提高排序算法性能的方法中,有一类叫做分而治之。我们先研究其中第一种叫做归并排序。归并排序使用递归的方法,不停地把列表一分为二。如果列表是空或只有一个元素,那么就是排好序的(递归基点),如果列表有超过1个的元素,那么切分列表并对两个子列表递归使用归并排序。一旦这两个列表排序完成,称为“归并”的基本操作开始执行。归并是把两个有序列表合并成一个新的有序列表的过程。图10是我们熟悉的列表...
2014-04-30 14:12 阅读(595) 评论(0)
python数据结构与算法 33 希尔排序希尔排序 希尔排序,有时称为递减增量排序,是在插入排序基础上,把列表拆成几个较小的子表,然后对每个子表使用插入排序的方法。选出子表的方法是希尔排序的关键,它并不是把列表的中相近的元素取出来组成子表,而是使用了一个增量值I,有时也叫做“间隙”,然后每隔一个间隙选中一个元素来组成子表。 这可以从图6中看出来,列表中有9个元素,如果我们使用增量3,就有3个子表,每个子表单独做插入排序。完成之后的...
2014-04-29 09:38 阅读(625) 评论(0)
python数据结构与算法 32 插入排序插入排序 插入排序虽然仍然是O(n2),但工作模式就有稍微不同。它总是在列表的低端保持一个有序的子列表,后面的元素被逐个“插入”到前面的有序子表,这样有序的子表就逐渐变大。图4是插入排序的过程,阴影部分是排好序的子列表。 开始的时候我们假设一个只有一个元素(在0位上)的列表而且是有序的,每次遍历的时候,从1到n-1的每个元素,与有序的子列表进行比较。当回顾已经排序的子表时候,比...
2014-04-23 09:57 阅读(649) 评论(0)
python数据结构与算法 29-3 用哈希表实现映射实现map抽象数据类型 字曲是python里最有用的数据集合之一,回想一下,字典是一对键值-数据的组合,键值是用来查找相应的数据,我们把这种思想称为“映射” 映射的抽象数据类型定义如下,这是一个无序的键-值对集合,键值总是唯一的以便建立与数据的对应关系。映射的操作方法如下: Map()创建一个新的空的映射,返回一个空集合。 put(...
2014-04-22 14:41 阅读(2592) 评论(0)
python数据结构与算法 29-2 冲突解决冲突解决 现在返回到前面提到的冲突问题。当两个元素的哈希值指向同一个槽位,就应该有个系统的方法把第二个元素放进表中。这个过程叫做“冲突解决”。我们前面说过的,如果哈希函数是完美的,不会发生冲突。但完美无缺的事很少,所以冲突解决就成为哈希算法中的重要部分。 一种方法是为引起冲突的元素找到另一个位置。简单的做法就是从原来的位置开始,顺序向前查找,直到遇到一个空闲的槽位为止。注意的是我们可能需要...
2014-04-22 13:27 阅读(754) 评论(0)
python数据结构与算法 29-1 哈希查找前面的章节中,我们利用数据集中元素的相对位置信息来提高查找算法的性能。比如知道列表是有序的,可以使用二分查找。本节我们走得更远一些,创建一个数据结构,使得查找性能提高到O(1),称为哈希查找。...
2014-04-22 08:20 阅读(1019) 评论(0)
python数据结构与算法 31 选择排序选择排序 选择排序是冒泡排序的改进,一次遍历只做一次交换。它在一次遍历中找到最大的元素,结束时放到合适的位置,正如冒泡排序一样,一次遍历后最大的元素就位。第二次遍历后,第二大的元素就位,这样持续进行,需要n-1个遍历来为n个元素排序。 图3显示了一整个的排序过程,一次遍历,剩余最大的元素被选中并正确就位,所以第一次选择了93,第二次选择77,第三次55,等等。后面是代码. d...
2014-04-19 21:24 阅读(667) 评论(0)
python数据结构与算法30 冒泡排序排序 排序是将集合中的元素以某种规律放置的过程。例如,一个单词的列表,可以按字母顺序排列或按长度排列;一个城市的列表可以按人口,面积,邮政编码来排序。对有序列表的好处,前面在研究二分查找等案例时领略过的。 有许多许多的排序算法被开发和研究,这也说明排序在计算机科学中的重要性。大数据量的排序要占用海量的计算资源,象查找一样,排序的算法效率与元素的数量有关,对小的数据集来说,复杂的排序方法不值...
2014-04-18 19:54 阅读(705) 评论(0)
python数据结构与算法28 二分查找二分查找 在有序表的查找算法中,比较的过程用好了,可以从有序的特性中获得更多好处。在顺序查找中,与第一个元素比较之后,后面还有n-1个要比较。与顺序查找不同的是,二分查找从中间元素开始比对,如果中间元素就是要找的,完成;如果不是,就要考虑到有序的特性,如果要找的数据比中间项要大,那么列表的前半部分可以忽略,如果这个数据确实在列表里,那也一定在后半部分。 在后半部分继续这个过程,从中间元素开...
2014-04-17 15:52 阅读(867) 评论(0)