内容简介
《图解算法——使用Python》是一本综合讲述数据结构及其算法的入门书,力求简洁、清晰、严谨且易于学习和掌握,并没有追求大而全的数据结构和所有相关的算法,而是选择经典的算法来配合介绍常用的数据结构,包括数组、链表、堆栈、队列以及树和图等。
《图解算法——使用Python》为每个算法及其数据结构均提供了演算的详细图解,并为每个经典的算法都提供了Python语言编写的完整范例程序(包含完整的源代码)。每个范例程序都经过了测试和调试,可以直接在标准的Python解释器中运行,非常适合作为普及型的教科书或自学读物。
作者简介
吴灿铭,现任荣钦科技股份有限公司执行长,美国RochesterInstituteofTechnology计算机科学研究所毕业,长期从事信息教育及计算机图书写作的工作,计算机图书著作包括计算器概论、数据结构、办公室电子数据处理、互联网等相关题材,并监制过多套游戏以及教学软件的研发。目录
目录
第1章进入算法的世界1
1.1生活中到处都是算法2
1.1.1算法的定义3
1.1.2算法的条件4
1.1.3时间复杂度O(f(n))6
1.2常见算法简介7
1.2.1分治法8
1.2.2递归法9
1.2.3贪心法11
1.2.4动态规划法12
1.2.5迭代法13
1.2.6枚举法14
1.2.7回溯法15
【课后习题】18
第2章常用的数据结构19
2.1认识数据结构19
2.2数据结构的种类22
2.2.1数组23
2.2.2链表25
2.2.3堆栈26
2.2.4队列27
2.3树形结构28
2.3.1树的基本观念29
2.3.2二叉树30
2.4图形结构简介32
2.5哈希表34
【课后习题】35
第3章排序算法36
3.1认识排序37
3.2冒泡排序法38
3.3选择排序法40
3.4插入排序法42
3.5希尔排序法44
3.6合并排序法46
3.7快速排序法49
3.8基数排序法51
【课后习题】53
第4章查找与哈希算法54
4.1常见查找算法的介绍55
4.1.1顺序查找法55
4.1.2二分查找法56
4.1.3插值查找法58
4.2常见的哈希法简介60
4.2.1除留余数法60
4.2.2平方取中法62
4.2.3折叠法62
4.2.4数字分析法63
4.3碰撞与溢出问题的处理64
4.3.1线性探测法64
4.3.2平方探测法65
4.3.3再哈希法66
【课后习题】67
第5章数组与链表算法68
5.1矩阵68
5.1.1矩阵相加算法69
5.1.2矩阵相乘70
5.1.3转置矩阵72
5.2建立单向链表73
5.2.1单向链表的连接功能74
5.2.2单向链表的节点删除76
5.2.3单向链表的反转79
【课后习题】82
第6章堆栈与队列算法83
6.1用数组实现堆栈83
6.2用链表实现堆栈85
6.3汉诺塔问题的求解算法87
6.4八皇后问题的求解算法93
6.5用数组实现队列95
6.6用链表实现队列98
6.7双向队列100
6.8优先队列103
【课后习题】104
第7章树形结构及其算法105
7.1用数组实现二叉树107
7.2用链表实现二叉树109
7.3二叉树遍历111
7.4二叉树节点的查找115
7.5二叉树节点的插入116
7.6二叉树节点的删除118
7.7堆积树排序法121
【课后习题】127
第8章图的数据结构及其算法129
8.1图的遍历129
8.1.1深度优先遍历法130
8.1.2广度优先遍历法132
8.2最小生成树(MST)136
8.2.1Prim算法136
8.2.2Kruskal算法138
8.3图的最短路径法142
8.3.1Dijkstra算法与A*算法143
8.3.2Floyd算法148
【课后习题】152
附录习题和解答155
前言/序言
前言
如今“程序设计”已经是越来越普及的课程,让人人拥有程序设计的能力已是各所学校信息课程的重点。算法一直是计算机科学专业非常重要的基础课程,从程序设计语言实践的角度而言,算法是有志从事信息技术领域工作的专业人员必须学习的一门基础理论课程。无论你采用哪一种程序设计语言编写程序,所设计的程序能否快速而高效地完成预定的任务,算法都是其中的关键因素。
市面上有许多算法相关的书籍,常会介绍大量的理论或是在书上举例去表达算法的核心概念,虽然有些书写作的笔法轻松,能帮助用户理解各种算法的核心概念,但是这类书缺乏完整的程序设计语言的实现范例,因而对于第一次接触算法的初学者来说,将算法运用于实际应用就成了一大段跨不过去的鸿沟。
为了帮助更多人用比较轻松的方式了解各种算法的重点,包括分治法、递归法、贪心法、动态规划法、迭代法、枚举法、回溯法等,以及应用不同算法所延伸出的重要数据结构(例如数组、链表、堆栈、队列、树形结构、图形、排序、查找、哈希等),《图解算法——使用Python》特别采用丰富的图例来阐述算法的基本概念,并将算法概念进行言简意赅的诠释和举例,同时使用Python语言编程实现算法,以期能将各种算法真正应用在学习者将来的程序设计中。因此,这是一本学习算法的入门教科书。
笔者长期从事信息教育以及专业书籍编写的工作,因而在语句的表达上尽量简洁有力。另外,为了检验各章的学习成果,特别收集了难易度适中的习题,并参阅算法与数据结构课程考试的相关题型,让读者进一步演练与巩固算法的基础知识。然而,一本好的算法教科书,除了内容的完备专业外,更需要有清楚易懂的结构安排及表达方式。希望《图解算法——使用Python》可以帮助读者在轻松的学习氛围下,对算法这门基础理论有比较深刻的认识。
吴灿铭