F E L L | D I S C R E T E A S L S T R U C T U R E S A M Discrete Structures introduces readers to the mathematical structures and methods that form the foundation of computer science and features multiple techniques that readers will turn to regularly throughout their careers in computer and information sciences. Over the course of five modules, students learn specific skills including binary and modular arithmetic, set notation, methods of counting, evaluating sums, and solving D recurrences. They study the basics of probability, proof by induction, growth of I S functions, and analysis techniques. The book also discusses general problem-solving C techniques that are widely applicable to real problems. Each module includes R motivation applications, technique, theory, and further opportunities for application. E T E Informed by extensive experience teaching in computer science programs, Discrete S Structures has been developed specifically for first-year students in those programs. T The material is also suitable for courses in computer engineering, as well as those for R U students who are transferring from other disciplines and just beginning their comput- C er science or engineering education. T U Harriet Fell holds a Ph.D. in mathematics from the Massachusetts Institute of R E Technology, and is a professor emerita of computer science at Northeastern Universi- S ty. Dr. Fell is a double patent holder who has received grants from the National Institute of Health, the National Science Foundation, and the U.S. Department of Education. Javed A. Aslam holds a Ph.D. in computer science from the Massachusetts Institute of Technology and is a professor of computer science at Northeastern University and the associate dean of faculty in the College of Computer and Information Science. Dr. Aslam's research interests include information retrieval, machine learning, and the design and analysis of algorithms. D I S C R E T E S T R U C T U R E S c o g cognella® ACADEMIC n PUBLISHING ell BY H A R R I E T F E L L AND J A V E D A . A S L A M a ® SKU 81554-1B GPUBLISHINACADEMIC E D I T I O N Discrete Structures Harriet Fell Javed A. Aslam (cid:35)(cid:66)(cid:84)(cid:84)(cid:74)(cid:78)(cid:1)(cid:41)(cid:66)(cid:78)(cid:66)(cid:69)(cid:70)(cid:73)(cid:13)(cid:1)(cid:36)(cid:38)(cid:48)(cid:1)(cid:66)(cid:79)(cid:69)(cid:1)(cid:49)(cid:86)(cid:67)(cid:77)(cid:74)(cid:84)(cid:73)(cid:70)(cid:83) (cid:44)(cid:66)(cid:84)(cid:84)(cid:74)(cid:70)(cid:1)(cid:40)(cid:83)(cid:66)(cid:87)(cid:70)(cid:84)(cid:13)(cid:1)(cid:37)(cid:74)(cid:83)(cid:70)(cid:68)(cid:85)(cid:80)(cid:83)(cid:1)(cid:80)(cid:71)(cid:1)(cid:34)(cid:68)(cid:82)(cid:86)(cid:74)(cid:84)(cid:74)(cid:85)(cid:74)(cid:80)(cid:79)(cid:84) (cid:43)(cid:66)(cid:78)(cid:74)(cid:70)(cid:1)(cid:40)(cid:74)(cid:72)(cid:66)(cid:79)(cid:85)(cid:74)(cid:13)(cid:1)(cid:52)(cid:70)(cid:79)(cid:74)(cid:80)(cid:83)(cid:1)(cid:46)(cid:66)(cid:79)(cid:66)(cid:72)(cid:74)(cid:79)(cid:72)(cid:1)(cid:38)(cid:69)(cid:74)(cid:85)(cid:80)(cid:83) (cid:46)(cid:74)(cid:72)(cid:86)(cid:70)(cid:77)(cid:1)(cid:46)(cid:66)(cid:68)(cid:74)(cid:66)(cid:84)(cid:13)(cid:1)(cid:52)(cid:70)(cid:79)(cid:74)(cid:80)(cid:83)(cid:1)(cid:40)(cid:83)(cid:66)(cid:81)(cid:73)(cid:74)(cid:68)(cid:1)(cid:37)(cid:70)(cid:84)(cid:74)(cid:72)(cid:79)(cid:70)(cid:83) (cid:52)(cid:70)(cid:74)(cid:69)(cid:90)(cid:1)(cid:36)(cid:83)(cid:86)(cid:91)(cid:13)(cid:1)(cid:52)(cid:70)(cid:79)(cid:74)(cid:80)(cid:83)(cid:1)(cid:34)(cid:68)(cid:82)(cid:86)(cid:74)(cid:84)(cid:74)(cid:85)(cid:74)(cid:80)(cid:79)(cid:84)(cid:1)(cid:38)(cid:69)(cid:74)(cid:85)(cid:80)(cid:83) (cid:46)(cid:80)(cid:79)(cid:74)(cid:76)(cid:66)(cid:1)(cid:37)(cid:91)(cid:74)(cid:66)(cid:78)(cid:76)(cid:66)(cid:13)(cid:1)(cid:49)(cid:83)(cid:80)(cid:75)(cid:70)(cid:68)(cid:85)(cid:1)(cid:38)(cid:69)(cid:74)(cid:85)(cid:80)(cid:83) (cid:35)(cid:83)(cid:74)(cid:66)(cid:79)(cid:1)(cid:39)(cid:66)(cid:73)(cid:70)(cid:90)(cid:13)(cid:1)(cid:45)(cid:74)(cid:68)(cid:70)(cid:79)(cid:84)(cid:74)(cid:79)(cid:72)(cid:1)(cid:52)(cid:81)(cid:70)(cid:68)(cid:74)(cid:66)(cid:77)(cid:74)(cid:84)(cid:85) (cid:34)(cid:67)(cid:67)(cid:70)(cid:90)(cid:1)(cid:41)(cid:66)(cid:84)(cid:85)(cid:74)(cid:79)(cid:72)(cid:84)(cid:13)(cid:1)(cid:34)(cid:84)(cid:84)(cid:80)(cid:68)(cid:74)(cid:66)(cid:85)(cid:70)(cid:1)(cid:49)(cid:83)(cid:80)(cid:69)(cid:86)(cid:68)(cid:85)(cid:74)(cid:80)(cid:79)(cid:1)(cid:38)(cid:69)(cid:74)(cid:85)(cid:80)(cid:83) (cid:36)(cid:80)(cid:81)(cid:90)(cid:83)(cid:74)(cid:72)(cid:73)(cid:85)(cid:1)(cid:170)(cid:1)(cid:19)(cid:17)(cid:18)(cid:24)(cid:1)(cid:67)(cid:90)(cid:1)(cid:41)(cid:66)(cid:83)(cid:83)(cid:74)(cid:70)(cid:85)(cid:1)(cid:39)(cid:70)(cid:77)(cid:77)(cid:1)(cid:66)(cid:79)(cid:69)(cid:1)(cid:43)(cid:66)(cid:87)(cid:70)(cid:69)(cid:1)(cid:34)(cid:15)(cid:1)(cid:34)(cid:84)(cid:77)(cid:66)(cid:78)(cid:15)(cid:1)(cid:34)(cid:77)(cid:77)(cid:1)(cid:83)(cid:74)(cid:72)(cid:73)(cid:85)(cid:84)(cid:1)(cid:83)(cid:70)(cid:84)(cid:70)(cid:83)(cid:87)(cid:70)(cid:69)(cid:15)(cid:1)(cid:47)(cid:80)(cid:1)(cid:81)(cid:66)(cid:83)(cid:85)(cid:1)(cid:80)(cid:71)(cid:1)(cid:85)(cid:73)(cid:74)(cid:84)(cid:1)(cid:81)(cid:86)(cid:67)(cid:77)(cid:74)(cid:68)(cid:66)(cid:85)(cid:74)(cid:80)(cid:79)(cid:1)(cid:78)(cid:66)(cid:90)(cid:1) (cid:67)(cid:70)(cid:1)(cid:83)(cid:70)(cid:81)(cid:83)(cid:74)(cid:79)(cid:85)(cid:70)(cid:69)(cid:13)(cid:1)(cid:83)(cid:70)(cid:81)(cid:83)(cid:80)(cid:69)(cid:86)(cid:68)(cid:70)(cid:69)(cid:13)(cid:1)(cid:85)(cid:83)(cid:66)(cid:79)(cid:84)(cid:78)(cid:74)(cid:85)(cid:85)(cid:70)(cid:69)(cid:13)(cid:1)(cid:80)(cid:83)(cid:1)(cid:86)(cid:85)(cid:74)(cid:77)(cid:74)(cid:91)(cid:70)(cid:69)(cid:1)(cid:74)(cid:79)(cid:1)(cid:66)(cid:79)(cid:90)(cid:1)(cid:71)(cid:80)(cid:83)(cid:78)(cid:1)(cid:80)(cid:83)(cid:1)(cid:67)(cid:90)(cid:1)(cid:66)(cid:79)(cid:90)(cid:1)(cid:70)(cid:77)(cid:70)(cid:68)(cid:85)(cid:83)(cid:80)(cid:79)(cid:74)(cid:68)(cid:13)(cid:1)(cid:78)(cid:70)(cid:68)(cid:73)(cid:66)(cid:79)(cid:74)(cid:68)(cid:66)(cid:77)(cid:13)(cid:1)(cid:80)(cid:83)(cid:1)(cid:80)(cid:85)(cid:73)(cid:70)(cid:83)(cid:1) (cid:78)(cid:70)(cid:66)(cid:79)(cid:84)(cid:13)(cid:1)(cid:79)(cid:80)(cid:88)(cid:1)(cid:76)(cid:79)(cid:80)(cid:88)(cid:79)(cid:1)(cid:80)(cid:83)(cid:1)(cid:73)(cid:70)(cid:83)(cid:70)(cid:66)(cid:71)(cid:85)(cid:70)(cid:83)(cid:1)(cid:74)(cid:79)(cid:87)(cid:70)(cid:79)(cid:85)(cid:70)(cid:69)(cid:13)(cid:1)(cid:74)(cid:79)(cid:68)(cid:77)(cid:86)(cid:69)(cid:74)(cid:79)(cid:72)(cid:1)(cid:81)(cid:73)(cid:80)(cid:85)(cid:80)(cid:68)(cid:80)(cid:81)(cid:90)(cid:74)(cid:79)(cid:72)(cid:13)(cid:1)(cid:78)(cid:74)(cid:68)(cid:83)(cid:80)(cid:71)(cid:74)(cid:77)(cid:78)(cid:74)(cid:79)(cid:72)(cid:13)(cid:1)(cid:66)(cid:79)(cid:69)(cid:1)(cid:83)(cid:70)(cid:68)(cid:80)(cid:83)(cid:69)(cid:74)(cid:79)(cid:72)(cid:13)(cid:1)(cid:80)(cid:83)(cid:1)(cid:74)(cid:79)(cid:1) (cid:66)(cid:79)(cid:90)(cid:1)(cid:74)(cid:79)(cid:71)(cid:80)(cid:83)(cid:78)(cid:66)(cid:85)(cid:74)(cid:80)(cid:79)(cid:1)(cid:83)(cid:70)(cid:85)(cid:83)(cid:74)(cid:70)(cid:87)(cid:66)(cid:77)(cid:1)(cid:84)(cid:90)(cid:84)(cid:85)(cid:70)(cid:78)(cid:1)(cid:88)(cid:74)(cid:85)(cid:73)(cid:80)(cid:86)(cid:85)(cid:1)(cid:85)(cid:73)(cid:70)(cid:1)(cid:88)(cid:83)(cid:74)(cid:85)(cid:85)(cid:70)(cid:79)(cid:1)(cid:81)(cid:70)(cid:83)(cid:78)(cid:74)(cid:84)(cid:84)(cid:74)(cid:80)(cid:79)(cid:1)(cid:80)(cid:71)(cid:1)(cid:36)(cid:80)(cid:72)(cid:79)(cid:70)(cid:77)(cid:77)(cid:66)(cid:13)(cid:1)(cid:42)(cid:79)(cid:68)(cid:15) (cid:53)(cid:83)(cid:66)(cid:69)(cid:70)(cid:78)(cid:66)(cid:83)(cid:76)(cid:1)(cid:47)(cid:80)(cid:85)(cid:74)(cid:68)(cid:70)(cid:27)(cid:1)(cid:49)(cid:83)(cid:80)(cid:69)(cid:86)(cid:68)(cid:85)(cid:1)(cid:80)(cid:83)(cid:1)(cid:68)(cid:80)(cid:83)(cid:81)(cid:80)(cid:83)(cid:66)(cid:85)(cid:70)(cid:1)(cid:79)(cid:66)(cid:78)(cid:70)(cid:84)(cid:1)(cid:78)(cid:66)(cid:90)(cid:1)(cid:67)(cid:70)(cid:1)(cid:85)(cid:83)(cid:66)(cid:69)(cid:70)(cid:78)(cid:66)(cid:83)(cid:76)(cid:84)(cid:1)(cid:80)(cid:83)(cid:1)(cid:83)(cid:70)(cid:72)(cid:74)(cid:84)(cid:85)(cid:70)(cid:83)(cid:70)(cid:69)(cid:1)(cid:85)(cid:83)(cid:66)(cid:69)(cid:70)(cid:78)(cid:66)(cid:83)(cid:76)(cid:84)(cid:13)(cid:1)(cid:66)(cid:79)(cid:69)(cid:1)(cid:66)(cid:83)(cid:70)(cid:1) (cid:86)(cid:84)(cid:70)(cid:69)(cid:1)(cid:80)(cid:79)(cid:77)(cid:90)(cid:1)(cid:71)(cid:80)(cid:83)(cid:1)(cid:74)(cid:69)(cid:70)(cid:79)(cid:85)(cid:74)(cid:71)(cid:74)(cid:68)(cid:66)(cid:85)(cid:74)(cid:80)(cid:79)(cid:1)(cid:66)(cid:79)(cid:69)(cid:1)(cid:70)(cid:89)(cid:81)(cid:77)(cid:66)(cid:79)(cid:66)(cid:85)(cid:74)(cid:80)(cid:79)(cid:1)(cid:88)(cid:74)(cid:85)(cid:73)(cid:80)(cid:86)(cid:85)(cid:1)(cid:74)(cid:79)(cid:85)(cid:70)(cid:79)(cid:85)(cid:1)(cid:85)(cid:80)(cid:1)(cid:74)(cid:79)(cid:71)(cid:83)(cid:74)(cid:79)(cid:72)(cid:70)(cid:15) (cid:36)(cid:80)(cid:87)(cid:70)(cid:83)(cid:1)(cid:42)(cid:78)(cid:66)(cid:72)(cid:70)(cid:27)(cid:1)(cid:36)(cid:80)(cid:81)(cid:90)(cid:83)(cid:74)(cid:72)(cid:73)(cid:85)(cid:1)(cid:19)(cid:17)(cid:18)(cid:24)(cid:1)(cid:67)(cid:90)(cid:1)(cid:37)(cid:70)(cid:81)(cid:80)(cid:84)(cid:74)(cid:85)(cid:81)(cid:73)(cid:80)(cid:85)(cid:80)(cid:84)(cid:1)(cid:16)(cid:1)(cid:69)(cid:81)(cid:70)(cid:79)(cid:79)(cid:15) (cid:49)(cid:83)(cid:74)(cid:79)(cid:85)(cid:70)(cid:69)(cid:1)(cid:74)(cid:79)(cid:1)(cid:85)(cid:73)(cid:70)(cid:1)(cid:54)(cid:79)(cid:74)(cid:85)(cid:70)(cid:69)(cid:1)(cid:52)(cid:85)(cid:66)(cid:85)(cid:70)(cid:84)(cid:1)(cid:80)(cid:71)(cid:1)(cid:34)(cid:78)(cid:70)(cid:83)(cid:74)(cid:68)(cid:66) (cid:42)(cid:52)(cid:35)(cid:47)(cid:27)(cid:1)(cid:26)(cid:24)(cid:25)(cid:14)(cid:18)(cid:14)(cid:23)(cid:20)(cid:21)(cid:25)(cid:24)(cid:14)(cid:23)(cid:21)(cid:23)(cid:14)(cid:26)(cid:1)(cid:9)(cid:81)(cid:67)(cid:76)(cid:10)(cid:1)(cid:16)(cid:1)(cid:26)(cid:24)(cid:25)(cid:14)(cid:18)(cid:14)(cid:23)(cid:20)(cid:21)(cid:25)(cid:24)(cid:14)(cid:23)(cid:21)(cid:22)(cid:14)(cid:19)(cid:1)(cid:9)(cid:67)(cid:83)(cid:10) Discrete Structures First Edition Harriet Fell Javed A. Aslam College of Computer and Information Science Northeastern University Boston, Massachusetts Onthefrontpage: Pascal’s triangle, mod2. Thefigurerepresents256rowsofPascal’striangle: each odd entry is denoted by a dot, and each even entry is left blank. The resulting self-similar pattern of dots is closely related to the Sierpinski triangle fractal. Table of Contents Preface xiii I Computers and Computing: Numbers, Circuits, and Logic 1 1 Number Representations 3 1.1 Binary Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.1 Simple Binary Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Hexadecimal Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4 Octal Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.5 Converting Between Decimal and Binary . . . . . . . . . . . . . . . . . . . . . . . 11 1.6 Representing Negative Numbers: Two’s Complement . . . . . . . . . . . . . . . . 13 1.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2 Circuits 21 2.1 Transistors and Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Basic Logic Gates: AND, OR, NOT . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.1 AND Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.2 OR Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.3 NOT Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3 Other Logic Gates: NAND, NOR, XOR, XNOR . . . . . . . . . . . . . . . . . . 24 2.3.1 NAND Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 iii 2.3.2 NOR Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.3 XOR Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3.4 XNOR Gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4 Binary Arithmetic: Ripple-carry Adders . . . . . . . . . . . . . . . . . . . . . . . 26 2.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3 Logic 31 3.1 Truth Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2 Basic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.3 Truth Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.4 Logical Equivalence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.5 Normal Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.5.1 Conjunctive Normal Form . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5.2 Disjunctive Normal Form . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5.3 Truth Tables, Formulae, and Circuits . . . . . . . . . . . . . . . . . . . . 37 3.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4 Design of a Simple Processor 43 4.1 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.1 Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.2 Negation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.3 Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.4 Jump If Zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.5 Programming the CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2 Multiplexers and Demultiplexers . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3 Design of the Processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3.2 Extracting the Instruction and Incrementing the PC . . . . . . . . . . . . 48 4.3.3 The Add, Negate, Load, and Jump-if-zero Instructions . . . . . . . . . . . 48 4.3.4 Storing the New Values into the Data Registers and PC . . . . . . . . . . 49 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 II Cryptography: Integers and Modular Arithmetic 55 5 Cryptography and Modular Arithmetic 57 5.1 Simple Shift Ciphers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.1.1 Simple Shift Cipher Toys . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.2 Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.3 The mod Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.1 Properties of mod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.4 Simple Substitution Ciphers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.4.1 Shift Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.4.2 Linear Ciphers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.5 Modular Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.6 Powers mod n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6 Integers and Division 71 6.1 Divides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.2 Primes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.2.1 Finding Primes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.2.2 Prime Number Decomposition . . . . . . . . . . . . . . . . . . . . . . . . 73 6.2.3 More About Primes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.3 Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.3.1 Racket (Scheme) Functions Related to Division . . . . . . . . . . . . . . . 75 6.4 Greatest Common Divisor and Least Common Multiple . . . . . . . . . . . . . . 75 6.4.1 Applications of gcd and lcm . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.5 Euclidean Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.5.1 Using the Euclidean Algorithm . . . . . . . . . . . . . . . . . . . . . . . . 78 6.5.2 Euclidean Algorithm Links . . . . . . . . . . . . . . . . . . . . . . . . . . 79 6.6 Extended Euclidean Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.7 Inverses mod n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7 The RSA (Rivest-Shamir-Adelman) Cryptosystem 87 7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.2 How Do Public-key Cryptosystems Work? . . . . . . . . . . . . . . . . . . . . . . 87 7.3 How Does RSA Work? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.4 Why Does RSA Work? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.5 Is RSA Secure and Efficient? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 III Combinatorics: Sets, Counting, and Probability 93 8 Sets 95 8.1 Set Definition and Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8.2 Set Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 8.3 Set-Builder Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8.4 Venn Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 8.5 Set Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 8.5.1 ∪ Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 8.5.2 ∩ Intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 8.5.3 A Complement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 8.5.4 Difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.5.5 Symmetric Difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.5.6 Power Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.5.7 Cartesian Product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.6 Computer Representation of Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 8.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 9 Counting 109 9.1 Basic Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 9.2 Inclusion-exclusion Principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 9.3 Pigeonhole Principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 9.3.1 Generalized Pigeonhole Principle . . . . . . . . . . . . . . . . . . . . . . . 118 9.4 Permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 9.5 Combinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 9.6 Binomial Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 9.6.1 Pascal’s Triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 9.7 Balls-in-Bins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 9.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 10 Probability 137 10.1 Definitions and Basic Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 10.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 10.2.1 Dice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 10.2.2 Cards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 10.2.3 Urns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 10.2.4 Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 10.3 Conditional Probability and Bayes Theorem . . . . . . . . . . . . . . . . . . . . . 143 10.3.1 Conditional Probability . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 10.3.2 Bayes Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 10.3.3 Explaining Monty Hall paradox using Bayes Theorem . . . . . . . . . . . 145 10.3.4 Another Application of Bayes Theorem . . . . . . . . . . . . . . . . . . . 145 10.4 Markov Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 10.4.1 A Practical Method for Estimating the Stationary Distribution . . . . . . 150 10.5 PageRank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 IV Algorithmic Analysis: Searching and Sorting 159 11 Algorithms for Searching and Sorting: Description and Analyses 161 11.1 Algorithms for Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 11.1.1 Unordered Linear Search . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 11.1.2 Ordered Linear Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 11.1.3 Chunk Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 11.1.4 Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 11.2 Analysis of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 11.2.1 Linear Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 11.2.2 Chunk Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 11.2.3 Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 11.2.4 Comparison of Search Algorithms. . . . . . . . . . . . . . . . . . . . . . . 169 11.3 Algorithms for Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 11.3.1 Insertion Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 11.3.2 Selection Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 11.3.3 Merge Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 11.3.4 Comparison of Sorting Algorithms . . . . . . . . . . . . . . . . . . . . . . 172