当前位置:
首页 > 计算机 > 程序设计 > Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载

Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载

书名:Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载

推荐语:经典计算机科学教材,用Python描述数据结构与算法的开山之作,编程入门,Python经典教程,算法导论,数据结构与算法分析,算法竞赛入门经典

作者:(美)布拉德利·米勒(BradleyN.Miller),戴维·拉努姆(DavidL.Ranum),吕能,刁寿钧等译

出版社:人民邮电出版社

出版时间:2019-09-01

书籍编号:30562035

ISBN:9787115517210

正文语种:中文

字数:384030

版次:1

所属分类:计算机-程序设计

全书内容:

Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载









前言



既然你已经开始阅读本书,那么必定对计算机科学感兴趣。你可能也对Python这门编程语言感兴趣,并且已经通过之前的课程或自学有了一些编程经验。不论是何种情况,你肯定都希望学习更多知识。


本书将介绍计算机科学,也会介绍Python。然而,书中的内容并不仅仅局限于这两个方面。学习数据结构与算法对理解计算机科学的本质非常关键。


学习计算机科学与掌握其他高难度学科没什么不同。成功的唯一途径便是循序渐进地学习其中的核心思想。刚开始接触计算机科学的人,需要多多练习来加深理解,从而为学习更复杂的内容做好准备。此外,初学者需要建立起自信心。


本书用作数据结构与算法的入门课的教材。数据结构与算法通常是计算机科学专业的第二门课程,比第一门课程更深入。但是本书的读者对象仍然是初学者,很可能还在第一门课程所教的基本思想和方法中挣扎,但已经准备好进一步探索这一领域并且进一步练习如何解决问题。


如前所述,本书将介绍计算机科学。它既会介绍抽象数据类型及数据结构,也会介绍如何编写算法和解决问题。你会学习一系列的数据结构,并且解决各种经典问题。随着学习的深入,你将反复应用在各章中掌握的工具与技术。



许多学生在学到这个阶段时会发现,计算机科学除了编程以外还有很多内容。数据结构与算法可以独立于编程来学习和理解。


本书假定学生已经学过计算机科学的入门课程,但入门课程不一定是用Python讲解的。他们理解基本的结构体,比如分支、迭代以及函数定义,也接触过面向对象编程,并且能够创建和使用简单的类。同时,学生也能够理解Python的基础数据结构,比如序列(列表和字符串)以及字典。


本书有三大特点:



  • 通过简单易读的文字而不引入太多编程语法,重点关注如何解决问题,从而向学生介绍基本的数据结构与算法;
  • 较早介绍基于大O记法的算法分析,并且通篇运用;
  • 使用Python讲解,以促使初学者能够使用和掌握数据结构与算法。

学生将首先学习线性数据结构,包括栈、队列、双端队列以及列表。我们用Python列表以及链表实现这些数据结构。然后学习与树有关的非线性数据结构,了解连接节点和引用结构(链表)等一系列技术。最后,学生将通过运用链式结构、链表以及Python字典的实现,学习图的相关知识。对于每一种结构,本书都尽力在使用Python提供的內建数据类型的同时展现众多的实现技巧。这种讲法在向学生揭示各种主要实现方法的同时,也强调Python的易用性。


Python是一门非常适合于讲解算法的语言,语法干净简洁,用户环境直观,基本的数据类型十分强大和易用。其交互性在不需要额外编写驱动函数的情况下为测试数据结构单元提供了直观环境。而且,Python为算法提供了教科书式的表示法,基本上不需要再用伪代码。这一特性有助于通过数据结构与算法来描述众多与之有关、相当有趣的现代问题。


我们相信,对于初学者来说,投入时间学习与算法和数据结构相关的基本思想是非常有益的。我们也相信,Python是一门教授初学者入门的优秀语言。其他许多语言要求学生学习非常高级的编程概念,这会阻碍他们掌握真正需要的基础知识,从而可能导致失败,而这样的失败并不是计算机科学本身造成的,而是由于所使用的语言不当。我们的目标是提供一本教科书,量体裁衣般地聚焦于他们需要掌握的内容,以他们能理解的方式编写,创造和发展一个有助于他们成功的环境。



