算法技术手册(影印版)
算法技术手册(影印版)
George T. Heineman, Gary Pollice, Stanley Selkow
出版时间:2009年04月
页数:343
创造稳定的软件需要有效的算法,但是程序设计者们很少能在问题出现之前就想到。《算法技术手册》描述了现有的可以解决多种问题的算法,并且能够帮助你根据需求选择并实现正确的算法——只需要一定的数学知识即可理解并分析算法执行。

相对于理论来说,本书更注重实际运用,书中提供了多种程序语言中可用的有效代码解决方案,可轻而易举地适合一个特定的项目。有了这本书,你可以:

* 解决特定编码问题或改进现有解决方案的执行
* 迅速确定与需要解决的问题相关的算法,并判定为什么这样的算法是正确的
* 探索C、C++、Java、Ruby中的算法解决方案,伴有实现诀窍
* 了解一个算法预期的执行情况及最佳的执行条件
* 发现不同算法中相似设计产生的冲突
* 学习先进的数据结构以改进算法效率
有了《算法技术手册》,你可以学习如何改进算法的性能,这是软件应用成功的关键。

“作者汲取了大量鲜为人知的文献资料,这本不可或缺的指南巩固了理论与实际操作的完美平衡。通过它来理解算法变得更加轻松容易。”
——Matthew Russell,高级技术总监,Digital Reasoning System;
《Dojo:The Definitive Guide》的作者
(O'Reilly)

George T. Heineman, Gary Pollice和Stanley Selkow均为Worcester Polytechnic Institute(伍斯特理工学院)计算机科学系的教授。George是《Component-Based Software Engineering:Putting the Pieces Together》(Addison-Wesley)的合编者,Gary则是《Head First Object-Oriented Analysis and Design》(O'Reilly)的合著者。
  1. Preface
  2. Part I.
  3. 1. Algorithms Matter
  4. Understand the Problem
  5. Experiment if Necessary
  6. Algorithms to the Rescue
  7. Side Story
  8. The Moral of the Story
  9. References
  10. 2. The Mathematics of Algorithms
  11. Size of a Problem Instance
  12. Rate of Growth of Functions
  13. Analysis in the Best, Average, and Worst Cases
  14. Performance Families
  15. Mix of Operations
  16. Benchmark Operations
  17. One Final Point
  18. References
  19. 3. Patterns and Domains
  20. Patterns: A Communication Language
  21. Algorithm Pattern Format
  22. Pseudocode Pattern Format
  23. Design Format
  24. Empirical Evaluation Format
  25. Domains and Algorithms
  26. Floating-Point Computations
  27. Manual Memory Allocation
  28. Choosing a Programming Language
  29. References
  30. Part II.
  31. 4. Sorting Algorithms
  32. Overview
  33. Insertion Sort
  34. Median Sort
  35. Quicksort
  36. Selection Sort
  37. Heap Sort
  38. Counting Sort
  39. Bucket Sort
  40. Criteria for Choosing a Sorting Algorithm
  41. References
  42. 5. Searching
  43. Overview
  44. Sequential Search
  45. Binary Search
  46. Hash-based Search
  47. Binary Tree Search
  48. 6. Graph Algorithms
  49. Overview
  50. Depth-First Search
  51. Breadth-First Search
  52. Single-Source Shortest Path
  53. All Pairs Shortest Path
  54. Minimum Spanning Tree Algorithms
  55. References
  56. 7. Path Finding in AI
  57. Overview
  58. Depth-First Search
  59. Breadth-First Search
  60. A*Search
  61. Comparison
  62. Minimax
  63. NegMax
  64. AlphaBeta
  65. References
  66. 8. Network Flow Algorithms
  67. Overview
  68. Maximum Flow
  69. Bipartite Matching
  70. Reflections on Augmenting Paths
  71. Minimum Cost Flow
  72. Transshipment
  73. Transportation
  74. Assignment
  75. Linear Programming
  76. References
  77. 9. Computational Geometry
  78. Overview
  79. Convex Hull Scan
  80. LineSweep
  81. Nearest Neighbor Queries
  82. Range Queries
  83. References
  84. Part III.
  85. 10. When All Else Fails
  86. Variations on a Theme
  87. Approximation Algorithms
  88. Offline Algorithms
  89. Parallel Algorithms
  90. Randomized Algorithms
  91. Algorithms That Can Be Wrong, but with Diminishing Probability
  92. References
  93. 11. Epilogue
  94. Overview
  95. Principle: Know Your Data
  96. Principle: Decompose the Problem into Smaller Problems
  97. Principle: Choose the Right Data Structure
  98. Principle: Add Storage to Increase Performance
  99. Principle: If No Solution Is Evident, Construct a Search
  100. Principle: If No Solution Is Evident, Reduce Your Problem to
  101. Another Problem That Has a Solution
  102. Principle: Writing Algorithms Is Hard—Testing Algorithms Is
  103. Harder
  104. Part IV.
  105. Appendix: Benchmarking
  106. Index
书名:算法技术手册(影印版)
国内出版社:东南大学出版社
出版时间:2009年04月
页数:343
书号:978-7-5641-1632-3
原版书出版商:O'Reilly Media
George T. Heineman
 
George T. Heineman is an associate professor of computer science at Worcester
Polytechnic Institute. His research interests are in software engineering. He coedited
the 2001 book Component-Based Software Engineering: Putting the Pieces
Together (Addison-Wesley). George was the program chair for the 2005 International
Symposium on Component-Based Software Engineering.
 
 
Gary Pollice
 
GaryPPollice将自己归类为臭脾气的老古董,他在业界花了35年的时间,试图成为其成长过程中想要成为的人。即使他尚未成熟,在2003年,他还是毅然决然地进入学术殿堂。在那里,他一直在摧残下一代软件开发者的心智,以近乎激进的观念,如“软件是为客户开发的;学习如何扮演团队的一分子;设计和程序的品质、优雅性及正确性都很重要;只要你是一个伟大的程序员,就算是一个程序狂也无妨。”
Gary是伍斯特理工学院(Worcester Polytechnic Institute,WPI)的实训教授(Professor of Practice,这是指成为教授之前具有实际工作的经验),他与妻子 Vikki以及两只狗 Aloysius 与 Ignatius住在马萨诸塞州中部。你可访问他在 WPI 的主页,http://web.cs.wpi.edu/~gpollice/。别客气,有关于本书的抱怨或鼓励,请尽管留言给他。
Gary Pollice is a self-labeled curmudgeon (that's a crusty, ill-tempered,
usually old man) who spent over 35 years in industry trying to fi gure out
what he wanted to be when he grew up. Even though he hasn't grown up yet,
he did make the move in 2003 to the hallowed halls of academia where he
has been corrupting the minds of the next generation of software developers
with radical ideas like, "develop software for your customer, learn how to
work as part of a team, design and code quality and elegance and correctness
counts, and it's okay to be a nerd as long as you are a great one."
Gary is a Professor of Practice (meaning he had a real job before becoming a
professor) at Worcester Polytechnic Institute. He lives in central Massachusetts
with his wife, Vikki, and their two dogs, Aloysius and Ignatius. You can visit
his WPI home page at http://web.cs.wpi.edu/~gpollice/. Feel free
to drop him a note and complain or cheer about the book.


Gary Pollice is a self-labeled curmudgeon (that’s a crusty, ill-tempered, usually
old man) who spent more than 35 years in industry trying to figure out what he
wanted to be when he grew up. Even though he hasn’t grown up yet, he did make
the move in 2003 to the hallowed halls of academia, where he has been corrupting
the minds of the next generation of software developers with radical ideas like,
“develop software for your customer,” “learn how to work as part of a team,”
“design and code quality and elegance and correctness counts,” and “it’s OK to be
a nerd as long as you are a great one.”
Gary is a professor of practice (meaning he had a real job before becoming a
professor) at Worcester Polytechnic Institute. He went to WPI because he was so
impressed with the WPI graduates that he’s worked with over the years. He lives
in central Massachusetts with his wife, Vikki, and their two dogs, Aloysius and
Ignatius. When not working on geeky things he...well he’s always working on
geeky things. You can see what he’s up to by visiting his WPI home page,
http://web.cs.wpi.edu/~gpollice/. Feel free to drop him a note and complain or
cheer about the book.
 
 
Stanley Selkow
 
Stanley Selkow, a professor of computer science at Worcester Polytechnic Institute,
received a B.S. in electrical engineering from Carnegie Institute of Technology
in 1965, and a Ph.D. in the same area from the University of Pennsylvania in 1970.
From 1968 to 1970 he was in the public health service at the National Institutes of
Health at Bethesda, Maryland. Since 1970 he has been on the faculty at universities
in Knoxville, Tennessee and Worcester, Massachusetts, as well as Montreal,
Chonqing, Lausanne, and Paris. His major research has been in graph theory and
algorithm design.
 
 
The animal on the cover of Algorithms in a Nutshell is a hermit crab (Pagurus bernhardus). More than 500 species of hermit crabs exist. Mostly aquatic, they
live in saltwater in shallow coral reefs and tide pools. Some hermit crabs,however, especially in the tropics, are terrestrial. The robber crab, which can grow as large as a coconut, is one such example. Even terrestrial hermit crabs carry a small amount of water in their shells to help them breathe and keep their abdomens
moist.
Unlike true crabs, hermit crabs do not have a hard shell of their own and must seek refuge from predators in the abandoned shells of gastropods (snails). They are particularly fond of the discarded shells of periwinkles and whelks. As they grow bigger, they have to find a new shell to inhabit. Leaving any part of themselves exposed would make them more susceptible to predators; in addition, not having a well-fitted shell stunts their growth. Because intact gastropod shells are limited, shell competition is an issue.
Hermit crabs are decapod (which literally means “ten footed”) crustaceans. Of their five pairs of legs, the first two are pincers, or grasping claws, the larger one of
which they use to defend themselves and shred food. The smaller claw is used for eating. The second and third pairs of legs help them walk, and the final two pairs help keep them in their shells.
Characteristic of crustaceans, hermit crabs do not have an internal skeleton but rather a hard exoskeleton of calcium. They also have two compound eyes, two pairs of antennae (which they use to sense smells and vibration), and three pairs of mouthparts. Near the base of the their antennae is a pair of green glands that excretes waste.
Sea anemones (water-dwelling, predatory animals) are often found attached to hermit crabs’ shells. In exchange for transportation and a helping of the hermit crab’s leftovers, sea anemones help to ward off the hermit crab’s marine predators,such as fish and octopus. Other predators include birds, other crabs, and some mammals (man included).
Known as the “garbage collectors of the sea,” hermit crabs will eat mostly anything, including dead and rotting material on the seashore, and thus they play an important role in seashore cleanup. As omnivores, their diet is varied and includes everything from worms to organic debris, such as grass and leaves.