Steven S. Skiena
The Algorithm Design Manual
Steven S. Skiena Department of Computer Science State University of New York at Stony Brook New York, USA email@example.com
ISBN: 978-1-84800-069-8 DOI: 10.1007/978-1-84800-070-4
British Library Cataloguing in Publication Data A cataloguerecord for this book is available from the British Library Library of Congress Control Number: 2008931136 c Springer-Verlag London Limited 2008 Apart from any fair dealing for the purposes of research or private study, or criticism or review, as permitted under the Copyright, Designs and Patents Act 1988, this publication may only be reproduced, stored or transmitted, in any form or by any means,with the prior permission in writing of the publishers, or in the case of reprographic reproduction in accordance with the terms of licenses issued by the Copyright Licensing Agency. Enquiries concerning reproduction outside those terms should be sent to the publishers. The use of registered names, trademarks, etc., in this publication does not imply, even in the absence of a speciﬁc statement,that such names are exempt from the relevant laws and regulations and therefore free for general use. The publisher makes no representation, express or implied, with regard to the accuracy of the information contained in this book and cannot accept any legal responsibility or liability for any errors or omissions that may be made. Printed on acid-free paper Springer Science+Business Mediaspringer.com
Most professional programmers that I’ve encountered are not well prepared to tackle algorithm design problems. This is a pity, because the techniques of algorithm design form one of the core practical technologies of computer science. Designing correct, eﬃcient, and implementable algorithms for real-world problems requires access to two distinct bodies of knowledge: • Techniques– Good algorithm designers understand several fundamental algorithm design techniques, including data structures, dynamic programming, depth-ﬁrst search, backtracking, and heuristics. Perhaps the single most important design technique is modeling, the art of abstracting a messy real-world application into a clean problem suitable for algorithmic attack. • Resources – Good algorithm designersstand on the shoulders of giants. Rather than laboring from scratch to produce a new algorithm for every task, they can ﬁgure out what is known about a particular problem. Rather than re-implementing popular algorithms from scratch, they seek existing implementations to serve as a starting point. They are familiar with many classic algorithmic problems, which provide suﬃcient source material to modelmost any application. This book is intended as a manual on algorithm design, providing access to combinatorial algorithm technology for both students and computer professionals. It is divided into two parts: Techniques and Resources. The former is a general guide to techniques for the design and analysis of computer algorithms. The Resources section is intended for browsing and reference, andcomprises the catalog of algorithmic resources, implementations, and an extensive bibliography.
To the Reader
I have been gratiﬁed by the warm reception the ﬁrst edition of The Algorithm Design Manual has received since its initial publication in 1997. It has been recognized as a unique guide to using algorithmic techniques to solve problems that often arise in practice. But muchhas changed in the world since the The Algorithm Design Manual was ﬁrst published over ten years ago. Indeed, if we date the origins of modern algorithm design and analysis to about 1970, then roughly 30% of modern algorithmic history has happened since the ﬁrst coming of The Algorithm Design Manual. Three aspects of The Algorithm Design Manual have been particularly beloved: (1) the catalog of...