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...
(展开全部)
仲圣方证合一要诀 本书特色 武简侯编著的《仲圣方证合一要诀》在广泛总结前人经验的基础上,紧密结合中医临床实践,以简洁好记的口诀形式,把《伤寒论》和《金匮要略》中...
在互联网行业内,“运营”这个职能发展到一定阶段后,往往更需要有成熟的知识体系和工作方法来给行业从业者以指引。《运营之光:我的互联网运营方法论与自白2.0(珍藏版...
目录休息杨五奶奶毁灭的精神陈老四的故事小长儿与罐头荔枝《珊拿的邪教徒》译者序文艺民族形式问题上的旧错误与新偏向野百合花政治家・艺术家我对罗迈同志在整风检工动员大...
消毒供应中心管理规范与操作常规 内容简介 《消毒供应中心管理规范与操作常规/医技科室管理规范与操作常规系列丛书》依据行业标准,立足于临床工作实践,系统地介绍了消...
TheessenceofDusselsthoughtispresentedthroughtheconceptofethicalhermeneuticswhich...
“封建主义”这一概念有三种理解:狭义封建主义、广义封建主义和马克思主义封建主义。狭义封建主义概念源于16世纪法学家对西欧中世纪“封建法”的研究,专指封臣制和封土...
幾米,近年来最炙手可热的绘本作家。1998年8月首度出版个人的绘本创作,1999年以《向左走·向右走》、《听幾米唱歌》和《月亮忘记了》三部作品,展现出惊人的创作...
《品酒:罗宾逊品酒练习册》:相对于葡萄酒的种类、产地、年代、身份等各样葡萄酒百科知识来说,其实葡萄酒的味道才是最重要的,因为这种可爱的液体,可以给我们的感官带来...
李斯炽(中国百年百名中医临床家丛书) 内容简介 本书包括医家小传、专病论治、诊余漫话、年谱四部分。其中“专病论治”收录了李斯炽教授部分医论及医案,按中医病证名共...
作品目录第一章 底部操作技巧 第二章 上升通道操作技巧第三章 顶部操作技巧第四章 下跌通道操作技巧第五章 综合操作技巧第六章
窗帘制作教程 本书特色 为了方便软装设计机构、窗帘制作者、窗帘培训机构掌握窗帘加工制作技术,本书详细介绍了窗帘面料、窗帘种类、窗帘风格、窗帘色彩搭配、测量、算料...
詹姆斯·奎因(James Quinn),著名纪录片导演、电影监制。他的代表作有《逍遥天堂》《我的儿子》《两光大笨贼》等。在成为一名职业导演之前,詹姆斯·奎因曾在...
作品目录「愛護精神」…「メフィスト」1997年9月号「水曜日と金曜日が嫌い」…『7人の名探偵』2017年9月(講談社ノベルス)/20
威廉·萨默塞特·毛姆(William Somerset Maugham,1874 -1965)英国小说家、剧作家,被誉为“天才小说家”。生于巴黎,幼时父母双亡,...
咏给·明就仁波切(Yongey Mingyur Rinpoche)当代禅修大师、心灵导师,被《时代周刊》《国家地理》杂志誉为“世界上快乐的人”。1976年生于尼...
Vivibear,宁波籍,现居地瑞典,青春畅销书女作家,出版了《寻找前世之旅》《兰陵缭乱》等12部小说。
人头的去向,只有一个人知道......惊愕度第一!期待度第一!横扫各大推理排行榜的名作终于登场!◎特别收录:三津田信三<致台湾的读者>序文!【推理作家】凌彻◎专...
克里希那穆提,享誉世界的心灵导师,美国《时代周刊》誉为“20世纪最伟大的五大圣者之一”。他生于印度,少年时期开始专门的灵性修炼,将其彻底摒弃后成为彻悟的智者。他...
方剂学 本书特色 《中医考研完美笔记系列丛书》是作者长年在本科教学工作中根据学生的记忆知识点需求和考研的题目设置而编写出来的作品。本套丛书囊括了中医考研的所有知...
敬畏法律 本书特色 1701年,一位在中国住过的法国人谈到中国人,称之为“一个只怕皇帝,只爱钱财,对一切有关永恒的主题都无动于衷,漠不关心的民族。”果真是这样吗...