ebook img

Algorithms for programmers: ideas and source code PDF

938 Pages·2.74 MB·English
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 Algorithms for programmers: ideas and source code

Algorithms for programmers ideas and source code This document is work in progress: read the “important remarks” near the beginning Jo¨rg Arndt [email protected] Draft version1 of 2008-January-19 1The latest version and the accompanying software is online at http://www.jjj.de/fxt/. ii [fxtbookdraftof2008-January-19] CONTENTS iii Contents Important remarks about this document xi I Low level algorithms 1 1 Bit wizardry 3 1.1 Trivia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Operations on individual bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Operations on low bits or blocks of a word . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4 Isolating blocks of bits and single bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.5 Computing the index of a single set bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.6 Operations on high bits or blocks of a word . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.7 Functions related to the base-2 logarithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.8 Counting bits and blocks of a word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.9 Bit set lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.10 Avoiding branches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.11 Bit-wise rotation of a word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.12 Functions related to bit-wise rotation * . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.13 Reversing the bits of a word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.14 Bit-wise zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.15 Gray code and parity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.16 Bit sequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 1.17 Powers of the Gray code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 1.18 Invertible transforms on words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 1.19 Moves of the Hilbert curve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 1.20 The Z-order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 1.21 Scanning for zero bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 1.22 2-adic inverse and square root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 1.23 Radix −2 representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 1.24 A sparse signed binary representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 1.25 Generating bit combinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 1.26 Generating bit subsets of a given word . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 1.27 Binary words as subsets in lexicographic order . . . . . . . . . . . . . . . . . . . . . . . . 64 1.28 Minimal-change bit combinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1.29 Fibonacci words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 1.30 Binary words and parentheses strings * . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 1.31 Error detection by hashing: the CRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 1.32 Permutations via primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 1.33 CPU instructions often missed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 2 Permutations 85 2.1 The revbin permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 [fxtbookdraftof2008-January-19] iv CONTENTS 2.2 The radix permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 2.3 In-place matrix transposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 2.4 Revbin permutation and matrix transposition * . . . . . . . . . . . . . . . . . . . . . . . 91 2.5 The zip permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 2.6 The reversed zip permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 2.7 The XOR permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 2.8 The Gray code permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 2.9 The reversed Gray code permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 2.10 Decomposing permutations * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 2.11 General permutations and their operations . . . . . . . . . . . . . . . . . . . . . . . . . . 104 3 Sorting and searching 115 3.1 Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 3.2 Binary search. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 3.3 Index sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 3.4 Pointer sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 3.5 Sorting by a supplied comparison function . . . . . . . . . . . . . . . . . . . . . . . . . . 121 3.6 Determination of unique elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 3.7 Unique elements with inexact types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 3.8 Determination of equivalence classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 3.9 Determination of monotonicity and convexity *. . . . . . . . . . . . . . . . . . . . . . . . 131 3.10 Heapsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 3.11 Counting sort and radix sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 3.12 Searching in unsorted arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4 Data structures 141 4.1 Stack (LIFO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 4.2 Ring buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 4.3 Queue (FIFO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 4.4 Deque (double-ended queue) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 4.5 Heap and priority queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 4.6 Bit-array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 4.7 Finite-state machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 4.8 Emulation of coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 II Combinatorial generation 159 5 Conventions and considerations 161 5.1 About representations and orders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 5.2 Ranking, unranking, and counting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 5.3 Characteristics of the algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 5.4 Optimization techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 5.5 Remarks about the C++ implementations . . . . . . . . . . . . . . . . . . . . . . . . . . 164 6 Combinations 165 6.1 Lexicographic and co-lexicographic order . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 6.2 Order by prefix shifts (cool-lex) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 6.3 Minimal-change order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.4 The Eades-McKay strong minimal-change order . . . . . . . . . . . . . . . . . . . . . . . 172 6.5 Two-close orderings via endo/enup moves . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 6.6 Recursive generation of certain orderings . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 7 Compositions 183 [fxtbookdraftof2008-January-19] CONTENTS v 7.1 Co-lexicographic order. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 7.2 Co-lexicographic order for compositions into exactly k parts . . . . . . . . . . . . . . . . 185 7.3 Compositions and combinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 7.4 Minimal-change orders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 8 Subsets 191 8.1 Lexicographic order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 8.2 Minimal-change order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 8.3 Ordering with De Bruijn sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 8.4 Shifts-order for subsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8.5 k-subsets where k lies in a given range. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 9 Mixed radix numbers 207 9.1 Counting order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 9.2 Gray code order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 9.3 gslex order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 9.4 endo order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 9.5 Gray code for endo order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 10 Permutations 219 10.1 Lexicographic order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 10.2 Co-lexicographic order. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 10.3 Factorial representations of permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 10.4 An order from reversing prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 10.5 Minimal-change order (Heap’s algorithm) . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 10.6 Lipski’s Minimal-change orders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 10.7 Strong minimal-change order (Trotter’s algorithm) . . . . . . . . . . . . . . . . . . . . . . 239 10.8 Minimal-change orders from factorial numbers . . . . . . . . . . . . . . . . . . . . . . . . 244 10.9 Orders where the smallest element always moves right . . . . . . . . . . . . . . . . . . . . 250 10.10 Single track orders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 10.11 Star-transposition order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 10.12 Derangement order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 10.13 Recursive algorithm for cyclic permutations . . . . . . . . . . . . . . . . . . . . . . . . . . 263 10.14 Minimal-change order for cyclic permutations. . . . . . . . . . . . . . . . . . . . . . . . . 265 10.15 Permutations with special properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 11 Subsets and permutations of a multiset 275 11.1 Subsets of a multiset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 11.2 Permutations of a multiset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 12 Gray codes for strings with restrictions 281 12.1 Fibonacci words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 12.2 Generalized Fibonacci words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 12.3 Digit x followed by at least x zeros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 12.4 Generalized Pell words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 12.5 Sparse signed binary words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 12.6 Strings with no two successive nonzero digits . . . . . . . . . . . . . . . . . . . . . . . . . 292 12.7 Strings with no two successive zeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 12.8 Binary strings without substrings 1x1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 12.9 Binary strings without substrings 1xy1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 13 Parenthesis strings 299 13.1 Co-lexicographic order. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 13.2 Gray code via restricted growth strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 [fxtbookdraftof2008-January-19] vi CONTENTS 13.3 The number of parenthesis strings: Catalan numbers . . . . . . . . . . . . . . . . . . . . 306 13.4 Increment-i RGS and k-ary trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 14 Integer partitions 311 14.1 Recursive solution of a generalized problem . . . . . . . . . . . . . . . . . . . . . . . . . . 311 14.2 Iterative algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 14.3 Partitions into m parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 14.4 The number of integer partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 15 Set partitions 319 15.1 The number of set partitions: Stirling set numbers and Bell numbers . . . . . . . . . . . 320 15.2 Generation in minimal-change order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 16 A string substitution engine 331 17 Necklaces and Lyndon words 335 17.1 Generating all necklaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 17.2 The number of binary necklaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 17.3 The number of binary necklaces with fixed content . . . . . . . . . . . . . . . . . . . . . . 344 18 Hadamard and conference matrices 347 18.1 Hadamard matrices via LFSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 18.2 Hadamard matrices via conference matrices . . . . . . . . . . . . . . . . . . . . . . . . . . 349 18.3 Conference matrices via finite fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 19 Searching paths in directed graphs 355 19.1 Representation of digraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 19.2 Searching full paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 19.3 Conditional search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 19.4 Edge sorting and lucky paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 19.5 Gray codes for Lyndon words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 III Fast orthogonal transforms 373 20 The Fourier transform 375 20.1 The discrete Fourier transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 20.2 Summary of definitions of Fourier transforms * . . . . . . . . . . . . . . . . . . . . . . . . 376 20.3 Radix-2 FFT algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 20.4 Saving trigonometric computations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 20.5 Higher radix FFT algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 20.6 Split-radix Fourier transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 20.7 Symmetries of the Fourier transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 20.8 Inverse FFT for free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 20.9 Real valued Fourier transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 20.10 Multidimensional Fourier transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 20.11 The matrix Fourier algorithm (MFA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 21 Algorithms for fast convolution 409 21.1 Convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 21.2 Correlation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 21.3 Weighted Fourier transforms and convolutions . . . . . . . . . . . . . . . . . . . . . . . . 417 21.4 Convolution using the MFA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 21.5 The z-transform (ZT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 21.6 Prime length FFTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 [fxtbookdraftof2008-January-19] CONTENTS vii 22 The Walsh transform and its relatives 429 22.1 The Walsh transform: Walsh-Kronecker basis . . . . . . . . . . . . . . . . . . . . . . . . . 429 22.2 Eigenvectors of the Walsh transform * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 22.3 The Kronecker product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 22.4 A variant of the Walsh transform * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 22.5 Higher radix Walsh transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 22.6 Localized Walsh transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 22.7 Dyadic (XOR) convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 22.8 The Walsh transform: Walsh-Paley basis . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 22.9 Sequency ordered Walsh transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 22.10 Slant transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 22.11 Arithmetic transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 22.12 Reed-Muller transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 22.13 The OR-convolution, and the AND-convolution . . . . . . . . . . . . . . . . . . . . . . . 462 23 The Haar transform 465 23.1 The ‘standard’ Haar transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 23.2 In-place Haar transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 23.3 Non-normalized Haar transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 23.4 Transposed Haar transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 23.5 The reversed Haar transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 23.6 Relations between Walsh and Haar transforms . . . . . . . . . . . . . . . . . . . . . . . . 475 23.7 Nonstandard splitting schemes * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 24 The Hartley transform 483 24.1 Definition and symmetries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 24.2 Radix-2 FHT algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 24.3 Complex FT by HT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 24.4 Complex FT by complex HT and vice versa. . . . . . . . . . . . . . . . . . . . . . . . . . 490 24.5 Real FT by HT and vice versa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 24.6 Higher radix FHT algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 24.7 Convolution via FHT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 24.8 Negacyclic convolution via FHT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 24.9 Localized FHT algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 24.10 Two-dimensional FHTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 24.11 Discrete cosine transform (DCT) by HT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 24.12 Discrete sine transform (DST) by DCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 24.13 Automatic generation of transform code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 24.14 Eigenvectors of the Fourier and Hartley transform * . . . . . . . . . . . . . . . . . . . . . 504 25 Number theoretic transforms (NTTs) 507 25.1 Prime moduli for NTTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 25.2 Implementation of NTTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 25.3 Convolution with NTTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 26 Fast wavelet transforms 515 26.1 Wavelet filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 26.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 26.3 Moment conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 IV Fast arithmetic 521 27 Fast multiplication and exponentiation 523 [fxtbookdraftof2008-January-19] viii CONTENTS 27.1 Asymptotics of algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 27.2 Splitting schemes for multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 27.3 Fast multiplication via FFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 27.4 Radix/precision considerations with FFT multiplication . . . . . . . . . . . . . . . . . . . 534 27.5 The sum-of-digits test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 27.6 Binary exponentiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 28 Root extraction 541 28.1 Division, square root and cube root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 28.2 Root extraction for rationals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 28.3 Divisionless iterations for the inverse a-th root . . . . . . . . . . . . . . . . . . . . . . . . 546 28.4 Initial approximations for iterations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 28.5 Some applications of the matrix square root . . . . . . . . . . . . . . . . . . . . . . . . . 550 28.6 Goldschmidt’s algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 28.7 Products for the a-th root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 28.8 Divisionless iterations for polynomial roots . . . . . . . . . . . . . . . . . . . . . . . . . . 560 29 Iterations for the inversion of a function 563 29.1 Iterations and their rate of convergence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 29.2 Schr¨oder’s formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 29.3 Householder’s formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 29.4 Dealing with multiple roots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 29.5 More iterations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 29.6 Improvements by the delta squared process . . . . . . . . . . . . . . . . . . . . . . . . . . 571 30 The arithmetic-geometric mean (AGM) 573 30.1 The AGM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 30.2 The elliptic functions K and E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 30.3 AGM-type algorithms for hypergeometric functions . . . . . . . . . . . . . . . . . . . . . 578 30.4 Computation of π . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 30.5 Arctangent relations for π * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 31 Logarithm and exponential function 597 31.1 Logarithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 31.2 Exponential function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 31.3 Logarithm and exponential function of power series . . . . . . . . . . . . . . . . . . . . . 606 31.4 Simultaneous computation of logarithms of small primes . . . . . . . . . . . . . . . . . . 608 32 Numerical evaluation of power series 611 32.1 The binary splitting algorithm for rational series . . . . . . . . . . . . . . . . . . . . . . . 611 32.2 Rectangular schemes for evaluation of power series . . . . . . . . . . . . . . . . . . . . . . 617 32.3 The magic sumalt algorithm for alternating series . . . . . . . . . . . . . . . . . . . . . . 621 33 Computing the elementary functions with limited resources 625 33.1 Shift-and-add algorithms for log (x) and bx . . . . . . . . . . . . . . . . . . . . . . . . . . 625 b 33.2 CORDIC algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 34 Recurrences and Chebyshev polynomials 635 34.1 Recurrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 34.2 Chebyshev polynomials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645 35 Cyclotomic polynomials, Hypergeometric functions, and continued fractions 655 35.1 Cylotomic polynomials, M¨obius inversion, Lambert series . . . . . . . . . . . . . . . . . . 655 35.2 Hypergeometric functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 35.3 Continued fractions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 [fxtbookdraftof2008-January-19] CONTENTS ix 36 Synthetic Iterations * 691 36.1 A variation of the iteration for the inverse. . . . . . . . . . . . . . . . . . . . . . . . . . . 691 36.2 An iteration related to the Thue constant . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 36.3 An iteration related to the Golay-Rudin-Shapiro sequence . . . . . . . . . . . . . . . . . . 696 36.4 Iterations related to the ruler function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698 36.5 An iteration related to the period-doubling sequence . . . . . . . . . . . . . . . . . . . . . 700 36.6 An iteration from substitution rules with sign . . . . . . . . . . . . . . . . . . . . . . . . 704 36.7 Iterations related to the sum of digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 36.8 Iterations related to the binary Gray code. . . . . . . . . . . . . . . . . . . . . . . . . . . 706 36.9 A function that encodes the Hilbert curve . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 36.10 Sparse variants of the inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 36.11 An iteration related to the Fibonacci numbers . . . . . . . . . . . . . . . . . . . . . . . . 718 36.12 Iterations related to the Pell numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 V Algorithms for finite fields 729 37 Modular arithmetic and some number theory 731 37.1 Implementation of the arithmetic operations . . . . . . . . . . . . . . . . . . . . . . . . . 731 37.2 Modular reduction with structured primes . . . . . . . . . . . . . . . . . . . . . . . . . . 735 37.3 The sieve of Eratosthenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 37.4 The order of an element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 37.5 Prime modulus: the field Z/pZ=F =GF(p) . . . . . . . . . . . . . . . . . . . . . . . . 741 p 37.6 Composite modulus: the ring Z/mZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741 37.7 The Chinese Remainder Theorem (CRT) . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 37.8 Quadratic residues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 37.9 Computation of a square root modulo m . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 37.10 The Rabin-Miller test for compositeness . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 37.11 Proving primality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 37.12 Complex moduli: GF(p2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 37.13 Solving the Pell equation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 37.14 Multigrades * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781 √ 37.15 Properties of the convergents of 2 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782 37.16 Multiplication of hypercomplex numbers * . . . . . . . . . . . . . . . . . . . . . . . . . . 787 38 Binary polynomials 793 38.1 The basic arithmetical operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 38.2 Multiplication for polynomials of high degree . . . . . . . . . . . . . . . . . . . . . . . . . 799 38.3 Modular arithmetic with binary polynomials . . . . . . . . . . . . . . . . . . . . . . . . . 805 38.4 Irreducible and primitive polynomials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808 38.5 The number of irreducible and primitive polynomials . . . . . . . . . . . . . . . . . . . . 823 38.6 Generating irreducible polynomials from necklaces . . . . . . . . . . . . . . . . . . . . . . 824 38.7 Irreducible and cyclotomic polynomials * . . . . . . . . . . . . . . . . . . . . . . . . . . . 826 38.8 Factorization of binary polynomials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827 39 Shift registers 833 39.1 Linear feedback shift registers (LFSR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833 39.2 Galois and Fibonacci setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836 39.3 Generating all revbin pairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 39.4 The number of m-sequences and De Bruijn sequences . . . . . . . . . . . . . . . . . . . . 838 39.5 Auto correlation of m-sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 39.6 Feedback carry shift register (FCSR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840 39.7 Linear hybrid cellular automata (LHCA) . . . . . . . . . . . . . . . . . . . . . . . . . . . 842 39.8 Additive linear hybrid cellular automata . . . . . . . . . . . . . . . . . . . . . . . . . . . 847 [fxtbookdraftof2008-January-19] x CONTENTS 40 Binary finite fields: GF(2n) 851 40.1 Arithmetic and basic properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851 40.2 Minimal polynomials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857 40.3 Computation of the trace vector via Newton’s formula . . . . . . . . . . . . . . . . . . . . 859 40.4 Solving quadratic equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861 40.5 Representation by matrices * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863 40.6 Representation by normal bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865 40.7 Conversion between normal and polynomial representation . . . . . . . . . . . . . . . . . 873 40.8 Optimal normal bases (ONB). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875 40.9 Gaussian normal bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877 A Machine used for benchmarking 883 B The pseudo language Sprache 885 C The pari/gp language 887 Bibliography 895 Index 911 [fxtbookdraftof2008-January-19]

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.