/aha-algorithms-py

《啊哈!算法》中所述算法的Python实现,更新中(暂时断更),仅供学习。

Primary LanguagePythonCreative Commons Zero v1.0 UniversalCC0-1.0

aha-algorithms-py

简介

《啊哈!算法》中所述算法的Python实现。

个人学习作品,仅供参考,持续不定期更新,随时弃更。

2019-03-18消息:由于这本书在学校图书馆的所有副本被借走,加上我最近几个月要忙于写论文,因此本仓库断更。

由于**主要还是来源于原书,故采用CC0 1.0 Universal协议。不过,虽然如此,还是希望有人在使用的时候稍微提一下我做的微小的工作,谢谢大家了。

小记

我本科就读的专业是电子商务,但是教课上有电商之名而无电商之实,在计算机方面必修的除了一门水课——计算机基础外,仅仅有HTML+CSS+JS,居然还在教Flash的网络多媒体开发,以及不如说根本不知道在讲什么的Java了。至于算法,更是无从谈起。这和我当时填报志愿的时候想象的简直有天壤之别。

毕业设计选题,我决定对于自己来说,做一个东西比分析一堆东西更容易,于是拟定了一些选题,挑了导师。到了讨论选题的那天,其他人的选题简直神乎其神——有智能交通,有区块链,甚至有“可以自主学习的AI,能够完成除繁衍外的所有人类活动”。而且导师直接就说了,以在国内核心期刊乃至国际顶级期刊上发论文为目标,要求我们写学术方面的东西。

之后,选题的讨论在线上进行。但是,那种神乎其神的讨论还在继续,我不得不盯着一堆我从来没有见到过的术语发呆。后来想了想,管理科学与工程系中还有一个专业——信息管理与信息系统,这个专业可是学计算机方面的东西比较多的,像数据结构、操作系统什么的都有,做这方面的选题当然绰绰有余。但是,我也不想服输,就从零开始学相关的东西吧。

《啊哈!算法》这本书是我在学校图书馆里面找到的,我主要还是当入门的东西来看的。里面的代码示例是C语言的。虽然我会C语言,但是考虑到我需要好好学习,就给自己一个任务:用Python来实现它们。

这就是本仓库的由来。

处理方式

由于个人习惯不同以及数据类型、语法不同,有些地方采用了与原来的算法不同的处理方式,如下:

  • 书中的数组标号从1开始,0不使用;考虑到大多数人的习惯,本仓库的代码对于类似情况,标号从0开始。
  • 第一章中的桶排序,由于Python中列表不是有限的,故取一组数中的最大值作为“桶”的个数。
  • 1.1~1.3中的排序,均使用函数封装起来,输入值有列表和排序方式(1_2_2还有用作排序的数字位置),输出另一个列表。
  • 2.2~2.3中使用对象进行堆栈与队列的简单封装。
  • 3.2、4.2节中,对于地图的输入,最初只输入行,不输入列,然后输入每行的地图内容。
  • 4.2节中,输入地图时,每个格之间不添加空格。最后输入起点和终点的坐标时,分开输入。