Python Algorithms 2nd Edition

Python Algorithms 2nd Edition: Mastering Basic Algorithms in the Python Language

Download

Introduction

What’s All This, Then?
This is a book about algorithmic problem solving for Python programmers. Just like books on, say, object-oriented patterns, the problems it deals with are of a general nature—as are the solutions. For an algorist, there is more to the job than simply implementing or executing an existing algorithm, however. You are expected to come up with new algorithms—new general solutions to hitherto unseen, general problems. In this book, you are going to learn principles for constructing such solutions.

This is not your typical algorithm book, though. Most of the authoritative books on the subject (such as Knuth’s classics or the industry-standard textbook by Cormen et al.) have a heavy formal and theoretical slant, even though some of them (such as the one by Kleinberg and Tardos) lean more in the direction of readability. Instead of trying to replace any of these excellent books, I’d like to supplement them. Building on my experience from teaching algorithms, I try to explain as clearly as possible how the algorithms work and what common principles underlie many of them. For a programmer, these explanations are probably enough. Chances are you’ll be able to understand why the algorithms are correct and how to adapt them to new problems you may come to face. If, however, you need the full depth of the more formalistic and encyclopedic textbooks, I hope the foundation you get in this book will help you understand the theorems and proofs you encounter there

There is another genre of algorithm books as well: the “(Data Structures and) Algorithms in blank” kind, where the blank is the author’s favorite programming language. There are quite a few of these (especially for blank = Java, it seems), but many of them focus on relatively basic data structures, to the detriment of the meatier stuff. This is understandable if the book is designed to be used in a basic course on data structures, for example, but for a Python programmer, learning about singly and doubly linked lists may not be all that exciting (although you will hear a bit about those in the next chapter). And even though techniques such as hashing are highly important, you get hash tables for free in the form of Python dictionaries; there’s no need to implement them from scratch. Instead, I focus on more high-level algorithms. Many important concepts that are available as black-box implementations either in the Python language itself or in the standard library (such as sorting, searching, and hashing) are explained more briefly, in special “Black Box” sidebars throughout the text.

There is, of course, another factor that separates this book from those in the “Algorithms in Java/C/C++/C#” genre, namely, that the blank is Python. This places the book one step closer to the language-independent books (such as those by Knuth,3 Cormen et al., and Kleinberg and Tardos, for example), which often use pseudocode, the kind of fake programming language that is designed to be readable rather than executable. One of Python’s distinguishing features is its readability; it is, more or less, executable pseudocode. Even if you’ve never programmed in Python, you could probably decipher the meaning of most basic Python programs. The code in this book is designed to be readable exactly in this fashion—you need not be a Python expert to understand the examples (although you might need to look up some built-in functions and the like). And if you want to pretend the examples are actually pseudocode, feel free to do so

What the book is about:
• Algorithm analysis, with a focus on asymptotic running time
• Basic principles of algorithm design
• How to represent commonly used data structures in Python
• How to implement well-known algorithms in Python What the book covers only briefly or partially: • Algorithms that are directly available in Python, either as part of the language or via the standard library
• Thorough and deep formalism (although the book has its share of proofs and proof-like explanations)

What the book isn’t about: 
• Numerical or number-theoretical algorithms (except for some floating-point hints in Chapter 2)
• Parallel algorithms and multicore programming
As you can see, “implementing things in Python” is just part of the picture. The design principles and theoretical foundations are included in the hope that they’ll help you design your own algorithms and data structures
Share This