I'm a little suprised nobody has mentioned the Simplex algorithm yet. I don't think it's importance in the history of optimization problems could be overstated.
Also: does the Monte Carlo method count as an algorithm?
I still haven't groked exactly what is so special about them. Incredibly useful, sure, but aren't they just simulations?
Ie, isn't it something anyone would have come up with(sorry if I'm just ignorant here)?
They are the kind of obvious thing that many people would invent for themselves, yes. But the question was about algorithms that changed the world, not about non-obvious algorithms.
I would argue that in the case of Monte Carlo methods, computers are what deserve credit (for making obvious methods like Monte Carlo affordable) rather than the methods themselves.
But the more I think about it, I'd have to give Dijkstra's shortest path routing algorithm my highest marks...
http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
it probably was used to route this message to all you who are reading this... and also used in the routing of the board design on which your screen is attached.,,and is the basis of many other technology and efficient scheduling applications in common use today...
Basic algorithms for arithmetic, when first originated thousands of years ago, have probably had a far more profound effect on the world than any recent computer-based algorithm. Particularly in accounting and engineering, they would have contributed to the ability to have economies that could support large civilizations. The earliest records found of ancient languages are sometimes accounting records.
Interpreting "algorithms in computing" more widely than the questioner meant of course. :-)
Algebra itself started out as a bunch of recipes for doing computations back in Babylonian times, "fathered" by Diophantus, and Al-Khwarizmi who named and codified Algebra.
Name of author: Abu Ja'far Muhammad ibn Musa al-Khwarizmi. Name of work: al-Kitab al-mukhtasar fi hisab al-jabr wa'l-muqabala ("A Handbook of Calculation by Completion and Reduction").
John Derbyshire examines al-Khwarizmi's work in chapter 3 of Unknown Quantity: A Real and Imaginary History of Algebra [ISBN 978-0-452-28853-9], which I just finished reading a few days ago.
The first part of al-Khwarizmi's book concerns finding the roots of first- and second-order polynomials of one unknown. He classified the polynomials into 6 fundamental types, with all positive coefficients. Keep in mind, that negative numbers did not exist at the time, though subtraction did. He showed how to manipulate polynomials into a suitable one of the 6 types by adding a term (al-jabr, completing) or subtracting a term (al-muqabala, reducing).
Says Derbyshire, "al-Khwarizmi has no literal symbolism--no way to lay out equations in letters and numbers, no sign for the unknown quantity and its powers." The problems, the fundamental types, the procedures are all presented in words.
Interestingly, Diophantus 600 years earlier did addition and subtraction of polynomial terms using "a rich literal symbolism to aid the manipulations."
I have to second simulated annealing if only because it gets too ignored normally. It's a wonderful technique for attacking the optimization of intractable problems, and one that belongs in any good mental toolkit for optimization.
The point in polygon problem for arbitrary polygons I believe was first solved by Robert Sedgewick and published in his awesome algorithms book... it is discussed here...
http://bit.ly/i1u1
In most computer applications today we assume we can easily tell whether or not a point is within (or without)...
But I think Robert published the first algorithm on how...
Yes me too. I still believe that the godfather is Knuth:
http://en.wikipedia.org/wiki/Donald_Knuth think
But as you highlight Sedgewick to me was more readable and applicable to the code I was writing in the early 90s.
Is it a good candidate as an algorithm though? The novel part of pagerank is representing hyperlinks as a connectivity matrix and using the eigenvalues as search ranking. Finding the eigenvalues themselves was not new, and the rest doesn't seem as important in an algorithmic sense.
I don't want you to be right, but... I think you are right. PageRank is an application of an algorithm; seeing a problem in such a way that it can be solved.
I therefore instead nominate the algorithm which Pagerank applies.
Oh, you're absolutely right of course. I completely overlooked that. In that case, I think that the top two prizes should go to one Fourier transform related algorithm and one algorithm from public-key cryptography.
It did not change the world in the sense that pagerank did, but in 1961 it was an important contribution, because it was simple enough to lend itself to formal analysis.
The Deutsch-Jozsa Algorithm, while not immediately "practical" in the sense that it solved some real-world problem that had been vexing computer scientists, was instrumental in showing conclusively that quantum computers could be asymptotically faster than classical computers for some problems. This then led the way for more applied quantum algorithms such as Shor's Algorithm (itself a special case of QFT and period-finding algorithms). So I'd like to nominate DJA for an algorithm that changed the world.
Lempel-Ziv compression: Though it's hard to point to things that would have been impossible without it, it's saved so much transfer and storage capacity in its time that the economic impact would be huge.
Apriori association mining: Of fairly limited application, but it's use in market basket data has probably had quite a large impact on our retail sector for one.
I'd go with something like Reed-Solomon error correction. It makes CDs and DVDs work. Programmers have to be insulated from the flawed physical world and error correction codes do that.
russell... I would perhaps nominate bubble sort above quicksort...for us old timers, it was easy to understand, code, and install in our programs where ever we need a sort... bubble sort I would argue first brought sorting to our discipline.
Early in my career I implemented a cross reference function using bubble sort and was ridiculed by a Real Computer Scientist. I opted for quick sort, because I wasnt going to expose myself to that here. :-)
I think I'll nominate FFT.