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

简介:

本节书摘来自异步社区《Python算法教程》一书中的第1章,第1.1节,作者[挪威]Magnus Lie Hetland(赫特兰), 凌杰 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 引言

1.提出问题。

2.思考真正困难所在。

3.提出解决方案。

——摘自《The Feynman Algorithm》,Murray Gell-Mann著

让我们先来考虑一下下面这个问题:我们想要访遍瑞典境内所有的城市、小镇和村庄,然后再返回出发地点。显然,这段旅程肯定要耗费掉不少时间(毕竟我们要访问24 978个地方),因而我们希望能最小化该旅行路线。也就是说,我们既要能按计划逐个参观这些地方,又要尽可能地走出一条最短路线来。作为一个程序员,我们当然不屑于用手工方式来设计该路线,显然会更倾向于用写代码的方式来完成相关计划。然而,这似乎是一件不可能完成的任务。的确,想要写出一个针对少量城镇的简单程序并不难,但如果想要进一步用它来解决实际问题,相关的改进就会变得极其困难。这是为什么呢?

其实,早在2004年就已经有一个五人的研究团队发现了这个被称为瑞典之旅的问题,之后陆续有多个别的研究团队也都试图解决过这个问题,但是都失败了。该五人团队采用了一款带有智能优化技术的、能模拟交易技巧的软件,并将其运行在一组由96台机器(Xeon 2.6GHz)组成的工作站集群上。结果,该软件从2003年3月一直运行到2004年5月。最终不得不在打印出该问题的最佳解决方案之前被中止运行。因为综合各方面的因素,他们估计程序所需要的总CPU时间竟然长达85年!

下面再来思考一个类似的问题:我们想要在中国西部的喀什市到东海岸的宁波市之间找出一条最短路线。目前,中国境内有3 583 715千米长的公路和77 834千米长的铁路,之间有着数以百万计的路口可供我们考虑,其中可供选择的路线千千万万,难以估算。这个问题似乎与前一个问题是密切相关的,都是希望通过GPS导航和在线地图服务找出最短路线的规划问题,并且不能有太明显的滞后现象。也就是说,只要向您最爱的地图服务程序输入这两个城市,您就应该能在短时间内得到它们之间的最短路线。这又应该怎么做呢?

关于这些问题,读者将来都可以在本书中找到相关进一步的讨论。例如,第一个问题其实叫作旅行商问题(traveling salesman,或推销员问题(salesrep)),这将是本书第11章所要涵盖的内容。而所谓的最短路径问题(shortest path),则是第9章中所要介绍的内容。但我们更希望读者能从中学会如何深入分析问题的困难所在,并且掌握那些已被承认的、高效的知名解决方案。更为重要的是,我们将在本书中传授一系列常用的算法处理技术,及一些与计算机运算相关的问题,以便帮助读者熟练掌握书中所介绍的技术和算法,以及所演示的针对困难问题而提出的最接近期望值的解决方案。在这一章中,我们将对本书的主要内容做简单介绍——我们可以期望什么,我们应该期望什么。另外,我们还会列举本书各章节所要介绍的具体内容,以便读者可以直接跳到自己想阅读的内容附近。

1.1 这是一本怎么样的书

简而言之,这是一本为Python程序员解决算法问题的书。正如书上所说,它的内容涵盖相关的面向对象模式和一些常见问题的处理方式——也就是相关的解决方案。对于一个算法设计者,我们需要的不是简单地实现或执行一些现有算法的能力。相反,我们期望能拿出一个新算法——一个能解决一般性问题的、前人没有提过的全新解决方案。在本书中,我们要学习的就是此类解决方案的设计原则。

但这又不是一本传统意义上的算法书。毕竟,大部分这类题材的权威书籍(例如Knuth那部经典著作,或是由Cormen等人合著的那本标准教科书)都属于理论研究型的,显得有些过于严肃,尽管其中也不乏一些侧重于可读性的作品(例如Kleinberg与Tardos合写的书就是其中之一)。当然,我们在这里并不是要取代这些优秀的作品,而只是希望能在此基础上做一些补充。我希望利用自己多年的算法教学经验,尽可能清楚地为读者诠释算法的工作方式,以及一些需要共同遵守的基本原则。对于一个程序员来说,这种程度的诠释可能就已经足够了,读者需要有更多的机会去理解为什么相关的算法是正确的、如何将这些算法运用到他们所面对的新问题中去。但这就需要去阅读一些更形而上的、百科全书式的教科书。我希望这本书能为读者打下一定的基础,这将有助于他们理解相关的定理以及其相应的证明。

请注意:

