Atjaunināt sīkdatņu piekrišanu

Algorithm Design with Haskell [Hardback]

4.43/5 (13 ratings by Goodreads)
(University of Oxford), (University of Oxford)
  • Formāts: Hardback, 450 pages, height x width x depth: 252x178x29 mm, weight: 930 g, Worked examples or Exercises; 3 Halftones, black and white; 25 Line drawings, black and white
  • Izdošanas datums: 09-Jul-2020
  • Izdevniecība: Cambridge University Press
  • ISBN-10: 1108491618
  • ISBN-13: 9781108491617
  • Hardback
  • Cena: 55,81 €*
  • * ši ir gala cena, t.i., netiek piemērotas nekādas papildus atlaides
  • Standarta cena: 74,42 €
  • Ietaupiet 25%
  • Grāmatu piegādes laiks ir 3-4 nedēļas, ja grāmata ir uz vietas izdevniecības noliktavā. Ja izdevējam nepieciešams publicēt jaunu tirāžu, grāmatas piegāde var aizkavēties.
  • Daudzums:
  • Ielikt grozā
  • Piegādes laiks - 2-4 nedēļas
  • Pievienot vēlmju sarakstam
  • Formāts: Hardback, 450 pages, height x width x depth: 252x178x29 mm, weight: 930 g, Worked examples or Exercises; 3 Halftones, black and white; 25 Line drawings, black and white
  • Izdošanas datums: 09-Jul-2020
  • Izdevniecība: Cambridge University Press
  • ISBN-10: 1108491618
  • ISBN-13: 9781108491617
"This book is devoted to five main principles of algorithm design: divide and conquer, greedy algorithms, thinning, dynamic programming, and exhaustive search. These principles are presented using Haskell, a purely functional language, leading to simplerexplanations and shorter programs than would be obtained with imperative languages. Carefully selected examples, both new and standard, reveal the commonalities and highlight the differences between algorithms. The algorithm developments use equational reasoning where applicable, clarifying the applicability conditions and correctness arguments. Every chapter concludes with exercises (nearly 300 in total), each with complete answers, allowing the reader to consolidate their understanding and apply the techniques to a range of problems. The book serves students (both undergraduate and postgraduate), researchers, teachers, and professionals who want to know more about what goes into a good algorithm and how such algorithms can be expressed in purely functional terms"--

Recenzijas

'I strongly suspect that Richard Bird hides a magically productive book writing apparatus in his office. This time around, Bird pulled the machine's levers together with Jeremy Gibbons and out came Algorithm Design with Haskell, a book that is remarkable in many ways the authors recast a number of classical problems in terms of thinning, including ones like knapsack which otherwise have been tackled via dynamic programming for ages. These fresh very confidently and competently presented- takes on established material are true highlights of the text.' Torsten Grust, Journal of Functional Programming

Papildus informācija

