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...
(展开全部)
In Jeff Bezos’s own words, the core principles and philosophy that have guided h...
井上靖(1907~1991),日本著名小说家、评论家、诗人。1950年《斗牛》获第22届芥川奖。代表作有《天平之甍》《楼兰》《敦煌》《孔子》等,其中《天平之甍》...
温瑞安(1954年1月1日出生),生于马拉西亚,现居香港。当代武侠小说名家,与金庸、梁羽生、古龙并称武侠小说四大家。自20世纪80年代中期以后,随着金庸、梁羽生...
张永和,美国伯克利加利福尼亚大学建筑系硕士,北京大学建筑学研究中心主任,非常建筑工作室主持建筑师,2005年出任美国麻省理工学院建筑系主任,成位第一位执掌美国建...
DuringHolyWeekinSantaFe,NewMexico,ayoungboynamedPedro"Peddie"Martinezturnsupmiss...
柏燕谊,国内著名心理学专家,畅销书作家。中央电视台、北京电视台等数十家电视台及时尚杂志特约心理专家和专栏作者。幸福生活的执行者,快乐生活的传播者。现任中启心理咨...
玉帐空分垒,金笳已罢吹,东风回首尽成非。大漠孤烟,剑雨江南,她只愿化作他身边的一朵解语花,守护那谪仙般的男子。繁华落尽,她是他雪中的一把油纸伞;金戈铁马,她是他...
凤歌,原名向麒钢,生于夔州古城,游学天府之国,而今寄居江城武汉,编稿为生,常自恨才拙,笔耕五载,未敢疏懒,然仅得《昆仑》一部,《曼育王朝》半部,科幻短篇若干。负...
作者简介:西村吉雄1942年生,1971年毕业于东京工业大学研究生院,工学博士。1967年~1968年曾留学于法国蒙彼利埃大学固体电子学研究中心,从事微波半导体...
常见脑病中医外治法 内容简介 本书从中医外冶法的角度来探讨,大量参考国内相关文献,并结合作者自身的临床经验,博采众说为一体,以指导临床诊治为宗旨,突出脑病治疗中...
三代女人生命孕育的惊世传奇七十年间天地翻覆的沧桑风雨一部长篇巨著,入木三分刻画女性坚强生命形态-1942—2008年,将近七十年的光阴,足以囊括一段厚重历史的风...
鸾,是传说中的一种鸟儿,没有凤凰的名号,却飞得更高……他是皇帝,60年里专宠我一人;他是我孙子辈,却也是我爱人;前半生,我是他姑姑,辅主登基,做亘古一帝。后半生...
苏曼殊(1884~1918年),近代作家、诗人、翻译家,广东香山人。生于日本横滨,父亲是广东茶商,母亲是日本人。1903年苏曼殊留学日本,在日本期间,参加过中国...
北倾人气作家,热爱旅行和美食,有点小懒,对感兴趣的事格外执着,性格软萌又温暖。擅长温馨治愈系的文字,文风暖甜而清新,细微处下笔如点睛,每一个精彩的情节,每一个重...
这是一本图文并茂的古汉字普及读物,全书共分十章,通过300多个古汉字的详细解说,介绍了古代的天文、地理、家庭、祭祀、战争、农业、工业、人文等,勾勒出了一幅丰富多...
WefirstmetGlendenningontheCanadianboatwhichcarriesyoudowntherapidsoftheSt.Lawren...
最后的夏天,爱是意愿。——《朗读者》现象级畅销原著作者、德国当代文坛大家施林克作品迂回,疏忽,遮掩,偏离,潜逃日常中的隐秘地带、大小谎言《夏日谎言》是德国当代文...
作品目录序 竹窗随笔 僧无为 人命呼吸间 古今著述 儒释和会 楞严一 楞严二 礼忏功德 螯蛎充口 东门黄犬 为父母杀生 鹿祀求名 心
安晴:命运爱情代言人。相信每一次相遇,都是命中注定的。有人擦肩而过,有人停下脚步驻足;有人带来爱与喜悦,有人带来悲伤与孤独。这都只是因为,缘分的深与浅。就像此刻...
约翰·米尔斯海默是芝加哥大学温德尔·哈里森杰出贡献政治学教授,国际安全政策项目主任,美国国际关系领域中的杰出学者之一,《纽约时报》、《新共和》、《大西洋月刊》的...