HOW TO THINK ABOUT ALGORITHMS
There are many algorithm texts that provide lots of well-polished code and
proofs of correctness. Instead, this one presents insights, notations, and
analogies to help the novice describe and think about algorithms like an
expert. It is a bit like a carpenter studying hammers instead of houses. Jeff
Edmonds provides both the big picture and easy step-by-step methods for
developing algorithms, while avoiding the comon pitfalls. Paradigms such
as loop invariants and recursion help to unify a huge range of algorithms
into a few meta-algorithms. Part of the goal is to teach students to think
abstractly. Without getting bogged down in formal proofs, the book fosters
deeper understanding so that how and why each algorithm works is trans-
parent. These insights are presented in a slow and clear manner accessible
to second- or third-year students of computer science, preparing them to
find on their own innovative ways to solve problems.
Abstraction is when you translate the equations, the rules, and the under-
lying essences of the problem not only into a language that can be commu-
nicated to your friend standing with you on a streetcar, but also into a form
that can percolate down and dwell in your subconscious. Because, remem-
ber, it is your subconscious that makes the miraculous leaps of inspiration,
not your plodding perspiration and not your cocky logic. And remember,
unlike you, your subconscious does not understand Java code.
Bookmarks
Cover
Half-title
Title
Copyright
CONTENTS
PREFACE
Introduction
PART ONE:Iterative Algorithms and Loop Invariants
1 Iterative Algorithms: Measures of Progress and Loop Invariants
1.1 A Paradigm Shift: A Sequence of Actions vs. a Sequence of Assertions
1.2 The Steps to Develop an Iterative Algorithm
1.3 More about the Steps
1.4 Different Types of Iterative Algorithms
1.5 Typical Errors
1.6 Exercises
2 Examples Using More-of-the-Input Loop Invariants
2.1 Coloring the Plane
2.2 Deterministic Finite Automaton
2.3 More of the Input vs. More of the Output
3 Abstract Data Types
3.1 Specifications and Hints at Implementations
3.2 Link List Implementation
3.3 Merging with a Queue
3.4 Parsing with a Stack
4 Narrowing the Search Space: Binary Search
4.1 Binary Search Trees
4.2 Magic Sevens
4.3 VLSI Chip Testing
4.4 Exercises
5 Iterative Sorting Algorithms
5.1 Bucket Sort by Hand
5.2 Counting Sort (a Stable Sort)
5.3 Radix Sort
5.4 Radix Counting Sort
6 Euclid’s GCD Algorithm
7 The Loop Invariant for Lower Bounds
PART TWO: Recursion
8 Abstractions, Techniques, and Theory
8.1 Thinking about Recursion
8.2 Looking Forward vs. Backward
8.3 With a Little Help from Your Friends
8.4 The Towers of Hanoi
8.5 Checklist for Recursive Algorithms
8.6 The Stack Frame
8.7 Proving Correctness with Strong Induction
9 Some Simple Examples of Recursive Algorithms
9.1 Sorting and Selecting Algorithms
9.2 Operations on Integers
9.3 Ackermann's Function
9.4 Exercises
10 Recursion on Trees
10.1 Tree Traversals
10.2 Simple Examples
10.3 Generalizing the Problem Solved
10.4 Heap Sort and Priority Queues
10.5 Representing Expressions with Trees
11 Recursive Images
11.1 Drawing a Recursive Image from a Fixed Recursive and a Base Case Image
11.2 Randomly Generating a Maze
12 Parsing with Context-Free Grammars
PART THREE: Optimization Problems
13 Definition of Optimization Problems
14 Graph Search Algorithms
14.1 A Generic Search Algorithm
14.2 Breadth-First Search for Shortest Paths
14.3 Dijkstra's Shortest-Weighted-Path Algorithm
14.4 Depth-First Search
14.5 Recursive Depth-First Search
14.6 Linear Ordering of a Partial Order
14.7 Exercise
15 Network Flows and Linear Programming
15.1 A Hill-Climbing Algorithm with a Small Local Maximum
15.2 The Primal…Dual Hill-Climbing Method
15.3 The Steepest-Ascent Hill-Climbing Algorithm
15.4 Linear Programming
15.5 Exercises
16 Greedy Algorithms
16.1 Abstractions, Techniques, and Theory
16.2 Examples of Greedy Algorithms 16.2.1 Example: The Job/Event Scheduling Problem
16.2.2 Example: The Interval Cover Problem
16.2.3 Example: The Minimum-Spanning-Tree Problem
16.3 Exercises
17 Recursive Backtracking
17.1 Recursive Backtracking Algorithms
17.2 The Steps in Developing a Recursive Backtracking
17.3 Pruning Branches
17.4 Satisfiability
17.5 Exercises
18 Dynamic Programming Algorithms
18.1 Start by Developing a Recursive Backtracking
18.2 The Steps in Developing a Dynamic Programming Algorithm
18.3 Subtle Points
18.3.1 The Question for the Little Bird
18.3.2 Subinstances and Subsolutions
18.3.3 The Set of Subinstances
18.3.4 Decreasing Time and Space
18.3.5 Counting the Number of Solutions
18.3.6 The New Code
19 Examples of Dynamic Programs
19.1 The Longest-Common-Subsequence Problem
19.2 Dynamic Programs as More-of-the-Input Iterative Loop Invariant Algorithms
19.3 A Greedy Dynamic Program: The Weighted Job/Event Scheduling Problem
19.4 The Solution Viewed as a Tree: Chains of Matrix Multiplications
19.5 Generalizing the Problem Solved: Best AVL Tree
19.6 All Pairs Using Matrix Multiplication
19.7 Parsing with Context-Free Grammars
19.8 Designing Dynamic Programming Algorithms via Reductions
20 Reductions and NP-Completeness
20.1 Satisfiability Is at Least as Hard as Any Optimization Problem
20.2 Steps to Prove NP-Completeness
20.3 Example: 3-Coloring Is NP-Complete
20.4 An Algorithm for Bipartite Matching Using the Network Flow Algorithm
21 Randomized Algorithms
21.1 Using Randomness to Hide the Worst Cases
21.2 Solutions of Optimization Problems with a Random Structure
PART FOUR: Appendix
22 Existential and Universal Quantifiers
23 Time Complexity
23.1 The Time (and Space) Complexity of an Algorithm
23.2 The Time Complexity of a Computational Problem
24 Logarithms and Exponentials
25 Asymptotic Growth
25.1 Steps to Classify a Function
25.2 More about Asymptotic Notation
26 Adding-Made-Easy Approximations
26.1 The Technique
26.2 Some Proofs for the Adding-Made-Easy Technique
27 Recurrence Relations
27.1 The Technique
27.2 Some Proofs
28 A Formal Proof of Correctness
PART FIVE: Exercise Solutions
Chapter 1. Iterative Algorithms: Measures of Progress and Loop Invariants
Chapter 2. Examples UsingMore-of-the-Input Loop Invariant
Chapter 3. Abstract Data Types
Chapter 4. Narrowing the Search Space: Binary Search
Chapter 6. Euclid’s GCD Algorithm
Chapter 7. The Loop Invariant for Lower Bounds
Chapter 8. Abstractions, Techniques, and Theory
Chapter 9. Some Simple Examples of Recursive Algorithms
Chapter 10. Recursion on Trees
Chapter 11. Recursive Images
Chapter 12. Parsingwith Context-Free Grammars
Chapter 14. Graph Search Algorithms
Chapter 15. Network Flows and Linear Programming
Chapter 16: Greedy Algorithms
Chapter 17. Recursive Backtracking
Chapter 18. Dynamic Programming Algorithms
Chapter 19. Examples of Dynamic Programs
Chapter 20. Reductions and NP-Completeness
Chapter 22. Existential and Universal Quantifiers
Chapter 23. Time Complexity
Chapter 24. Logarithms and Exponentials
Chapter 25. Asymptotic Growth
Chapter 26. Adding-Made-Easy Approximations
Chapter 27. Recurrence Relations
CONCLUSION
INDEX
Jeff Edmonds received his Ph.D. in 1992 at University of Toronto in theoretical computer science. His thesis proved that certain computation problems require a given amount of time and space. He did his postdoctorate work at the ICSI in Berkeley on secure multi-media data transmission and in 1995 became an Associate Professor in the Department of Computer Science at York Univer...
(展开全部)
フェチが芽生える作画流儀オフィスで働くお姉さんをテーマとしたイラストを多数発表しTwitterで話題のイラストレーター・どうしまが、どのように考えてどのように描...
工程生态学 本书特色 本书是作者所从事工程生态研究课题的汇总。介绍了工程生态学概念、学科体系、研究对象、研究方法、一些工程生态研究实例。分两部分:工程生态学学科...
药理学 内容简介 为了实现高职高专教育护理、药学类等专业人才的培养目标,根据教育部的有关文件精神以及行业发展和职业教育改革的实际需要,我们组织专业教师和(从事药...
保罗•格雷厄姆,《黑客与画家》一书的作者,硅谷创业之父。1964年,出生于匹兹堡郊区的一个中产阶级家庭。父亲是设计核反应堆的物理学家,母亲在家照看他和他的妹妹。...
蟹总,八零后,是个典型的巨蟹座女生,爱幻想,忠于爱情,喜欢写作跟画画。擅长现实题材小说创作,文字风格精练,注重细节描写和人物之间感情张力的刻画。代表作品:《通往...
《普通高等教育"十一五"国家级规划教材修订版:财务管理(第4版)》编者根据普通高等院校应用型人才培养目标与财务管理实践,对《财
【内容简介】阿伦特是重要的哲学思想“平庸之恶”的提出者,她与西蒙娜·波伏瓦、苏珊·桑塔格一起被视为20世纪三大女性思想家。奥古斯丁说:“我爱你——我愿你是你所是...
可靠性工程技术 内容简介 本书主要内容包括可靠性数学基础、基本概念、可靠性试验与可靠性增长、系统可靠性模型与分析、故障模式与故障树分析、可靠性预计、可靠度分配等...
干春松,浙江绍兴人,北京大学哲学系、儒学研究院教授,兼任中华孔子学会常务副会长、绍兴文理学院鉴湖学者。主要从事儒家思想、近现代哲学、中国政治哲学研究。著有:《制...
佩蒂·史密斯(Patti Smith),1973年,她在紐約高譚書店開第一個畫展。1975年,她推出首張專輯《Horses》,《滾石雜誌》票選為樂壇史上百大經典...
风机和压缩机设计与应用 本书特色 主要介绍风机和压缩机的设计与应用,内容主要包括风机和压缩机的分类及其应用、风机的设计、活塞式压缩机、多级轴流式压缩机的设计以及...
《入职管理日记》的作者为长期从事劳动法与员工关系管理咨询、培训、劳动争议处理工作的实战派专家,《入职管理日记》中设计的商
玄武岩纤维水工混凝土及BFRP加固 本书特色 张俊芝、高延红、章晓桦、孙从炎、孙志恒等* 的《玄武岩纤维水工混凝土及BFRP加固》以水工混凝土结构所处的实际工作...
Michael D.mattesi,是美国娱乐艺术学院的教学总监。作为一名动画艺艺术家和教育家,他有着近20年的丰富经验,曾供职于美国的迪士尼、跳蛙、惊奇漫画、...
妇儿卷-国医大师验案良方 本书特色 “中国当代30位国医大师验案良方辑录”系列丛书较系统地收集整理30位国医大师在治疗心脑血管、呼吸、消化、泌尿、妇儿以及五官疾...
Nationally recognized communication expert Debra Fine reveals the techniques and...
From the rising star of childrens picture books comes the magical tale of friend...
“不属于我的城市,我深爱过你。”中国首席绘本作家、金龙奖双魁得主寂地,献给漂泊者的童话。漫画与图像小说的完美组合,收藏级画面品质!◎ 编辑推荐★ 百万级畅销作品...
InTheTheoristsMotheroneofoursubtlestliterarytheoriststurnshisattentiontotracesof...
年年,niNNin。1月20日出生的中国大陆青涩广州人。个性如电影《家庭招待会(Open House)》的男主角。相信心和旅行能比身体到达更远的地方,一直相信。...