Ideal for learning or reference, this book explains the five main principles of algorithm design and their implementation in Haskell.
Preface xiii
PART ONE BASICS
1(58)
1 Functional programming
5(20)
1.1 Basic types and functions
5(2)
1.2 Processing lists
7(2)
1.3 Inductive and recursive definitions
9(2)
1.4 Fusion
11(3)
1.5 Accumulating and tupling
14(2)
1.6
Chapter notes
16(1)
References
16(1)
Exercises
16(3)
Answers
19(6)
2 Timing
25(18)
2.1 Asymptotic notation
25(2)
2.2 Estimating running times
27(5)
2.3 Running times in context
32(2)
2.4 Amortised running times
34(4)
2.5
Chapter notes
38(1)
References
38(1)
Exercises
38(2)
Answers
40(3)
3 Useful data structures
43(16)
3.1 Symmetric lists
43(4)
3.2 Random-access lists
47(4)
3.3 Arrays
51(2)
3.4
Chapter notes
53(1)
References
54(1)
Exercises
54(2)
Answers
56(3)
PART TWO DIVIDE AND CONQUER
59(82)
4 Binary search
63(30)
4.1 A one-dimensional search problem
63(4)
4.2 A two-dimensional search problem
67(6)
4.3 Binary search trees
73(8)
4.4 Dynamic sets
81(3)
4.5
Chapter notes
84(1)
References
84(1)
Exercises
85(2)
Answers
87(6)
5 Sorting
93(28)
5.1 Quicksort
94(2)
5.2 Mergesort
96(5)
5.3 Heapsort
101(1)
5.4 Bucketsort and Radixsort
102(4)
5.5 Sorting sums
106(4)
5.6
Chapter notes
110(1)
References
110(1)
Exercises
111(3)
Answers
114(7)
6 Selection
121(20)
6.1 Minimum and maximum
121(3)
6.2 Selection from one set
124(4)
6.3 Selection from two sets
128(4)
6.4 Selection from the complement of a set
132(3)
6.5
Chapter notes
135(1)
References
135(1)
Exercises
135(2)
Answers
137(4)
PART THREE GREEDY ALGORITHMS
141(96)
7 Greedy algorithms on lists
145(32)
7.1 A generic greedy algorithm
145(2)
7.2 Greedy sorting algorithms
147(4)
7.3 Coin-changing
151(5)
7.4 Decimal fractions in Tr-jX
156(5)
7.5 Nondeterministic functions and refinement
161(4)
7.6 Summary
165(1)
7.7
Chapter notes
165(1)
References
166(1)
Exercises
166(4)
Answers
170(7)
8 Greedy algorithms on trees
177(28)
8.1 Minimum-height trees
177(10)
8.2 Huffman coding trees
187(9)
8.3 Priority queues
196(3)
8.4
Chapter notes
199(1)
References
199(1)
Exercises
199(2)
Answers
201(4)
9 Greedy algorithms on graphs
205(32)
9.1 Graphs and spanning trees
205(3)
9.2 Kruskal's algorithm
208(3)
9.3 Disjoint sets and the union-find algorithm
211(4)
9.4 Prim's algorithm
215(4)
9.5 Single-source shortest paths
219(1)
9.6 Dijkstra's algorithm
220(4)
9.7 The jogger's problem
224(4)
9.8
Chapter notes
228(1)
References
228(1)
Exercises
229(2)
Answers
231(6)
PART FOUR THINNING ALGORITHMS
237(72)
10 Introduction to thinning
241(26)
10.1 Theory
241(3)
10.2 Paths in a layered network
244(4)
10.3 Coin-changing revisited
248(4)
10.4 The knapsack problem
252(3)
10.5 A general thinning algorithm
255(2)
10.6
Chapter notes
257(1)
References
257(1)
Exercises
257(4)
Answers
261(6)
11 Segments and subsequences
267(22)
11.1 The longest upsequence
267(3)
11.2 The longest common subsequence
270(4)
11.3 A short segment with maximum sum
274(6)
11.4
Chapter notes
280(1)
References
281(1)
Exercises
281(2)
Answers
283(6)
12 Partitions
289(20)
12.1 Ways of generating partitions
289(2)
12.2 Managing two bank accounts
291(3)
12.3 The paragraph problem
294(5)
12.4
Chapter notes
299(1)
References
300(1)
Exercises
300(3)
Answers
303(6)
PART FIVE DYNAMIC PROGRAMMING
309(56)
13 Efficient recursions
313(22)
13.1 Two numeric examples
313(3)
13.2 Knapsack revisited
316(3)
13.3 Minimum-cost edit sequences
319(3)
13.4 Longest common subsequence revisited
322(1)
13.5 The shuttle-bus problem
323(3)
13.6
Chapter notes
326(1)
References
326(1)
Exercises
327(3)
Answers
330(5)
14 Optimum bracketing
335(30)
14.1 A cubic-time algorithm
336(3)
14.2 A quadratic-time algorithm
339(2)
14.3 Examples
341(4)
14.4 Proof of monotonicity
345(2)
14.5 Optimum binary search trees
347(2)
14.6 The Garsia-Wachs algorithm
349(9)
14.7
Chapter notes
358(1)
References
358(1)
Exercises
359(3)
Answers
362(3)
PART SIX EXHAUSTIVE SEARCH
365(67)
15 Ways of searching
369(36)
15.1 Implicit search and the rc-queens problem
369(7)
15.2 Expressions with a given sum
376(2)
15.3 Depth-first and breadth-first search
378(5)
15.4 Lunar Landing
383(3)
15.5 Forward planning
386(3)
15.6 Rush Hour
389(4)
15.7
Chapter notes
393(1)
References
394(1)
Exercises
395(3)
Answers
398(7)
16 Heuristic search
405(27)
16.1 Searching with an optimistic heuristic
406(5)
16.2 Searching with a monotonic heuristic
411(4)
16.3 Navigating a warehouse
415(4)
16.4 The 8-puzzle
419(6)
16.5
Chapter notes
425(1)
References
425(1)
Exercises
426(2)
Answers
428(4)
Index 432
Richard Bird is the author of a number of well-received books on Haskell, including Thinking Functionally with Haskell (Cambridge, 2015) and Pearls of Functional Algorithm Design (Cambridge, 2010). He retired in 2008 and is now an Emeritus Professor at the University of Oxford. Jeremy Gibbons is Professor of Computing at the University of Oxford, where he teaches on the part-time professional Master's programme in software engineering. He is joint Editor-in-Chief of the Journal of Functional Programming, past Chair of IFIP Working Group 2.1 on Algorithmic Languages and Calculi, and past Vice-Chair of ACM SIGPLAN.