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...
(展开全部)
《讲给大家的中国历史06:大分裂时代》内容简介:《讲给大家的中国历史》系列,一套全新的中国通史。不是为读者介绍干巴巴的历史事
TeaboistrainingtobecomeasecretagentwiththeCanineSecretService.Hedreamsofbecoming...
每段亲密关系都需要突破三大关:性别差异、天生气质、原生家庭。林文采博士30年婚恋辅导精华之作,带你勇闯三关,和伴侣成为彼此顾念、毕生相爱的挚友。【编辑推荐】★秉...
Leo Melamed 在《逃向期货》中文译本出版典礼上的讲话 十分荣幸能出席今天的庆祝会。在此我由衷地感谢百家出版社承接了我的回忆录《逃向期货》一书的中文译本...
《求医不如求己家庭医学全书》是“国医健康绝学系列”的第十三本。与中里巴人前几《求医不如求已-家庭医学全书》的“感悟+方法”不同,《求医不如求已-家庭医学全书》直...
作者简介:太宰治(1909-1948)日本文坛的巅峰人物香港导演王家卫曾说过:“我很喜欢太宰治,而梁朝伟总让我想起他。”太宰治是日本“无赖派”文学的代表人物,他...
亦舒,生于上海。曾在《明报》任职记者及担任电影杂志采访记者和编辑。后赴英国留学,任职酒店公关部。进入香港政府新闻处担任新闻官,七年后辞职。现为全职作家及家庭主妇...
中国生态环境危急 本书特色 国内生产总值(gdp)并没有考虑我们孩子的健康、教育质量或者游戏的快乐;它没有包括我们的诗歌之美或者婚姻的稳定,也没有包括我们关于公...
《瘟疫与发展的悖论》内容简介:在过去几个世纪,人们见证了抗击传染病取得的一个又一个奇迹,传染病的发病率和致死率大幅下降,全
内容简介:班上转来了一名坐轮椅的新同学,名叫乌姆贝托。德里克想训练自己养的卷尾猴去帮助他,谁知他不但不领情,还剽窃德里克
茅海建,1954年生于上海,先后毕业于中山大学历史系,华东师范大学历史系(硕士)。曾任北京大学历史学系教授,现为华东师范大学历史系教授。主要著作有:《天朝的崩溃...
作品目录第二版前言(马尔康姆)传略(冯·赖特)回忆(马尔康姆)维特根斯坦致马尔康姆的信· · · · · ·精彩摘录研究哲学
宿白,1922年生,字季庚,辽宁沈阳人。1944年毕业于北京大学史学系。1948年北京大学文科研究所攻读研究生肄业,1951年主持河南禹县白沙水库墓群的发掘,1...
《重症监护室的故事》内容简介:病情危重,通常指病人有一个或多个重要器官无法正常运作。18岁少年在异国被感染后患上严重败血症,
萧十一狼,《漫客小说绘》常驻作者,以细致入微的情感描写见长,擅长捕捉人心阴暗面,笔锋辛辣处却往往予人以希冀与乐观。代表作《织梦者》《半面妆》等。
《基于生物力学的纠正性训练》内容简介:本书共分为6部分:第1部分介绍了身体各部位的骨骼结构、常见肌肉骨骼失衡问题及结构评估方
张传禄,男,山东省临朐县人,研究生学历,大校军衔,现为总参某部干部。1975年中学毕业后初涉机关工作。1976年投笔从戎,历任战士、文书、排长、指导员,团政治处...
朱迪丝•N.施克莱Judith N. Shklar (1928—1992)美国政治理论家,哈佛大学政治学教授,历任美国政治学与法哲学协会主席、美国政治科学协会主...
Zambia1964,therathereccentricschoolteacherEdwardMakukaNkolososingle-handedlystar...
金世元中药材传统鉴别经验 本书特色 《金世元中药材传统鉴别经验》所列中药材是按植物类药材、菌藻类药材、树脂类及其他加工类药材、动物类药材和矿物类药材进行分类,共...