♥ Python and Algorithms ♥ Mari Wahl, [email protected] University of New York at Stony Brook May 24, 2013 “There’s nothing to fear but the fear itself. That’s called recursion, and that would lead you to infinite fear.” Hello, human! Welcome to my book on Python and algorithms! If you are reading this you probably agree with me that those two can be a lot of fun together (or you might be lost, and in this case I suggest you give it a try anyway!). Also, many of the examples shown here are available in my git repository, together with several other (more advanced) examples for abstract data structures, trees, graphs, and solutions for the Euler Project and the Topcoder website. Don’t forget to check them out! This text was written purely for fun (I know, I know, this is a broad definition of the word fun...) with no pretensions for anything big, so please forgive me (or better, let me know) if you find any typo or mistake. I am not a computer scientist by formation (I am actually an almost-I-swear-it-is-close-Ph.D. in Physics) so this maybe makes things a little less usual (or risky?). I hope you have fun! Mari, Stony Brook, NY Summer/2013 4 Contents I Flying with Python 9 1 Numbers 11 1.1 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2 Floats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4 The fractions Module . . . . . . . . . . . . . . . . . . . . . 14 1.5 The decimal Module . . . . . . . . . . . . . . . . . . . . . . . 15 1.6 Other Representations . . . . . . . . . . . . . . . . . . . . . . 15 1.7 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 16 2 Built-in Sequence Types 25 2.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.2 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.4 Bytes and Byte Arrays . . . . . . . . . . . . . . . . . . . . . . 43 3 Collection Data Structures 45 3.1 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3 Python’s collection Data Types . . . . . . . . . . . . . . . 54 3.4 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 58 4 Python’s Structure and Modules 63 4.1 Modules in Python . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2 Control Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.3 File Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.4 Multiprocessing and Threading . . . . . . . . . . . . . . . . . 79 4.5 Error Handling in Python . . . . . . . . . . . . . . . . . . . . 81 4.6 Debugging and Profiling . . . . . . . . . . . . . . . . . . . . . 83 5 6 CONTENTS 4.7 Unit Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5 Object-Oriented Design 89 5.1 Classes and Objects . . . . . . . . . . . . . . . . . . . . . . . 90 5.2 Principles of OOP . . . . . . . . . . . . . . . . . . . . . . . . 91 5.3 Python Design Patterns . . . . . . . . . . . . . . . . . . . . . 94 5.4 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 96 II Algorithms are Fun 99 6 Additional Abstract Data Structures 101 6.1 Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.2 Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.3 Deques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.4 Priority Queues and Heaps . . . . . . . . . . . . . . . . . . . 110 6.5 Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.6 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 120 7 Asymptotic Analysis 133 7.1 Complexity Classes . . . . . . . . . . . . . . . . . . . . . . . . 133 7.2 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.3 Runtime in Functions . . . . . . . . . . . . . . . . . . . . . . 136 8 Sorting 139 8.1 Quadratic Sort . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.2 Linear Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 8.3 Loglinear Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 8.4 Comparison Between Sorting Methods . . . . . . . . . . . . . 148 8.5 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 149 9 Searching 153 9.1 Sequential Search . . . . . . . . . . . . . . . . . . . . . . . . . 153 9.2 Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 9.3 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 156 10 Dynamic Programming 163 10.1 Memoization . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 10.2 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 165 CONTENTS 7 III Climbing Graphs and Trees 169 11 Introduction to Graphs 171 11.1 Basic Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 171 11.2 The Neighborhood Function . . . . . . . . . . . . . . . . . . . 173 11.3 Introduction to Trees . . . . . . . . . . . . . . . . . . . . . . . 176 12 Binary Trees 179 12.1 Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . 179 12.2 Representing Binary Trees . . . . . . . . . . . . . . . . . . . . 179 12.3 Binary Search Trees . . . . . . . . . . . . . . . . . . . . . . . 183 12.4 Self-Balancing BST . . . . . . . . . . . . . . . . . . . . . . . . 186 12.5 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 193 13 Traversals and Problems on Graphs and Trees 207 13.1 Depth-First Search . . . . . . . . . . . . . . . . . . . . . . . . 207 13.2 Breadth-First Search . . . . . . . . . . . . . . . . . . . . . . 208 13.3 Representing Tree Traversals . . . . . . . . . . . . . . . . . . 209 13.4 Additional Exercises . . . . . . . . . . . . . . . . . . . . . . . 211 8 CONTENTS Part I Flying with Python 9
Description: