Algorithms are one of the few mathematical/ logical constructs whose theoretical construct is instantiated in practical application by billions of people each day via the computer. Understanding the historical background, formulation, analysis, and legal issues regarding algorithms is useful for those in the computer science Field and curious outsiders in gaining an appreciation for what a computer can do as well as its limitations.
The word algorithm originated in ancient times to identify discrete and distinguishable symbols in mathematics and using them in arithmetic, based on a defined procedure. Eventually, unary numerical systems appeared during the times of the Romans and the abacus was introduced. Gottfried Liebniz contributed to development with his notion of calculus ratiocinator, which equated algebra with logic and claimed that there is a method by which logical concepts can be manipulated in the same way that mathematical concepts are. Scholars believe that the Jacquard loom and telephone switching technologies where the first fundamental developments leading to the creation of the first computers.
Mathematically, the development of algorithms is credited to the work of George Boole, Gottlob Frege, and Giuseppe Peano. Between them, they were able to reduce arithmetic to a collection of symbols manipulated by rules. Doing this however, resulted in a number of unsettling paradoxes such as Russell's paradox and Godel's paradox of the liar.
Algorithms also faced an issue of 'entscheidungsproblem', which is a problem of effective calculatablity. In this problem, an algorithm accepts as an input, some description of a formal language and a statement in that language. The algorithm must then produce a 'true' or 'false' statement based on the statement being true or false. It is possible for the algorithm to decide on problems for which there is no proof or disproof. It was later shown by Emil Post and Alan Turning that the entscheidungsproblem was unsolvable.The next advancement in the history of algorithms is Alan Turning's 'turning machine' this anticipated the creation of computers. The first computer was then created in the early twentieth century, with ongoing development to software and hardware, particularly with the advent of the silicone chip.
As was explained algorithms specify instructions for a task that needs to be preformed, often times by computers. Typically, data is read from some input, then it is written as some output or it is stored in memory. Often algorithms are not merely linear but the 'instructions' branch out to include a wide array of difference situations that may arise, this is formally described as flow of control. Algorithms are expressed in a variety of ways, most intuitively natural languages, which are spoken languages. The other way that they are commonly expressed is through artificial languages such as mathematics and programming languages. They are also expressed, for learning purposes using flowcharts to illustrate key algorithmic concepts in academic settings.
Algorithm analysis can take on a number of forms, depending on the medium, or language, that it is expressed in. In computer science binary search is superior to sequential search. Regarding analysis of programming languages it is not needed to analyze a specific language to conduct an analysis, since programming languages can be generalized in pseudo-code. The levels of description are high level description, implementation description, and formal description. Pseudo-code is a non-formal caricature of a programming language that one wishes to test. Normally, during the testing of a program testing is first done with pseudo-code and then with the actual code that is being tested. Overall, program optimization is a complex process that is gradually revised and refined throughout testing, at varying levels of complexity.
Specific algorithms are not included in the patent law. However, some applications of algorithms are included in the law. The reason behind this ruling was that algorithms are processes as per the Gottschalk v. Benson decision. Proponents of this measure argue that this free distribution of knowledge is essential to refining algorithms and it allows for greater potential for creativity and development within the study of computer science. Those who are not in favor of the measure argue that algorithms ought to be considered intellectual property.
Algorithm Examples- A selection of example algorithms.
Algorithm – Definition from Math world.
What is an algorithm – Learn what an algorithm is by doing a swap puzzle.
Alan Turing Homepage- Interesting information about Alan Turing.
History of Algorithms- Detailed historical resource on the topic.
Algorithm: Idiom of Modern Science- Interesting background article on the topic.
Algorithm Repository – Algorithm repository at SUNY Stony Book University.
Animated Algorithms- Animated Algorithms and data structures.
Sorting Algorithm Animations- Sows how algorithms operate and how to sort them.
Greatest Common Divisor Algorithms, Past and Present- Article by Micheal Gilland.
Encryption algorithm Article and resources on encryption algorithms.
Modern Computer Arithmetic – Explanation with examples.
Are Algorithms Copyrightable?- Article examining the issue.
Practical Algorithm References- Good guide to literary resources.
Genetic algorithms & Evolutionary Computation – An interesting tutorial on the topic.