本书紧紧地围绕着运用经典数据结构和技术来解决问题。下面的组织结构图展示了充分利用本书的不同方式。


Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载


第1章做一些背景知识的准备,我们来复习一下计算机科学、问题解决、面向对象编程以及Python。基础扎实的学生可以跳过第1章,直接学习第2章。不过,正所谓温故而知新,适当的复习和回顾必然是值得的。


第2章介绍算法分析的内在思想,重点讲解大O记法,还将分析本书一直使用的重要Python数据结构。这可以帮助学生理解如何权衡各种抽象数据类型的不同实现。第2章也包含了在运行时使用的Python原生类型的实验测量例子。


第3~7章全面介绍在经典计算机科学问题中出现的数据结构与算法。尽管在阅读顺序上并无严格要求,但是许多话题之间都存在一定的依赖关系,所以应该按照本书的顺序学习。比如,第3章介绍栈,第4章利用栈解释递归,第5章利用递归实现二分搜索。


第8章是选学内容,包含彼此独立的几节。每一节都与之前的某一章有关。正如前面的组织结构图所示,你既可以在学习完第7章以后再一起学习第8章中的各节内容,也可以把它们与对应的那一章放在一起学习。例如,希望更早介绍数组的教师,可以在讲完第3章以后直接跳到8.2节。




  • 所有的代码都用Python 3.2写成。
  • 第1章介绍Python的集合以及异常处理。
  • 不再使用第三方绘图包。新版中的所有图形都通过原生的turtle模块绘制。
  • 新加的第2章着重讲解算法分析。此外,这一章还包括对全书出现的关键Python数据结构的分析。
  • 第3章新增了关于链表实现的一节。
  • 将“动态规划”一节移到了第4章的最后。
  • 更关注图递归算法,包括递归树绘制以及递归迷宫搜索程序。
  • 所有的数据结构源代码都被放在一个Python包中,方便学生在完成作业时使用。
  • 新版包含各章例子的完整源代码,从而避免了从各处复制代码的麻烦。
  • 第6章改进了二叉搜索树。
  • 第6章新增了关于平衡二叉树的一节。
  • 第8章介绍C风格的数组和数组管理。


在完成本书的过程中,我们得到了众多朋友的帮助。感谢我们的同事Steve Hubbard为本书的第1版提供了大量的反馈,并为新版提供了众多新素材。感谢各地的同事给我们发邮件指出第1版存在的错误,并且为新版内容提供意见。


感谢迪科拉市Java John\'s咖啡馆的朋友Mary和Bob,以及其他服务员,他们允许我俩在Brad休假期间成为店里的“常驻作者”。David在常驻咖啡馆写书的那几个月中竟然没有成为咖啡爱好者。对了,在一间店名带Java的咖啡馆里写一本Python的书,确实有点讽刺。


感谢Franklin, Beedle & Associates出版公司的各位员工,特别是Jim Leisy和Tom Sumner。与他们的合作非常愉快。最后,还要特别感谢我们两人的妻子Jane Miller和Brenda Ranum。她们的爱与支持使得本书终成现实。



扫描如下二维码,即可购买本书电子版。


Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载


 


布拉德利·米勒(Bradley N. Miller)


戴维·拉努姆(David L. Ranum)

