ebook img

How To Think About Algorithms [pdf] PDF

295 Pages·2007·2.4 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview How To Think About Algorithms [pdf]

How to Think About Algorithms Loop Invariants and Recursion Je(cid:11) Edmonds Winter 2003, Version 0.6 (cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0) \What's twice eleven?" I said to Pooh. \Twice what?" said Pooh to Me. \I think it ought to be twenty-two." \Just what I think myself," said Pooh. \It wasn't an easy sum to do, But that's what it is," said Pooh, said he. (cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0) \That's what it is," said Pooh. Where ever I am, there's always Pooh, There's always Pooh and Me. \What would I do?" I said to Pooh. \If it wasn't for you," and Pooh said: \True, It isn't much fun for One, but Two C a n s t (cid:0)i(cid:0)c(cid:0)k(cid:0)(cid:0)(cid:0)(cid:0)t(cid:0)(cid:0)o(cid:0)(cid:0)g(cid:0)(cid:0)e(cid:0)(cid:0)t(cid:0)h(cid:0)(cid:0)(cid:0)e(cid:0)(cid:0)r(cid:0),(cid:0)"(cid:0)(cid:0)(cid:0)(cid:0)s(cid:0)a(cid:0)(cid:0)y(cid:0)(cid:0)(cid:0)s(cid:0)(cid:0)(cid:0)P(cid:0)(cid:0)o(cid:0)(cid:0)(cid:0)o(cid:0)(cid:0)h(cid:0)(cid:0),(cid:0)(cid:0)s(cid:0)(cid:0)a(cid:0)(cid:0)y(cid:0)(cid:0)s(cid:0)(cid:0)(cid:0)h(cid:0)(cid:0)(cid:0)e(cid:0).(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0)(cid:0) \That's how it is," says Pooh. Little blue bird on my shoulder. It's the truth. It's actual. Every thing is satisfactual. Zippedy do dah, zippedy ay; wonderful feeling, wonderful day. Dedicated to Joshua and Micah Contents Contents by Application v Preface vii To the Educator and the Student . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Feedback Requested . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 I Relevant Mathematics 2 1 Relevant Mathematics 4 1.1 Existential and Universal Quanti(cid:12)ers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Logarithms and Exponentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 The Time (and Space) Complexity of an Algorithm. . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.1 Di(cid:11)erent Models of Time and Space Complexity . . . . . . . . . . . . . . . . . . . . . 11 1.3.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4 Asymptotic Notations and Their Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4.1 The Classic Classi(cid:12)cations of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4.2 Comparing The Classes of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.3 Other Useful Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.4 Di(cid:11)erent Levels of Detail When Classifying a Function . . . . . . . . . . . . . . . . . . 21 1.4.5 Constructing and Deconstructing the Classes of Functions . . . . . . . . . . . . . . . . 21 1.4.6 The Formal De(cid:12)nition of (cid:2) and O Notation . . . . . . . . . . . . . . . . . . . . . . . 23 1.4.7 Formal Proofs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.4.8 Solving Equations by Ignoring Details . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.5 Adding Made Easy Approximations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.5.2 The Classic Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.5.3 The Ranges of The Adding Made Easy Approximations . . . . . . . . . . . . . . . . . 32 1.5.4 Harder Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.6 Recurrence Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.6.1 Relating Recurrence Relations to the Timing of Recursive Programs . . . . . . . . . . 37 1.6.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 1.6.3 The Classic Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 1.6.4 Other Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2 Abstractions 49 2.1 Di(cid:11)erent Representations of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.2 Abstract Data Types (ADTs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 i ii CONTENTS II Loop Invariants for Iterative Algorithms 56 3 Loop Invariants - The Techniques and the Theory 58 3.1 Assertions and Invariants As Boundaries Between Parts . . . . . . . . . . . . . . . . . . . . . 58 3.2 An Introduction to Iterative Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.2.1 Various Abstractions and the Main Steps . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.2.2 Examples: Quadratic Sorts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.3 The Steps In Developing An Iterative Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.3.1 The Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.3.2 Example: Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.4 A Formal Proof of Correctness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.4.1 The Formal Proof Technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.4.2 Proving Correctnessof Iterative Algorithms with Induction . . . . . . . . . . . . . . . 73 4 Examples of Iterative Algorithms 75 4.1 VLSI Chip Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.2 Colouring The Plane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.3 Euclid's GCD Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 Magic Sevens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5 Implementations of Abstract Data Types (ADTs) 85 5.1 The List, Stack, and Queue ADT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.1.1 Array Implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.1.2 Linked List Implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.1.3 Merging With A Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.1.4 ParsingWith A Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2 Graphs and Tree ADT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2.1 Tree Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2.2 Union-Find Set Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2.3 Balanced Binary Search Trees (AVL Trees) . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2.4 Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 6 Other Sorting Algorithms and Combining Techniques 95 6.1 Heap Sort and PriorityQueues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.2 Linear Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.2.1 Counting Sort (A Stable Sort) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.2.2 Radix Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.2.3 Radix/Counting Sort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 7 Deterministic Finite Automaton 104 8 Graph Search Algorithms 109 8.1 A Generic Search Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 8.2 Breadth-First Search/ShortestPaths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 8.3 Shortest-Weighted Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 8.4 Depth-First Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 8.5 Linear Ordering of a Partial Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 9 Network Flows 126 9.1 A Hill Climbing Algorithm with a Small Local Maximum . . . . . . . . . . . . . . . . . . . . 127 9.2 The Primal-Dual Hill Climbing Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 9.3 The Steepest Assent Hill Climbing Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 9.4 Linear Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 CONTENTS iii 10 Greedy Algorithms 143 10.1 The Techniques and the Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 10.2 Examples of Greedy Algorithms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 10.2.1 A Fixed Priority Greedy Algorithm for The Job/EventScheduling Problem . . . . . . 149 10.2.2 An Adaptive PriorityGreedy Algorithm for The Interval Cover Problem . . . . . . . . 152 10.2.3 The Minimum-Spanning-Tree Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 III Recursive Algorithms 160 11 An Introduction to Recursion 162 11.1 Recursion - Abstractions, Techniques, and Theory . . . . . . . . . . . . . . . . . . . . . . . . 162 11.1.1 Di(cid:11)erent Abstractions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 11.1.2 Circular Argument? Looking Forwardsvs Backwards. . . . . . . . . . . . . . . . . . . 163 11.1.3 The Friends Recursion Level of Abstraction . . . . . . . . . . . . . . . . . . . . . . . . 164 11.1.4 Proving Correctnesswith Strong Induction . . . . . . . . . . . . . . . . . . . . . . . . 165 11.1.5 The Stack Frame Levels of Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . 166 11.2 Some Simple Examples of Recursive Algorithms. . . . . . . . . . . . . . . . . . . . . . . . . . 168 11.2.1 Sorting and Selecting Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 11.2.2 Operations on Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 11.2.3 Akerman's Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 12 Recursion on Trees 179 12.1 Abstractions, Techniques, and Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 12.2 Simple Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 12.3 Generalizing the Problem Solved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 12.4 Representing Expressions with Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 12.5 Pretty Tree Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 12.6 Maintaining an AVL Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 13 Recursive Images 193 13.1 Drawing a Recursive Image from a Fixed Recursive and Base Case Images . . . . . . . . . . . 193 13.2 Randomly Generating A Maze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 14 Parsing with Context-Free Grammars 198 15 Recursive Back Tracking Algorithms 205 15.1 The Theory of Recursive Back Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 15.1.1 Optimization Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 15.1.2 Classifying the Solutions and the Best of the Best . . . . . . . . . . . . . . . . . . . . 206 15.1.3 Example: The Shortest Path within a Leveled Graph . . . . . . . . . . . . . . . . . . 210 15.1.4 SubInstances and SubSolutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 15.1.5 The Question For the Little Bird . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 15.1.6 Speeding Up the Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 15.2 Pruning Invalid Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 15.2.1 Satis(cid:12)ability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 15.2.2 Scrabble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 15.2.3 Queens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 15.3 Pruning Equally Valued Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 15.3.1 Recursive Depth First Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 iv CONTENTS 16 Dynamic Programming 223 16.1 The Iterative Loop Invariant Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 16.2 The Recursive Back Tracking Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 16.2.1 Eliminating Repeated SubInstances With Memoization . . . . . . . . . . . . . . . . . 225 16.2.2 Redundancy in The Shortest Path within a Leveled Graph: . . . . . . . . . . . . . . . 227 16.2.3 The Set of SubInstances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 16.2.4 Filling In The Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 16.2.5 Reversing the Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 16.2.6 A Slow Dynamic Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 16.2.7 Decreasing the Time and Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 16.2.8 Using Closure to Determine the Complete Set of Subinstances Called . . . . . . . . . 234 16.3 Examples of Dynamic Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 16.3.1 Printing Neatly Problem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 16.3.2 Longest Common Subsequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 16.3.3 A Greedy Dynamic Program: The Weighted Job/Activity Scheduling Problem . . . . 241 16.3.4 Exponential Time? The Integer-KnapsackProblem. . . . . . . . . . . . . . . . . . . . 243 16.3.5 The Solution Viewed as a Tree: Chains of Matrix Multiplications . . . . . . . . . . . . 245 16.3.6 Generalizing the Problem Solved: Best AVL Tree . . . . . . . . . . . . . . . . . . . . . 249 16.3.7 Another View of a Solution: All Pairs Shortest Paths with Negative Cycles . . . . . . 251 16.3.8 Parsingwith Context-Free Grammars . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 IV Just a Taste 263 17 Computational Complexity of a Problem 265 17.1 Di(cid:11)erent Models of Computation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 17.2 Expressing Time Complexity with Existential and Universal Quanti(cid:12)ers . . . . . . . . . . . . 266 17.3 Lower Bounds for Sorting using Information Theory . . . . . . . . . . . . . . . . . . . . . . . 269 18 Reductions 273 18.1 Upper Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 18.2 Lower Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 18.2.1 Integer Factorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 18.2.2 NP-Completeness. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 19 Things to Add 276 19.1 Parallel Computation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 19.2 Probabilistic Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 19.3 Amortization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 20 Exercise Solutions 278 21 Conclusion 284 Contents by Application Thoughthis bookisorganizedwith respecttothe algorithmictechniqueused, youcanreaditin almostany order. Another reasonable order is with respect to application. The only restriction is that you read the \techniques and theory" section of a chapter before you read any of the examples within it. Relevant Mathematics Existential and Universal Quanti(cid:12)ers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1.1 Adding Made Easy ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1.3 Recurrence Relations ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1.4 Probability Theory :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ?? Information Theory ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 17.2 Computational Complexity of a Problem The Time (and Space) Complexity of an Algorithm ::::::::::::::::::::::::::::::::::::::::::: 1.3 Asymptotic Notations and Their Properties ::::::::::::::::::::::::::::::::::::::::::::::::::: 1.2 Formal Proof of Correctness :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3.4,11.1.4 Di(cid:11)erent Models of Computation :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 17.1 Expressing Time Complexity with Existential and Universal Quanti(cid:12)ers :::::::::::::::::::::: 17.2 Lower Bounds for Sorting using Information Theory :::::::::::::::::::::::::::::::::::::::::: 17.3 The Integer-KnapsackProblem :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16.3.4 Nondeterminism ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 15.1.2,18.2.2 NP-Completeness :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 18.2.2 Data Structures Stacks and Queues :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2.2,5.1 Priority Queues ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2.2,6.1 Union-Find Set Systems ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2.2,5.2.2 Dictionaries :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2.2 Graphs ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1.3,2.2 Trees :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2.2,12 Binary Search Trees :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 5.2.3,16.3.6 AVL trees :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 12.3,12.6,16.3.6 Algorithmic Techniques Loop Invariants for Iterative Algorithms :::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3 Greedy Algorithms :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 10.1 v vi CONTENTS BY APPLICATION Dynamic Programming :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16 Hill Climbing ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 9 Reductions (Upper and Lower Bounds) :::::::::::::::::::::::::::::::::::::::::::::::::::::::: 18 Sorting and Selection Iterative Quadratic Sorts :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3.2.2 Binary Search :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3.3.2 Recursive Sorting and Selecting Algorithms :::::::::::::::::::::::::::::::::::::::::::::::: 11.2.1 Heap Sort and Priority Queues ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 6.1 Linear Radix/Counting Sort ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 6.2 Lower Bounds for Sorting using Information Theory :::::::::::::::::::::::::::::::::::::::::: 17.3 Numerical Calculations Euclid's GCD Algorithm :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4.3 Mod and Adding Integers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 7 Multiplication, Powers,and FFT ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 11.2.2 Representing Expressionswith Trees ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 12 Chains of Matrix Multiplications ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16.3.5 Graph Algorithms Data Structures :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1.3 Recursive Depth First Search :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 15.3.1 The Minimum-Spanning-Tree Problem ::::::::::::::::::::::::::::::::::::::::::::::::::::: 10.2.3 A Generic Search Algorithm :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8.1 Breadth-First Search/Shortest Paths :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8.2 Shortest-Weighted Paths :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8.3 Depth-First Search ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8.4 Linear Ordering of a Partial Order :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8.5 All Pairs Shortest Paths ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16.3.7 Network Flows ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 9 Parsing with Context-Free Grammars Recursive Look Ahead Once ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 Dynamic ProgrammingParsing :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16.3.8

Description:
\What's twice eleven?" I said to Pooh. \Twice what?" said Pooh to Me. \I think it ought to be twenty-two." \Just what I think myself," said Pooh. \It wasn't an easy
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.