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...
(展开全部)
猪病防治200问-(养殖业篇) 节选 养猪是我国广大农村传统的家庭饲养业,随着经济体制改革的逐步深入和市场经济的迅速发展,农村养猪业正在由单一、传统的家...
Margaret Levi is Professor of Political Science at the University of Washington ...
朱瑟琳·乔塞尔森著名心理学大师欧文·亚隆的得意门生,执业心理治疗师,密歇根大学临床心理学博士,菲尔丁研究生院的心理学教授,由美国职业心理学委员会(ABPP)认证...
IbicuslIntégrale,uneoccasionuniquedesereplongerdanslagrandesérieexpressionnisted...
2010中国通信年鉴 本书特色 《中国通信年鉴(2010)》明确要求,通信部门要高度重视自主创新,不断开发新的业务,更好地为广大人民群众服务。发展TD—SCDM...
梅利莎.席林(Melissa A. Schilling)纽约大学管理学教授,华盛顿大学企业战略管理专业博士,主要研究方向是创业与企业创新。她撰写的《科技创新中的...
《你的战争:从阿尔及利亚到突尼斯》内容简介:厄尼·派尔1942年起作为战地记者在北非战场进行报导,他跟随运兵船前往非洲,和盟军
西蒙娜·德·波伏瓦 (Simone de Beauvoir, 1908-1986),法国哲学家、作家、女性主义者。1929年通过法国哲学教师资格考试,曾在多所学...
作品目录1 “Hello, World”写下第一个程序 1选择文本编辑器 1核心功能 2做出你的选择 4Sublime Text 5TextMate 5Note...
迪雅丹的《月桂树已砍尽》发表于1887年,比《尤利西斯》早了近三十年。早在象征主义全盛时期,迪雅丹无论是作为创作者还是评论家,都对现代派文学的创新起到了推波助澜...
赤川次郎,日本超级畅销书作家,作品总印数超过2.7亿册,为日本当代畅销书之冠。稿酬列日本作家榜首,自1985年起,每年稿酬为10亿日元。他站在年轻人的视角观察社...
这套书第一次在“百年中国文学“的整体性框架内思考文学的发展变化,是一个学术群体共同完成的成果。这套书由谢冕、孟繁华主编,
美国联邦宪法第四修正案;搜查与扣押 本书特色 这是一套关于美国宪法刑事诉讼的判例集。本判例集收录的判例都是美国联邦*高法院作出的、在刑事诉讼宪法化历程中具有里程...
* 荒诞派戏剧的国王尤内斯库寻找自我和寻找家园的旅程* 在你的人生里,你到底是主角还是旁观者?* “这是我梦中的一生的历史,像是照片的底版。这也是一次回到原初,...
林瑋嬪英國劍橋大學社會人類學博士,現任國立臺灣大學人類學系教授。曾任國立臺灣大學文學院副院長與人類學系系主任。專長為宗教人類學、親屬人類學與漢人研究,長期關注宗...
《科场现形记续编》内容简介:本书为《科场现形记》的续编,由郑也夫教授汇编北京大学及其他学校学生的社会学课程调研论文而成,从
《古典今译》是余秋雨先生2018年独家授权作家出版社的又一部散文力作。书中余先生将中国古代历史上十篇风格迥异的古典美文,以词美意达、文气饱满贯通的文字翻译成现代...
楚国农业及社会研究 本书特色 春秋战国时期领异标新、惊采绝艳的楚文化,为中华文化的形成与发展完美地奉献出了自己的珍藏。楚学的使命就是对这一稀世珍藏进行广泛而深入...
《夸父逐日——方成传》内容简介:本书为“大家丛书”之一。它介绍了我国著名天体物理学家、中科院院士、南京大学教授方成在炮火硝
中国法院2016年度案例-婚姻家庭与继承纠纷 本书特色 本书汇集全国各地法院提交的关于婚姻家庭与继承纠纷的典型案例,经过国家法官学院案例开发研究中心筛选、审核,...