这本书和其他算法书之间的一个区别是,我采用了谈话式的风格。虽然我希望这至少能吸引一些我的读者,但这可能不是您喜欢的风格。我们对此深感抱歉,但现在您已经至少被提醒了。

除此之外,市面上还有另一种算法类书籍。它们通常以“(数据结构与)算法(blank版)”为题,这里的blank通常为作者本人所使用的编程语言。有不少这样的书(而且似乎都是以blank=Java的情况为主),但其关注点多集中在与基本数据结构有关的东西上,以至于忽略了某些更为实质性的内容。如果说这是某一门数据结构基础课程的教科书,或许还可以理解,但对于Python程序员来说,学习单向或双向链表并不是一件能让所有人兴致勃勃的事情(尽管我们在下一章中还是会提到一些)。即便是哈希这样重要的技术,我们也可以通过Python中的字典类型免费获得相应的哈希表,完全不需要再去考虑重新实现它们。恰恰相反,我将注意力集中在更高级的一些算法。但这样一来,许多重要的概念在Python语言本身或标准库对相关算法(如查找、搜索、哈希等)的“黑盒”化实现中被淡化了。为此,我们在文中加入了一些特定的“黑盒子”专栏,以做补充。

当然,本书与那些“Java/C/C++/C#”算法流派还有一个显著的区别,即这里的blank为Python。这使得本书更接近那些与语言无关的算法书(例如Knuth、Cormon等人以及Kleinberg与Tardos的作品),这些书常常使用伪代码来说明问题。这实际上是一种侧重于可读性的伪编程语言,因而它不具备执行能力。而可读性正好是Python最显著的特点之一,因此它或多或少可以被视为是一种具有执行能力的伪代码。就算我们从没用过Python,也能看懂绝大部分Python程序。总之,这本书中代码示例都是高度可读的——我们不需要成为Python方面专家,也能轻松读懂这些示例(尽管有时候还是需要读者去查阅一些与内置函数有关的资料)。当然,您也可以把这些示例当作伪代码来理解。综上所述……

1.1.1 本书将主要涉及以下内容

  • 算法分析,主要侧重于渐近运行时间分析。
  • 算法设计的基本原则。
  • 如何用Python描述那些常用的数据结构。
  • 如何用Python实现那些知名算法。

1.1.2 本书还将简单或部分涉及以下内容

  • Python中直接可用的算法,它们通常是语言本身或其标准库的一部分。
  • 纯思想性及形而上的内容(尽管本书会对它们做一些证明,并提供相关的证明示例)。

1.1.3 本书不会涉足以下领域

  • 与数值计算或数学理论有关的算法(只有第2章中涉及了一些浮点运算)。
  • 并行算法与多核编程。

正如大家所知,“用Python实现”只是整个拼图的一部分。我们所希望的是,读者能掌握其中的设计原则与理论基础,以便能设计出属于自己的算法与数据结构。

相关文章
|
8天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
8天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
24天前
|
监控 算法 安全
深度洞察内网监控电脑:基于Python的流量分析算法
在当今数字化环境中,内网监控电脑作为“守城卫士”,通过流量分析算法确保内网安全、稳定运行。基于Python的流量分析算法,利用`scapy`等工具捕获和解析数据包,提取关键信息,区分正常与异常流量。结合机器学习和可视化技术,进一步提升内网监控的精准性和效率,助力企业防范潜在威胁,保障业务顺畅。本文深入探讨了Python在内网监控中的应用,展示了其实战代码及未来发展方向。
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
128 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
19天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
184 12
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
2月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
131 66
|
4天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
26 10
|
22天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
1月前
|
存储 监控 算法
员工电脑监控屏幕场景下 Python 哈希表算法的探索
在数字化办公时代,员工电脑监控屏幕是保障信息安全和提升效率的重要手段。本文探讨哈希表算法在该场景中的应用,通过Python代码例程展示如何使用哈希表存储和查询员工操作记录,并结合数据库实现数据持久化,助力企业打造高效、安全的办公环境。哈希表在快速检索员工信息、优化系统性能方面发挥关键作用,为企业管理提供有力支持。
45 20
|
26天前
|
存储 人工智能 算法
深度解密:员工飞单需要什么证据之Python算法洞察
员工飞单是企业运营中的隐性风险,严重侵蚀公司利润。为应对这一问题,精准搜集证据至关重要。本文探讨如何利用Python编程语言及其数据结构和算法,高效取证。通过创建Transaction类存储交易数据,使用列表管理订单信息,结合排序算法和正则表达式分析交易时间和聊天记录,帮助企业识别潜在的飞单行为。Python的强大功能使得从交易流水和沟通记录中提取关键证据变得更加系统化和高效,为企业维权提供有力支持。

热门文章

最新文章