《Python算法教程》——1.7 练习题

1.7 练习题

和上面一样,这一节也是我们今后将会反复看到的固定章节。读者可在本书后面(附录D)找到关于这些练习题的提示。这些练习题是为了配合正文内容而设定的,它们主要针对的是那些正文中没有明确讨论,但又可能会引起读者兴趣或值得读者深思的问题。不过,如果您真的想提升自己在算法设计方面的技能的话,或许还需要多多参与解决本书以外的各种编程难题。如参加大量的编程竞赛活动(通过网页搜索应该就能找到许多),里面有许多问题都是值得一试的。除此之外,许多大型软件公司也会在线上不时发布一些用于资格认证的试题,您也可以试试看。

由于这篇引言所涵盖的内容不多,所以我们在这里只提一对问题——让您热热身:

1-1. 请思考下面这句话:“随着机器的速度越来越快,内存越来越便宜,算法的重要性会越来越低。”您觉得这话说得对吗?为什么?

1-2. 请找出一种方法,使我们能检查出两个字符串之间是否存在着字符变位(比如“debit card”与“bad credit”)。您认为您所提出的解决方案性能弹性如何?您能想出一个性能弹性非常糟糕的、朴素的解决方案吗?

时间: 2024-07-30 16:56:24

《Python算法教程》——1.7 练习题的相关文章

《Python算法教程》——2.7 练习题

2.7 练习题 2-1. 当我们用Python中的list构建一个多维数组时,通常需要使用循环来完成(或某种与list推导式等效的技术),为什么不能用表达式[[0]10]10来创建一个10×10的数组呢?这样做会有什么问题吗? 2-2. 让我们来做个假设(也许会有点不切实际):如果我们允许在分配内存时出现未初始化的情况(也就是说,这块内存中还保有上一次被使用时留下的"垃圾数据"),并且分配内存也只需要常数时间.这时如果您想创建一个含有n 个整数的数组,并且希望跟踪其每一项--看看它是处

《Python算法教程》——2.4 请提防黑盒子

2.4 请提防黑盒子 虽然算法工作本身通常都相当抽象,但我们在实现自己的算法时还是要留些心眼.因为在编程时,我们必须依赖一些组件,而这些组件通常都不是我们自己写的,所以依赖于这些"黑盒子",而不知道其任何内容对我们来说多少是一种风险.在这本书中,您将会看到一系列被标识为"黑盒子"的侧边栏.在这些侧边栏中,我们将会简略讨论Python某些部分中的各种可用的算法.这里既有语言内置的,也有属于标准库的.我们会将它们都包括进来,因为这些算法是非常有意义的,它们能告诉我们Py

《Python算法教程》——导读

前 言 这本书结合了我的三大爱好:算法.Python编程及诠释事物.对我来说,这三项都是美学问题--找出让事情尽善尽美的方法.这就需要我们首先去发现相关事物的精华所在,然后精雕细琢,使其发光发亮,或至少比原先要闪亮一些.当然,由于某些材料表面的杂质太多,加工的结果可能会有些不尽人意.但幸运的是,本书中所涉及的内容大多都是现成品,因为我所写的都是一些久负盛名的算法及其论证,采用的也是最受欢迎的编程语言之一.至于在诠释事物方面,我一直在努力试着让事情变得尽可能显而易见一些.但即便如此,我也肯定还有许

《Python算法教程》——2.6 如果您感兴趣

2.6 如果您感兴趣 如果想了解有关图灵机以及计算领域方面更多基础知识的话,或许您会喜欢Charles Petzold写的那本<The Annotated Turing>.尽管该书在结构上依然只是Turing原始论文的一个注释版本,但其大部分内容实际上是Petzold本人对那些主要概念所做的诠释说明,里面含有大量的实例.总之,他对这个话题做了一个非常好的阐述.至于在计算领域的基础教科书方面,您可以看看Lewis与Papadimitriou合作的<Elements of the Theor

《Python算法教程》——2.2 渐近记法

2.2 渐近记法 还记得第1章中那个拿append与insert做对比的例子吗?似乎是出于某种原因,当我们选择将相关元素项添加到list尾端时,其在应对list大小变化时的性能弹性要比在其首端插入要好一些(关于list,读者稍后可以参考黑盒子专栏中的相关内容).而且,这些内置操作通常还都是用C编写的.如果我们花点时间用纯Python重新实现一下list.append方法,(粗略)估计新版本会比原版本慢50倍左右.并且我们还可以做进一步估计,相较于这个较慢的.纯Python实现的append方法在

《Python算法教程》——1.4 本书主要内容

1.4 本书主要内容 本书大体结构如下. 第1章 引言:这章您目前已经读了大半了,主要是对本书内容做一个预览. 第2章 基础知识:这章主要涉及一些基本的概念与术语,以及一些基本的数学运算.除此之外,我们还会介绍一些比以往任何时候都要模糊的计算公式,并试图用它们来获取正确的结果.这就是所谓的渐近记法. 第3章 计数初步:这章会涉及更多数学运算--但这些运算真的很有趣,我保证!主要是一些用于算法运行时间分析的基本组合运算,以及对递归与递推关系的概念性介绍. 第4章 归纳.递归及归简:标题中的这三个词

《Python算法教程》——1.2 为什么要读这本书

1.2 为什么要读这本书 当我们在工作中使用算法时,通常都是希望能更有效地解决问题.使程序运行得更快,并且让解决方案变得更为简短.但实际情况如何呢?我们获得所需要的效率.速度和简洁性了吗?为什么人们在使用Python这种语言时依然要在乎这些事呢?选择这种语言对于追求高速度的人来说是一个好的开端吗?为什么不选择C或Java这样的语言呢? 首先,可能是因为Python语言本身很讨人喜欢,以至于人们不想换别的语言,或者他们目前也没有更好的选择.但最为重要的可能还是第二点,即在这里,算法设计者们首先要担

《Python算法教程》——第1章 引言 1.1 这是一本怎么样的书

第1章 引言 1.提出问题. 2.思考真正困难所在. 3.提出解决方案. --摘自<The Feynman Algorithm>,Murray Gell-Mann著 让我们先来考虑一下下面这个问题:我们想要访遍瑞典境内所有的城市.小镇和村庄,然后再返回出发地点.显然,这段旅程肯定要耗费掉不少时间(毕竟我们要访问24 978个地方),因而我们希望能最小化该旅行路线.也就是说,我们既要能按计划逐个参观这些地方,又要尽可能地走出一条最短路线来.作为一个程序员,我们当然不屑于用手工方式来设计该路线,显

《Python算法教程》——第2章 基础知识 2.1 计算领域中一些核心理念

第2章 基础知识 Tracey:我不知道您在哪里. Zoe:隐身术就是这样--您应该听说过的. Tracey:我可不认为这属于基础知识. --选自<Firefly>第14集台词 在我们将注意力转向本书主体内容,也就是那些数学技术.算法设计原则及经典算法之前,还必须先了解一些最基本的技术与原则.因为当您阅读到后续章节时,至少应该非常清楚类似"无反向环路的加权有向图"以及"Θ(n lg n)运行时间"这些词句所表达的具体含义.同时,我们也理应要对Python