有哪些用 Python 语言讲算法和算法 数据结构 语言的书

学习数据结构与算法,成为出色的程序员 - 文章 - 伯乐在线
& 学习数据结构与算法,成为出色的程序员
“相较于其它方式,我一直热衷于推崇围绕数据设计代码,我想这也是Git能够如此成功的一大原因[…]在我看来,区别程序员优劣的一大标准就在于他是否认为自己设计的代码还是数据结构更为重要。” —— Linus Torvalds
“优秀的数据结构与简陋的代码组合远比反之的组合更好。” —— Eric S. Raymond, The Cathedral and The Bazaar
学习数据结构与算法分析会让您成为一名出色的程序员。
数据结构与算法分析是一种解决问题的思维模式。 在您的个人知识库中,数据结构与算法分析的相关知识储备越多,您将越多具备应对并解决各类繁杂问题的能力。掌握了这种思维模式,您还将有能力针对新问题提出更多以前想不到的漂亮的解决方案。
您将更深入地了解,计算机如何完成各项操作。无论您是否是直接使用给定的算法,它都影响着您作出的各种技术决定。从计算机操作系统的内存分配到RDBMS的内在工作机制,以及网络协议如何实现将数据从地球的一个角落发送至另一个角落,这些大大小小的工作的完成,都离不开基础的数据结构与算法,理解并掌握它将会让您更了解计算机的运作机理。
对算法广泛深入的学习能为您储备解决方案来应对大体系的问题。之前建模困难时遇到的问题如今通常都能融合进经典的数据结构中得到很好地解决。即使是最基础的数据结构,只要对它进行足够深入的钻研,您将会发现在每天的编程任务中都能经常用到这些知识。
有了这种思维模式,在遇到磨棱两可的问题时,您将能够想出新奇的解决方案。即使最初并没有打算用数据结构与算法解决相应问题的情况,当真正用它们解决这些问题时您会发现它们将非常有用。要意识到这一点,您至少要对数据结构与算法分析的基础知识有深入直观的认识。
理论认识就讲到这里,让我们一起看看下面几个例子。
最短路径问题
我们想要开发一个软件来计算从一个国际机场出发到另一个国际机场的最短距离。假设我们受限于以下路线:
Dijkstra 算法
从这张画出机场各自之间的距离以及目的地的图中,我们如何才能找到最短距离,比方说从赫尔辛基到伦敦?是能让我们在最短的时间得到正确答案的适用算法。
在所有可能的解法中,如果您曾经遇到过这类问题,知道可以用Dijkstra算法求解,您大可不必从零开始实现它,只需知道该算法的代码库能帮助您解决相关的实现问题。
如果你深入到该算法的实现中,您将深入理解一项著名的重要图论算法。您会发现实际上该算法比较消耗资源,因此名为的扩展经常用于代替该算法。这个算法应用广泛,从机器人寻路的功能实现到TCP数据包路由,以及GPS寻径问题都能应用到这个算法。
先后排序问题
您想要在开放式在线课程(MOOC,Massive Open Online Courses)平台上(如Udemy或Khan学院)学习某课程,有些课程之间彼此依赖。例如,用户学习牛顿力学(Newtonian Mechanics)课程前必须先修微积分(Calculus)课程,课程之间可以有多种依赖关系。用YAML表述举例如下:
# Mapping from course name to requirements
# If you're a physcist or a mathematicisn and you're reading this, sincere
# apologies for the completely made-up dependency tree :)
arithmetic:
[arithmetic]
trigonometry:
[algebra, trigonometry]
mechanics:
[calculus, trigonometry]
atomic_physics:
[mechanics, calculus]
electromagnetism:
[calculus, atomic_physics]
radioactivity:
[algebra, atomic_physics]
astrophysics:
[radioactivity, calculus]
quantumn_mechanics: [atomic_physics, radioactivity, calculus]
12345678910111213141516
# Mapping from course name to requirements## If you're a physcist or a mathematicisn and you're reading this, sincere# apologies for the completely made-up dependency tree :)courses:&&arithmetic:&&&&&&&& []&&algebra:&&&&&&&&&&&&[arithmetic]&&trigonometry:&&&&&& [algebra]&&calculus:&&&&&&&&&& [algebra, trigonometry]&&geometry:&&&&&&&&&& [algebra]&&mechanics:&&&&&&&&&&[calculus, trigonometry]&&atomic_physics:&&&& [mechanics, calculus]&&electromagnetism:&& [calculus, atomic_physics]&&radioactivity:&&&&&&[algebra, atomic_physics]&&astrophysics:&&&&&& [radioactivity, calculus]&&quantumn_mechanics: [atomic_physics, radioactivity, calculus]
鉴于以上这些依赖关系,作为一名用户,我希望系统能帮我列出必修课列表,让我在之后可以选择任意一门课程学习。如果我选择了微积分(calculus)课程,我希望系统能返回以下列表:
arithmetic -& algebra -& trigonometry -& calculus
这里有两个潜在的重要约束条件:
返回的必修课列表中,每门课都与下一门课存在依赖关系
我们不希望列表中有任何重复课程
这是解决数据间依赖关系的例子,解决该问题的排序算法称作拓扑排序算法(tsort,topological sort)。它适用于解决上述我们用YAML列出的依赖关系图的情况,以下是在图中显示的相关结果(其中箭头代表需要先修的课程):
拓扑排序算法
拓扑排序算法的实现就是从如上所示的图中找到满足各层次要求的依赖关系。因此如果我们只列出包含radioactivity和与它有依赖关系的子图,运行tsort排序,会得到如下的顺序表:
arithmetic
trigonometry
atomic_physics
radioactivity
arithmeticalgebratrigonometrycalculusmechanicsatomic_physicsradioactivity
这符合我们上面描述的需求,用户只需选出radioactivity,就能得到在此之前所有必修课程的有序列表。
在运用该排序算法之前,我们甚至不需要深入了解算法的实现细节。一般来说,你可能选择的各种编程语言在其标准库中都会有相应的算法实现。即使最坏的情况,Unix也会默认安装tsort程序,运行man tsort 来了解该程序。
其它拓扑排序适用场合
类似make的工具 可以让您声明任务之间的依赖关系,这里拓扑排序算法将从底层实现具有依赖关系的任务顺序执行的功能。
具有require指令的编程语言适用于要运行当前文件需先运行另一个文件的情况。这里拓扑排序用于识别文件运行顺序以保证每个文件只加载一次,且满足所有文件间的依赖关系要求。
带有甘特图的项目管理工具。甘特图能直观列出给定任务的所有依赖关系,在这些依赖关系之上能提供给用户任务完成的预估时间。我不常用到甘特图,但这些绘制甘特图的工具很可能会用到拓扑排序算法。
霍夫曼编码实现数据压缩
(Huffman coding)是一种用于无损数据压缩的编码算法。它的工作原理是先分析要压缩的数据,再为每个字符创建一个二进制编码。字符出现的越频繁,编码赋值越小。因此在一个数据集中e可能会编码为111,而x会编码为10010。创建了这种编码模式,就可以串联无定界符,也能正确地进行解码。
在gzip中使用的DEFLATE算法就结合了霍夫曼编码与LZ77一同用于实现数据压缩功能。gzip应用领域很广,特别适用于文件压缩(以.gz为扩展名的文件)以及用于数据传输中的http请求与应答。
学会实现并使用霍夫曼编码有如下益处:
您会理解为什么较大的压缩文件会获得较好的整体压缩效果(如压缩的越多,压缩率也越高)。这也是SPDY协议得以推崇的原因之一:在复杂的HTTP请求/响应过程数据有更好的压缩效果。
您会了解数据传输过程中如果想要压缩JavaScript/CSS文件,运行压缩软件是完全没有意义的。PNG文件也是类似,因为它们已经使用DEFLATE算法完成了压缩。
如果您试图强行破译加密的信息,您可能会发现由于重复数据压缩质量更好,密文给定位的数据压缩率将帮助您确定相关的(block cipher mode of operation)。
下一步选择学习什么是困难的
作为一名程序员应当做好持续学习的准备。为了成为一名web开发人员,您需要了解标记语言以及Ruby/Python、正则表达式、SQL、JavaScript等高级编程语言,还需要了解HTTP的工作原理,如何运行UNIX终端以及面向对象的编程艺术。您很难有效地预览到未来的职业全景,因此选择下一步要学习哪些知识是困难的。
我没有快速学习的能力,因此我不得不在时间花费上非常谨慎。我希望尽可能地学习到有持久生命力的技能,即不会在几年内就过时的技术。这意味着我也会犹豫这周是要学习JavaScript框架还是那些新的编程语言。
只要占主导地位的计算模型体系不变,我们如今使用的数据结构与算法在未来也必定会以另外的形式继续适用。您可以放心地将时间投入到深入掌握数据结构与算法知识中,它们将会成为您作为一名程序员的职业生涯中一笔长期巨大的财富。
可能感兴趣的话题
数据结构比算法重要
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线第一章:数据结构和算法 - [ Python3 CookBook中文版 ] - 看云
Python提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些数据结构式很简单的。但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题。因此,这一章的目的就是讨论这些比较常见的问题和算法。另外,我们也会给出在集合模块collections当中操作这些数据结构的方法。
页面正在加载中店铺平均得分: 分,再接再厉!!!【查看全部评价】
本店铺共有 88 笔投诉记录,投诉率
8% ,高于平均投诉率
【查看详细】无法联系卖家 5
6%服务态度问题 1 1%商品问题 20 23%发货问题 76 86%退款问题 14 16%其他 3 3%已解决 88 100%
店主称呼:吴女士&&
联系方式:&
地址:北京 北京市 朝阳区
北京市朝阳区定福庄
促销广告:阅兵期间 无法正常发货
6号才能发货,望谨慎购买!!
新闻传播(496)
成功励志(1122)
家庭育儿(84)
生活时尚(233)
旅游地理(332)
体育保健(188)
收藏鉴赏(11)
汽车与交通运输(614)
法律(1318)
医学卫生(1095)
自然科学(2722)
社会科学(464)
政治军事(346)
宗教哲学(158)
教育考试(2028)
工具书(79)
活动图书(299)
计算机与网络(4685)
管理(3849)
经济金融(3187)
科技工程(5783)
语言学习(3504)
艺术(1823)
文学小说(1369)
文化历史(302)
建筑(1144)
本所有的书籍均为正版,新书
所有的亲们放心选购
买到就是赚到!!现在都是促销时期
大家 记得买买买!!
本书店所有的书籍都是正版新书
大家可以放心选购
本店铺 只赚好评 不赚钱 目前都是促销价格 抢到就是赚到
第一步:选择图书放入购物车。
第二步:结算、填写收货地址。
第三步:担保付款或银行汇款。
第四步:卖家发货。
第五步:确认收货、评价。
正在处理购买信息,请稍候……
我要买:本
** 关于库存、售价、配送费等具体信息建议直接联系店主咨询。
联系店主:
本店已缴纳保证金,请放心购买!
买家对店铺的满意度评价:
发货慢就不说什么了,书居然是盗版的,别的书店也就算了,新华书店也这样,我只能呵呵了
[ 20:00:43]
田**定西市
买家很懒,没有填写任何评论!
[ 09:11:22]
黄**东莞市
书是新的,快递也很快!
[ 20:18:05]
邓**东莞市
买家很懒,没有填写任何评论!
[ 10:45:13]
陈**泰州市
买家很懒,没有填写任何评论!
[ 18:35:14]
李**郑州市
Copyright &copy 书山有路 All Rights Reserved有没有用Python讲解数据结构和算法的书或者公开课_百度知道
有没有用Python讲解数据结构和算法的书或者公开课
提问者采纳
htmlhttps。如果解决了您的问题请采纳.com/course/cs215都是python相关的算法或者数据结构讲解.udacity:
来自团队:
其他类似问题
为您推荐:
python的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言 数据结构 算法 的文章

 

随机推荐