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...
(展开全部)
[日]永田丰志日本Showcase-TV公司董事兼COO。他曾任日本著名人力资源服务商Recruit公司的高管,负责集团新创业务拓展。2005年与合伙人共同创立...
张霖,学者,北京外国语大学中文学院副教授。张晖之妻。自入读南京大学本科起即与张晖相识,两人相知相恋相伴十八载。
中医临床与治末病散墨 本书特色 《中医临床与治未病散墨》由宋新安编著,全书由医论篇、治未病篇、参数篇、名言篇构成。主要围绕常见病、多发病,以及在衣、食、住、行、...
艾西恩一直想弄明白自己是怎么回事:9岁去父亲单位时意外撞见尸体解剖;18岁立志学习心理学;22岁研习了全部医科院校解剖课程;23岁开始以闪苍为笔名创作犯罪心理小...
作品目录1 Why should you learn to write programs?2 Variables, expressions, and state...
玛丽亚·蒙台梭利(Maria Montessori,1870年8月31日-1952年5月6日),20世纪享誉全球的意大利幼儿教育家。她反对过分干涉儿童,倡导为儿...
《硬派健身》内容简介:十年前,我开始了自己的健身训练。然而,我却走了不少弯路,听信了不少错误的传言。十年间,我发现这世界有
Thisisaneweditionoftheworldsleadingtextbookonjournalism.Translatedintomorethanad...
仲裁法和惯例辞典 内容简介 这是一本极好的著作,它对所有与之有关或者有可能涉及到仲裁程序机制的人来说,都应该是极具价值和极具重要性的著作。就仅从对每一个单词或词...
王小波,学者、作家。1952年5月13日出生于北京,1978年考人中国人民大学学习商业管理。1984年至1988年在美国匹兹堡大学学习,获硕士学位后回国,曾任教...
清代森林与土地管理(国家清史编纂委员会·编译丛刊) 本书特色 《清代森林与土地管理》:国家清史编纂委员会·编译丛刊。清代森林与土地管理(国家清史编纂委员会·编译...
[美] 达伦·哈迪(Darren Hardy)个人成长导师,在个人成长与成功行业担任了20多年的核心业务领导者,领导了三家以个人发展为基础的电视网络公司,以全球...
前言室利·阿罗频多的《薄伽梵歌论》(Essays on the Gita)原著英语,凡两系。皆发表于其个人杂志名《圣道》(Arya)者。第一系自1916年8月至...
InTheNinePowersToTransformYourLife,NicolsNbileilluminatesthejourneytodiscoverthe...
权润珠,1975年生。韩国人。弘益大学视觉设计毕业。1997年开始以coolcat的笔名开始创作漫画。曾出版《一只雪猫的孤独午后》、《恋猫物语》等书籍。
1874 年, 俄罗斯圣彼得堡出现一个奇怪的演说家, 他自称鲍罗廷, 三天两头跑到圣彼德堡的广场上, 鼓动人们起来革命。谁也不知道这个家伙的真实身份, 只知道他...
内 容 简 介本书系统地论述了微分几何的基本知识。全书共七章并两个附录。作者以较大的篇幅,即前三章和第六章介绍了流形、多重线性函数、向量场、外微分、李群和活动标...
赫尔曼·黑塞(Hesse Hermann,1877-1962),原籍德国,1923年入瑞士籍,以后长期在瑞士隐居乡间。他被称为德国浪漫派最后一位骑士,其代表作《...
马丁 J. 普林格(Martin J. Pring)普林格研究所所长、金融教育类网站www.pring.com的总裁,还是著名时事通讯杂志《市场评论》的主编。作...
Journeybacktoatimethatneverwas,toakingdomravagedbywarandraiders,toalandoverrunby...