python 算法与数据结构译稿
文章平均质量分 95
杀了这个男孩
杀了男孩成为男人担当责任
展开
-
python数据结构与算法 2 栈的概念
Stacks栈What is a Stack? 什么是栈?A stack (sometimescalled a “push-down stack”) is an orderedcollection of items where the addition of new items and the removalof existing items always takes place at翻译 2014-03-14 12:22:21 · 2317 阅读 · 0 评论 -
python数据结构与算法 24 汉诺塔问题(河内塔问题)
复杂递归问题前面几节我们研究了几个相对比较容易的问题,有些有趣的图形问题可以在脑子里建立模型,让我们了解递归的过程。这一节开始我们要研究几个用迭代法比较难而用递归比较容易的问题,然后是一个看起来很简单但实际上很难的问题来结束。河内塔问题河内塔(汉诺塔的译法比较通行,但不对)问题是法国数学家Edouard Lucas于1883年受一个传说的启示提出的。据说是印度神庙里传授给年轻僧侣的翻译 2014-03-31 15:12:01 · 2623 阅读 · 0 评论 -
python数据结构与算法 23 宾斯基三角形
宾斯基三角形另一个演示自相似分形图的是宾斯基三角形,如图3所示。宾斯基三角形说明了一种三通递归算法。这种图形手绘非常简单。从一个大三角形开始,连接三个边的中点,把三角形分成4个。不管中间的三角形,把其余三个再次应用前述的过程。每一次都新建一些三角形,再把每个同样的过程递归应用到小三角形上,只要你的铅笔够细,这个过程可以无限进行下去。在读下面的代码之前,一定要拿出笔来,亲手画一遍。翻译 2014-03-30 20:15:38 · 5047 阅读 · 0 评论 -
python数据结构与算法 22 递归图形
递归图形上节中我们已经知道有些问题,如果用递归解决变得非常容易。但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么。这一节我们引入几个例子,用递归的方法画几个有趣的图形,通过观察图形的生成,也许能帮助你洞察递归的过程,从而学会递归的方法。我们要用的工具是python的图形模块turtle,这个模块伴随python的全部版本而且很容易使用,语法也简翻译 2014-03-26 16:20:29 · 3901 阅读 · 0 评论 -
python数据结构与算法 21 递归的实现和应用
把一个整数变成一个任意进制的字符串假设你要把一个整数转变成一个从2到16进制的数字组成的字符串,例如,把整数10变成十进制是“10”,二进制就是“1010”。虽然很多算法能够实现,包括在栈的应用中我们讨论过一个算法,但是递归的算法仍然是最简洁的。先来看个例子,十进制数769。我们有一个字符串,含有10个数字的字符串,类似covString=”0123456789”。那么把一个小于10的翻译 2014-03-25 15:50:58 · 1953 阅读 · 0 评论 -
python数据结构与算法 18 无序列表的实现
无序列表的实现:链表为了实现无序列表,先要实现我们通常称为“链表”的结构。前面说过我们保持列表元素之间的相对位置。当然,在连续存储的情况下不需要额外保存相对位置(如数组),但是如果数据以图1这样的随机方式保存,这就需要为每个元素配置额外的信息,指明它下一个元素的位置(图2),这样每个元素的相对位置,就通过一个元素到另一个元素的链接实现了。图1 元素不固定翻译 2014-03-22 22:26:41 · 3652 阅读 · 1 评论 -
python数据结构与算法 15 队列应用之烫手的山芋
为了展示队列的应用,我们模拟一种真实的先进先出的情形。作为开始,我们观察一种儿童游戏,叫烫手的山芋(hotpotato),在这个游戏中(图2),孩子们排成一圈,把手里的东西一个传一个,在某种情形下,停止传递,手上拿着烫手的山芋的人就要被清出来,其他的人继续玩,直接只剩一个人。从现代意义上说,这个游戏等价于著名的约瑟夫问题。据说,一世纪左右,历史学家弗拉维约瑟夫与犹太人一起反抗罗马。翻译 2014-03-18 15:15:50 · 2663 阅读 · 0 评论 -
python数据结构与算法 14 队列的python实现
队列的python实现在建立抽象数据类型之后,可以建立一个类来实现队列的。和以前一样,我们采用python内置的列表作为工具来建立队列类。队列也是有序的,所以需要决定队列的哪一头作为队列的前端和尾端。在下面的实现代码中,我们约定列表的0位置是队列的尾部,这样的好处是,可以直接使用列表的insert方法在队尾加入数据,使用pop方法在队列的前端(这时是列表的最后一个数据)删除数据。从性能翻译 2014-03-18 07:00:13 · 2222 阅读 · 0 评论 -
python数据结构与算法 11 后缀表达式求值
从本节开始,删除原版的英文,直接发译后的文稿。后缀表达式求值栈的最一个应用例子,计算一个后缀表达式的值。这个例子中仍然用栈的数据结构。不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中那样让操作符等待。另一条思路是,无论何时看到输入一个操作符,最近的两个操作数就是操作对象。为了说清楚一点,考虑表达式 4 5 6 * +。从左到右扫描时,首先得到4和5,不过此时,并不翻译 2014-03-16 22:24:02 · 4496 阅读 · 0 评论 -
python数据结构与算法 10 栈的应用之中缀转后缀表达式算法的实现
General Infix-to-Postfix Conversion中缀转后缀的算法We need todevelop an algorithm to convert any infix expression to a postfix expression.To do this we will look closer at the conversion process.现在我们要开发翻译 2014-03-16 15:24:58 · 2905 阅读 · 2 评论 -
Python数据结构与算法 7栈的应用之进制转换
Converting Decimal Numbers to Binary Numbers栈的应用:进制转换In your study of computer science, you have probably been exposed inone way or another to the idea of a binary number. Binary representation is翻译 2014-03-15 10:35:53 · 2480 阅读 · 0 评论 -
python数据结构与算法 6栈的应用之符号平衡(通用)
左右括号的匹配检查翻译 2014-03-14 19:44:46 · 1973 阅读 · 0 评论 -
python数据结构与算法 31 选择排序
选择排序选择排序是冒泡排序的改进,一次遍历只做一次交换。它在一次遍历中找到最大的元素,结束时放到合适的位置,正如冒泡排序一样,一次遍历后最大的元素就位。第二次遍历后,第二大的元素就位,这样持续进行,需要n-1个遍历来为n个元素排序。图3显示了一整个的排序过程,一次遍历,剩余最大的元素被选中并正确就位,所以第一次选择了93,第二次选择77,第三次55,等等。后面是代码.d翻译 2014-04-19 21:24:25 · 1271 阅读 · 0 评论 -
python数据结构与算法 3栈的抽象数据类型
python语言下栈的抽象数据类型翻译 2014-03-14 12:22:23 · 2348 阅读 · 0 评论 -
python数据结构与算法 4栈的实现
Remember thatnothing happens when we click the run button other thanthe definition of the class. We must create a Stack object and thenuse it. ActiveCode2 showsthe Stack class in action aswe per翻译 2014-03-14 12:22:26 · 2028 阅读 · 0 评论 -
python数据结构与算法 1 基本数据结构
Basic Data Structures第1章 基本数据结构Objectives学习目标To understand the abstract data types stack, queue, deque, andlist.To be able to implement the ADTs stack, queue, and deque usingPython lis翻译 2014-03-14 12:22:19 · 4126 阅读 · 0 评论 -
python数据结构与算法 39 树的遍历
树的遍历在学习完成树的基本结构以后,我们开始研究一些树的应用模式。访问树的全部节点,一般有三种模式,这些模式的不同之处,仅在于访问节点的顺序不同。我们把这种对节点的访问称为“遍历”,这三种遍历模式叫做前序、中序和后序。下面我们对遍历模式作更仔细的定义,同时研究使用这延续模式的例子。前序遍历翻译 2014-06-07 17:18:05 · 2785 阅读 · 0 评论 -
python数据结构与算法 33 希尔排序
希尔排序希尔排序,有时称为递减增量排序,是在插入排序基础上,把列表拆成几个较小的子表,然后对每个子表使用插入排序的方法。选出子表的方法是希尔排序的关键,它并不是把列表的中相近的元素取出来组成子表,而是使用了一个增量值I,有时也叫做“间隙”,然后每隔一个间隙选中一个元素来组成子表。这可以从图6中看出来,列表中有9个元素,如果我们使用增量3,就有3个子表,每个子表单独做插入排序。完成之后的翻译 2014-04-29 09:38:41 · 1434 阅读 · 1 评论 -
python数据结构与算法 38 分析树
分析树树的结构完成以后,该是时候看看它能做点什么实事儿了。这一节里,我们研究一下分析树。分析树能够用于真实世界的结构表示,象语法或数学表达式一类的。图1一个简单语句的分析树图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分。图2 ((7+3)∗(5−2))的分析树我们也可以把数学表达式如((7+3翻译 2014-05-12 16:11:37 · 2281 阅读 · 1 评论 -
python数据结构与算法 32 插入排序
插入排序插入排序虽然仍然是O(n2),但工作模式就有稍微不同。它总是在列表的低端保持一个有序的子列表,后面的元素被逐个“插入”到前面的有序子表,这样有序的子表就逐渐变大。图4是插入排序的过程,阴影部分是排好序的子列表。开始的时候我们假设一个只有一个元素(在0位上)的列表而且是有序的,每次遍历的时候,从1到n-1的每个元素,与有序的子列表进行比较。当回顾已经排序的子表时候,比翻译 2014-04-23 09:57:30 · 1365 阅读 · 1 评论 -
python数据结构与算法 26 动态规划
动态规划很多程序的目的在数值优化。象计算两地之间的最短距离,一个点集的最佳拟合曲线,符合某些条件的最小集合等。这些问题有很多的求解方法,本节的目标就是向你展示不同的问题解决策略。动态规划就是优化问题的解决方法之一。找零问题是数值优化的经典问题之一,假设你是一个自动售货机厂商的程序员,公司决定,为每次找交易的找零,计算需要的最小的硬币数量,从而实现流程化。如果一个顾客投入了1美元,买了3翻译 2014-04-14 15:54:26 · 3427 阅读 · 1 评论 -
python数据结构与算法30 冒泡排序
排序排序是将集合中的元素以某种规律放置的过程。例如,一个单词的列表,可以按字母顺序排列或按长度排列;一个城市的列表可以按人口,面积,邮政编码来排序。对有序列表的好处,前面在研究二分查找等案例时领略过的。有许多许多的排序算法被开发和研究,这也说明排序在计算机科学中的重要性。大数据量的排序要占用海量的计算资源,象查找一样,排序的算法效率与元素的数量有关,对小的数据集来说,复杂的排序方法不值翻译 2014-04-18 19:54:10 · 1735 阅读 · 0 评论 -
python数据结构与算法 29-3 用哈希表实现映射
实现map抽象数据类型字曲是python里最有用的数据集合之一,回想一下,字典是一对键值-数据的组合,键值是用来查找相应的数据,我们把这种思想称为“映射”映射的抽象数据类型定义如下,这是一个无序的键-值对集合,键值总是唯一的以便建立与数据的对应关系。映射的操作方法如下:· Map() 创建一个新的空的映射,返回一个空集合。· put(翻译 2014-04-22 14:41:02 · 9072 阅读 · 0 评论 -
python数据结构与算法 25 探索迷宫
探索迷宫这一节我们研究与机器人探索有关的问题:怎样走出迷宫?如果在宿舍用过真空吸尘器(哪位不是大学生?),就可以用本节学到的知识给它重新编程。我们的问题是要帮助小乌龟走出一个虚拟迷宫。迷宫问题可追溯到古希腊神话,提修斯被派到一个迷宫去杀死牛头怪,提修斯用线球一边走一边放线,在完成任务以后沿着线走出来。在现在这个问题中,我们假设小乌龟被扔到迷宫的某处,必须找到出口以逃出生死。如图2所示。翻译 2014-04-04 13:47:23 · 8373 阅读 · 3 评论 -
python数据结构与算法 16 队列应用之 打印任务
打印机任务队列的模拟程序,python语言,队列的应用翻译 2014-03-20 12:46:28 · 3133 阅读 · 2 评论 -
python数据结构与算法 5栈的应用之圆括号平衡
python语言,用栈的数据结构检查括号平衡翻译 2014-03-14 15:54:18 · 2766 阅读 · 0 评论 -
python数据结构与算法 19有序列表 ADT及实现
有序列表ADT我们开始讨论有序列表。就如上节中我们讨论的列表,如果数据项按升序排列,就要写成17,26,31,54,77,93。17是最小的,就是第一个数据项,93是最大的,就占最后的位置。有序列表的数据结构是数据项的集合,数据项之间保持其相对位置,而且这个位置是根据数据项的某个潜在特征排列的。典型的排列方法一般就是升序或降序或其他定义好的比较方法。有序列表的操作大部分与无序列表很象。翻译 2014-03-24 12:30:19 · 3682 阅读 · 0 评论 -
关于python数据结构与算法一书译稿的声明
发现有的网站在转载我的译稿,且不注明出处和译者。作者不得不声明一下:因为译者并没有得到原作者授权,只是根据网上公开的资料进行学习记录。所以版权归原作者或其中文版授权方。转发者请慎重。我本人只是边读边记录,并未校对。在得到授权或获得出版邀请之前,也没有精校的计划。阅读者也请慎重。如果原作者或出版社有合作计划,请联系QQ71048190原创 2014-03-23 22:42:10 · 3235 阅读 · 0 评论 -
python数据结构与算法 35 快速排序
快速排序快速排序也使用了分而治之的策略来提高性能,而且不需要额外的内存,但是这么做的代价就是,列表不是对半切分的,因而,性能上就有所下降。快速排序选择一个数值,一般称为“轴点”,虽然有很多选取轴点的方法,我们还是简单地把列表中第一个元素做为轴点了。轴点的作用是帮助把列表分为两个部分。列表完成后,轴点所在的位置叫做“切分点”,从这一点上把列表分成两部分供后续调用。图12所示,54将作翻译 2014-05-03 20:37:52 · 1508 阅读 · 0 评论 -
python数据结构与算法28 二分查找
二分查找在有序表的查找算法中,比较的过程用好了,可以从有序的特性中获得更多好处。在顺序查找中,与第一个元素比较之后,后面还有n-1个要比较。与顺序查找不同的是,二分查找从中间元素开始比对,如果中间元素就是要找的,完成;如果不是,就要考虑到有序的特性,如果要找的数据比中间项要大,那么列表的前半部分可以忽略,如果这个数据确实在列表里,那也一定在后半部分。在后半部分继续这个过程,从中间元素开翻译 2014-04-17 15:52:09 · 1813 阅读 · 0 评论 -
python数据结构与算法27 排序与查找 顺序查找
排序与查找目标Ø 理解并实现顺序查找和二分查找Ø 理解并实现选择排序,冒泡排序,合并排序,快速排序,插入排序和shell排序Ø 理解哈希表用于查找的技术Ø 介绍映射的抽象数据类型Ø 用哈希表实现映射的抽象数据类型查找现在我们转向排序与查找的内容,这一节研究查找,后半章研究排序。查找是在一个数据集里找到某个特定元素的算法过程。查找的结果可翻译 2014-04-15 17:31:03 · 2410 阅读 · 0 评论 -
python数据结构与算法 17 列表
列表回顾我们对简单数据结构的讨论,一直都是用了python语言的列表来实现抽象数据类型。虽然列表是是功能强大,使用简单的集合工具,也被广泛使用,不过,不是所有的编程语言都包括了列表工具。这种情况下,列表的概念就需要程序员自己实现。列表是是一种数据集合,其数据元素保持之间的相对位置,更清楚地说,我们把这种列表叫做无序列表,这种列表有第1个元素,第2个元素,第3个元素等等。我们能够引用列表翻译 2014-03-20 16:54:19 · 1282 阅读 · 0 评论 -
python数据结构与算法 34 归并排序
归并排序在提高排序算法性能的方法中,有一类叫做分而治之。我们先研究其中第一种叫做归并排序。归并排序使用递归的方法,不停地把列表一分为二。如果列表是空或只有一个元素,那么就是排好序的(递归基点),如果列表有超过1个的元素,那么切分列表并对两个子列表递归使用归并排序。一旦这两个列表排序完成,称为“归并”的基本操作开始执行。归并是把两个有序列表合并成一个新的有序列表的过程。图10是我们熟悉的列表翻译 2014-04-30 14:12:13 · 1341 阅读 · 0 评论 -
python数据结构与算法 13 队列的抽象数据类型
队列的抽象数据类型队列的抽象数据类型由下面的操作定义。队列是结构化,有序的数据集,前端删除数据,后端加入数据,保持FIFO属性:Queue() 定义一个空队列,无参数,返回值是空队列。enqueue(item) 在队列尾部加入一个数据项,参数是数据项,无返回值。dequeue() 删除队列头部的数据项,不需要参数,返回值是被删除的数据,队列本身有变化。i翻译 2014-03-17 21:36:04 · 1751 阅读 · 0 评论 -
python数据结构与算法 12队列的概念
什么是队列?队列是有序数据集合,队列的特点,是在头部删除数据项,称为前端,在尾部增加数据项,称为后端。数据项总是在开始的时候排在队伍的后端,慢慢向前走,直到排到最前面,轮到它的时候离开队列。刚进来的排在后端,待在队伍里时间最长的在前端,这种排列规则叫做FIFO,意思是“先进先出”,或者叫做“先来先服务”。最简单的例子就是平时我们的排队,象排队买票看电影,在超市排队付款,在自助餐厅排翻译 2014-03-17 13:26:04 · 1682 阅读 · 0 评论 -
python数据结构与算法 9 中缀后前缀、后缀的转换思路
中缀到前缀和后缀的转换So far, we have used adhoc methods to convert between infix expressions and the equivalentprefix and postfix expression notations. As you might expect, there arealgorithmic ways to perf翻译 2014-03-16 09:21:00 · 3434 阅读 · 1 评论 -
python数据结构与算法 8栈的应用之中缀前缀后缀
python算法与数据结构,栈的应用,前缀后缀中缀的概念,下一节讲到互相转换。翻译 2014-03-16 08:06:10 · 1916 阅读 · 1 评论 -
Problem Solving with algorithms and data structures using Python 翻译计划
作为学习python中读得最完整的一本书,而市面上确实没有中文版,用python讲数据结构和算法的书,所以打算逐步翻过来。主要目的是实现一次精读。用一段英文一段中文的方式。插图只好复制过来。如果涉及版本的问题就要停止。原创 2014-03-14 10:36:04 · 5585 阅读 · 2 评论 -
python数据结构与算法 20 递归和递归三定律
递归本章目标理解很多复杂问题,如果不用递归就很难解决,用递归也许非常简单 学会怎样进行递归编程 理解并应用递归三定律 理解递归也是一种迭代 建立一个问题的递归方法 理解递归在计算机系统内是如何进行的。什么是递归?递归是解决问题的一种方法,它把问题拆解得越来越小,直到变得非常容易,一般情况下,递归过程要包括一个自我访问的函数。与表面看起来似乎不一样,其实递归允许我们写出非常简翻译 2014-03-24 17:13:56 · 3630 阅读 · 3 评论 -
python数据结构与算法 36 树的基本概念
树学习目标理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列树的例子前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树。树在计算机科学中应用广泛,象操作系统、图形学、数据库系统、网络等都要用到树。树和他们在自然界中的表哥——植物树——非常相似,树也有根,有分枝,有叶子翻译 2014-05-06 16:01:41 · 1991 阅读 · 0 评论