通过python解决算法和数据结构问题¶
Problem Solving with Algorithms and Data Structures using Python
By Brad Miller and David Ranum, Luther College
There is a wonderful collection of YouTube videos recorded by Gerry Jenkins to support all of the chapters in this text.
1. 引言¶
- 1.1. Objectives
- 1.2. Getting Started
- 1.3. What Is Computer Science?
- 1.4. What Is Programming?
- 1.5. Why Study Data Structures and Abstract Data Types?
- 1.6. Why Study Algorithms?
- 1.7. Review of Basic Python
- 1.8. Getting Started with Data
- 1.9. Input and Output
- 1.10. Control Structures
- 1.11. Exception Handling
- 1.12. Defining Functions
- 1.13. Object-Oriented Programming in Python: Defining Classes
- 1.14. Summary
- 1.15. Key Terms
- 1.16. Exercises
2. 算法分析¶
3. 基本数据结构¶
- 3.1. 目标
- 3.2. 什么是线性结构?
- 3.3. 栈
- 3.4. 栈的抽象数据类型
- 3.5. 用Python实现栈
- 3.6. 简单的括号匹配
- 3.7. 符号匹配(一般情况)
- 3.8. 将十进制数转换为二进制数
- 3.9. 中缀、前缀和后缀表达式
- 3.10. 队列
- 3.11. 队列的抽象数据类型
- 3.12. 用Python实现队列
- 3.13. 队列模拟:烫手山芋游戏
- 3.14. 队列模拟:打印任务
- 3.15. 双端队列
- 3.16. 双端队列的抽象数据类型
- 3.17. 用Python实现双端队列
- 3.18. 回文检测器
- 3.19. 列表
- 3.20. 无序列表的抽象数据类型
- 3.21. 用链表实现无序列表
- 3.22. 有序列表的抽象数据类型
- 3.23. 实现有序列表
- 3.24. 总结
- 3.25. 关键术语
- 3.26. 练习
- 3.1. Objectives
- 3.2. What Are Linear Structures?
- 3.3. Stacks
- 3.4. The Stack Abstract Data Type
- 3.5. Implementing a Stack in Python
- 3.6. Simple Balanced Parentheses
- 3.7. Balanced Symbols (A General Case)
- 3.8. Converting Decimal Numbers to Binary Numbers
- 3.9. Infix, Prefix, and Postfix Expressions
- 3.10. Queues
- 3.11. The Queue Abstract Data Type
- 3.12. Implementing a Queue in Python
- 3.13. Queue Simulation: Hot Potato
- 3.14. Queue Simulation: Printing Tasks
- 3.15. Deques
- 3.16. The Deque Abstract Data Type
- 3.17. Implementing a Deque in Python
- 3.18. Palindrome Checker
- 3.19. Lists
- 3.20. The Unordered List Abstract Data Type
- 3.21. Implementing an Unordered List: Linked Lists
- 3.22. The Ordered List Abstract Data Type
- 3.23. Implementing an Ordered List
- 3.24. Summary
- 3.25. Key Terms
- 3.26. Exercises
4. 递归¶
- 4.1. Objectives
- 4.2. What Is Recursion?
- 4.3. Calculating the Sum of a List of Numbers
- 4.4. The Three Laws of Recursion
- 4.5. Converting an Integer to a String in Any Base
- 4.6. Stack Frames: Implementing Recursion
- 4.7. Visualizing Recursion
- 4.8. Sierpinski Triangle
- 4.9. Complex Recursive Problems
- 4.10. Tower of Hanoi
- 4.11. Exploring a Maze
- 4.12. Dynamic Programming
- 4.13. Summary
- 4.14. Key Terms
- 4.15. Exercises
5. 搜索与排序¶
6. 树和树算法¶
- 6.1. Objectives
- 6.2. Examples of Trees
- 6.3. Vocabulary and Definitions
- 6.4. Implementation
- 6.5. List of Lists Representation
- 6.6. Nodes and References
- 6.7. Parse Tree
- 6.8. Tree Traversals
- 6.9. Priority Queues with Binary Heaps
- 6.10. Binary Heap Operations
- 6.11. Binary Heap Implementation
- 6.12. Binary Search Trees
- 6.13. Search Tree Operations
- 6.14. Search Tree Implementation
- 6.15. Search Tree Analysis
- 6.16. Balanced Binary Search Trees
- 6.17. AVL Tree Performance
- 6.18. AVL Tree Implementation
- 6.19. Summary of Map ADT Implementations
- 6.20. Summary
- 6.21. Key Terms
- 6.22. Exercises
7. 图和图算法¶
7. Graphs and Graphing Algorithms
7.1. 目标
7.2. 词汇和定义
7.3. 图的抽象数据类型
7.4. 邻接矩阵
7.5. 邻接表
7.6. 实现
7.7. 字梯问题
7.8. 构建字梯图
7.9. 实现广度优先搜索
7.10. 广度优先搜索分析
7.11. 骑士巡游问题
7.12. 构建骑士巡游图
7.13. 实现骑士巡游
7.14. 骑士巡游分析
7.15. 一般的深度优先搜索
7.16. 深度优先搜索分析
7.17. 拓扑排序
7.18. 强连通分量
7.19. 最短路径问题
7.20. Dijkstra算法
7.21. Dijkstra算法分析
7.22. Prim生成树算法
7.23. 总结
7.24. 关键术语
7.25. 练习
- 7.1. Objectives
- 7.2. Vocabulary and Definitions
- 7.3. The Graph Abstract Data Type
- 7.4. An Adjacency Matrix
- 7.5. An Adjacency List
- 7.6. Implementation
- 7.7. The Word Ladder Problem
- 7.8. Building the Word Ladder Graph
- 7.9. Implementing Breadth-First Search
- 7.10. Breadth-First Search Analysis
- 7.11. The Knight’s Tour Problem
- 7.12. Building the Knight’s Tour Graph
- 7.13. Implementing Knight’s Tour
- 7.14. Knight’s Tour Analysis
- 7.15. General Depth-First Search
- 7.16. Depth-First Search Analysis
- 7.17. Topological Sorting
- 7.18. Strongly Connected Components
- 7.19. Shortest Path Problems
- 7.20. Dijkstra’s Algorithm
- 7.21. Analysis of Dijkstra’s Algorithm
- 7.22. Prim’s Spanning Tree Algorithm
- 7.23. Summary
- 7.24. Key Terms
- 7.25. Exercises
8. 高级主题¶
致谢¶
Acknowledgements
我们非常感谢Franklin Beedle Publishers允许我们免费提供这本互动教材的在线版本。这个版本献给我们的第一位编辑Jim Leisy,他希望我们“改变世界”。
We are very grateful to Franklin Beedle Publishers for allowing us to make this interactive textbook freely available. This online version is dedicated to the memory of our first editor, Jim Leisy, who wanted us to “change the world.”
创建日期: 2024年9月9日