In mathematics, computer science, and related subjects, an algorithm is an effective method for solving a problem using a finite sequence of instructions. Algorithms are used for calculation, data processing, and many other fields. 3000BC-1000BC: Ancient mathematics - Babylonian, Egyptian, Chines, Mayan, Greek, Arabic, Indian - Algorithms for calculation - long multiplication, division - extracting square and cubic roots 300BC: Euclid - geometric constructions - axiomatic treatment of geometry - Euclidean algorithm (gcd) - gcd(x,0) = x - for x > y, gcd(x,y) = gcd(x-y,y) - running time is O(log max{x,y}) 200BC: Eratosthenes - algorithm to find all primes < N 10-70: Hero of Alexandria - complicated gears and lever devices, steam driven 85-185: Ptolemaios (Ptolemy) - approximations of pi - 3.1415926535897932384626433832795028841971693993751058209749445923 780: al-Khowarizmi - The word algorism originally referred only to the rules of performing arithmetic using Arabic numerals but evolved via European Latin translation of al-Khwarizmi's name into algorithm by the 18th century. The word evolved to include all definite procedures for solving problems or performing tasks. - The word "algebra" comes from the title of one of his books 1643-1747: Newton - Newton's Method of finding zeros of equations 1800: Gauss - Gaussian elimination - probably the greatest mathematician ever 1840: Charles Babbage and Ada Lovelace - 1841 First computer Babbage's difference engine - 1842 First computer program (algorithm), computed Bernoulli numbers - Programming language Ada named after her 1926: Otakar Boruvka's minimum spanning tree algorithm - O((m+n)log n) time algorithm 1931: Kurt Goedel's incompleteness theorem - Later proved the theoretical possibility of time-travel and teleportation - Friend of Einstein 1932: Alonzo Church - Undecideability of first-order logic 1932 1912-1954: Alan Turing - Student of Alonzo Church - Defined the Turing machine - Discovered non-computable functions, the halting problem - Instrumental if cracking the Enigma and the Lorenz 40/42 (Turing's Bombe) - Involved with the creation of the Mark I - His lover helped someone break in, he reported this to police, police arrested him - Committed suicide by half-eating a poison apple after being "treated" for homosexuality - Rainbow Apple logo does is not a reference to Turing (but a nice story) - First digital programmable computer - Colossus - Contributions to war effort only made public in 1970 - September 10, 2009 - official apology from British Prime Minister 1903-1957: John von Neumann - described the von Neumann architecture - ENIAC - game theory - minimax theorem of 2-person zero sum games - inventor (in 1945) of the merge-sort algorithm - cellular automata - self-replicating automata - proposed the use of self-replication in interstellar large scale-mining operations 1906-1992: Grace Hopper - 1944: first functional computer program for the Mark I - Instrumental in development of COBOL - First compiler - Coined the term bug & debugging (maybe) - Was strongly discouraged from computer programming - Promoted to rear-admiral 1947: George Dantzig - simplex method for linear programming 1951: Alston Householder - Decomposition approach to matrix problems (LU, LUP, etc) 1953: Hans Peter Luhn - Described hashing with chaining in an IBM technical memo 1953: Richard Bellman - Dynamic programming 1959: Dijkstra's - Dijkstra's shortest path algorithm (also, Moore 1957) 1960: Kolmogorov complexity - Measuring the randomness of a string in terms of the length of the shortest algorithm that generates it 1960: A. H. Land and A. G. Doig in 1960 - Branch-and-bound for integer linear programming 1962: C. A. R. Hoare - Quicksort 1965 James Cooley and John Tukey - The Fast Fourier transform algorithm 1971: Stephen Cook and Leonid Levin - Cook-Levin Theorem: there exists NP-complete problems - Limits on what computers can do efficiently 1972: Richard Karp - 21 NP-Complete problems. 1973: Donald Knuth - Published The Art of Computer Programming - Fundamental rigorous theoretical study of algorithms 1974: Hopcroft and Tarjan - O(n) time planarity testing algorithm "This paper describes an efficient algorithm to determine whether an arbitrary graph G can be embedded in the plane. The algorithm may be viewed as an iterative version of a method originally proposed by Auslander and Parter and correctly formulated by Goldstein. The algorithm uses depth-first search and has O(V) time and space bounds, where V is the number of vertices in G. An ALGOL implementation of the algorithm successfully tested graphs with as many as 900 vertices in less than 12 seconds." 1976: Michael Rabin - O(n) time closest pair algorithm - First ever randomized algorithm! - sample sqrt(n) points - compute closest-pair among sample points (d) - use a d*d grid to find closest pair among all points 1977: Ferguson and Forcade - integer relation detection algorithm - generalization of gcd to real numbers 1978: Ron Rivest, Adi Shamir, and Leonard Adleman - Workable public key crytography 1979: Michael Garey and David Johnson - Book: Computers and Intractability A Guide to the theory of NP-completeness 1980: Gary Miller and Michael Rabin - Randomized primality testing algorithm 1985: Daniel Sleator and Robert Tarjan - Amortized analysis 1987 Michael Rabin and Richard Karp - Karp-Rabin string matching algorithm 2000: Craig Ventner - Shotgun sequencing algorithm for the human genome project 2000: Larry Page, Sergey Brin - Pagerank - Search algorithms - Adsense