>>> import math >>> math.sqrt(16) 4.0 >>>>>> print(\"Algorithms and Data Structures\") >>> Algorithms and Data Structures >>>>>> 2+3*4 14 >>> (2+3)*4 20 >>> 2**10 1024 >>> 6/3 2.0 >>> 7/3 2.3333333333333335 >>> 7//3 2 >>> 7%3 1 >>> 3/6 0.5 >>> 3//6 0 >>> 3%6 3 >>> 2**100 1267650600228229401496703205376 >>>>>> True True >>> False False >>> False or True True >>> not (False or True) False >>> True and True True>>> 5 == 10 False >>> 10 > 5 True >>> (5 >= 1) and (5 <= 10) True>>> theSum = 0 >>> theSum 0 >>> theSum = theSum + 1 >>> theSum 1 >>> theSum = True >>> theSum True

内建原子数据类型


我们首先复习原子数据类型。Python有两大內建数据类实现了整数类型和浮点数类型,相应的Python类就是intfloat。标准的数学运算符,即+-*/以及**(幂),可以和能够改变运算优先级的括号一起使用。其他非常有用的运算符包括取余(取模)运算符%,以及整除运算符//。注意,当两个整数相除时,其结果是一个浮点数,而整除运算符截去小数部分,只返回商的整数部分。


Python通过bool类实现对表达真值非常有用的布尔数据类型。布尔对象可能的状态值是True或者False,布尔运算符有andor以及not


布尔对象也被用作相等(==)、大于(>)等比较运算符的计算结果。此外,结合使用关系运算符与逻辑运算符可以表达复杂的逻辑问题。表1-1展示了关系运算符和逻辑运算符。


表1-1 关系运算符和逻辑运算符











































运算名 运算符 解释
小于 < 小于运算符
大于 > 大于运算符
小于或等于 <= 小于或等于运算符
大于或等于 >= 大于或等于运算符
等于 == 相等运算符
不等于 != 不等于运算符
逻辑与 and 两个运算数都为True时结果为True
逻辑或 or 某一个运算数为True时结果为True
逻辑非 not 对真值取反,False变为TrueTrue变为False

标识符在编程语言中被用作名字。Python中的标识符以字母或者下划线(_)开头,区分大小写,可以是任意长度。需要记住的一点是,采用能表达含义的名字是良好的编程习惯,这使程序代码更易阅读和理解。


当一个名字第一次出现在赋值语句的左边部分时,会创建对应的Python变量。赋值语句将名字与值关联起来。变量存的是指向数据的引用,而不是数据本身。来看看下面的代码。


赋值语句theSum = 0会创建变量theSum,并且令其保存指向数据对象0的引用(如图1-3所示)。Python会先计算赋值运算符右边的表达式,然后将指向该结果数据对象的引用赋给左边的变量名。在本例中,由于theSum当前指向的数据是整数类型,因此该变量类型为整型。如果数据的类型发生改变(如图1-4所示),正如上面的代码给theSum赋值True,那么变量的类型也会变成布尔类型。赋值语句改变了变量的引用,这体现了Python的动态特性。同样的变量可以指向许多不同类型的数据。


Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载


图1-3 变量指向数据对象的引用


Python数据结构与算法分析(第2版)pdf/doc/txt格式电子书下载


图1-4 赋值语句改变变量的引用

>>> [1,3,True,6.5] [1, 3, True, 6.5] >>> myList = [1,3,True,6.5] >>> myList [1, 3, True, 6.5]>>> myList = [0] * 6 >>> myList [0, 0, 0, 0, 0, 0]>>> myList = [1,2,3,4] >>> A = [myList]*3 >>> A [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] >>> myList[2] = 45 >>> A [[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]] >>>>>> myList [1024, 3, True, 6.5] >>> myList.append(False) >>> myList [1024, 3, True, 6.5, False] >>> myList.insert(2,4.5) >>> myList [1024, 3, 4.5, True, 6.5, False] >>> myList.pop() False >>> myList [1024, 3, 4.5, True, 6.5] >>> myList.pop(1) 3 >>> myList [1024, 4.5, True, 6.5] >>> myList.pop(2) True >>> m

....

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

本站仅展示书籍部分内容
如有任何咨询

请加微信10090337咨询

再显示