Algorithm

algorithmsalgorithm designcomputer algorithmcomputer algorithmsprocedurealgorithmicalgorithmicallyalgorithmic problemNaïve algorithmprocedures
In mathematics and computer science, an algorithm is a finite sequence of well-defined, computer-implementable instructions, typically to solve a class of problems or to perform a computation.wikipedia
3,262 Related Articles

Computer science

computer scientistcomputer sciencescomputer scientists
In mathematics and computer science, an algorithm is a finite sequence of well-defined, computer-implementable instructions, typically to solve a class of problems or to perform a computation.
It enables the use of algorithms to manipulate, store, and communicate digital information.

Computation

computationalcomputationscomputing
Starting from an initial state and initial input (perhaps empty), the instructions describe a computation that, when executed, proceeds through a finite number of well-defined successive states, eventually producing "output" and terminating at a final ending state.
Computation is any type of calculation that includes both arithmetical and non-arithmetical steps and follows a well-defined model, for example an algorithm.

Division algorithm

Newton–Raphson divisionSRT divisiondivision by a constant
Arithmetic algorithms, such as a division algorithm, was used by ancient Babylonian mathematicians c. 2500 BC and Egyptian mathematicians c. 1550 BC.
A division algorithm is an algorithm which, given two integers N and D, computes their quotient and/or remainder, the result of Euclidean division.

Calculation

calculationscalculatingcalculate
Algorithms are unambiguous specifications for performing calculation, data processing, automated reasoning, and other tasks.
The term is used in a variety of senses, from the very definite arithmetical calculation of using an algorithm, to the vague heuristics of calculating a strategy in a competition, or calculating the chance of a successful relationship between two people.

Euclidean algorithm

Euclid's algorithmEuclideanEuclid
Greek mathematicians later used algorithms in the sieve of Eratosthenes for finding prime numbers, and the Euclidean algorithm for finding the greatest common divisor of two numbers. A prototypical example of an algorithm is the Euclidean algorithm, which is used to determine the maximum common divisor of two integers; an example (there are others) is described by the flowchart above and as an example in a later section.
It is an example of an algorithm, a step-by-step procedure for performing a calculation according to well-defined rules,

Sieve of Eratosthenes

algorithm for finding prime numbershis sieve algorithmSieve
Greek mathematicians later used algorithms in the sieve of Eratosthenes for finding prime numbers, and the Euclidean algorithm for finding the greatest common divisor of two numbers.
In mathematics, the Sieve of Eratosthenes is a simple, ancient algorithm for finding all prime numbers up to any given limit.

Alan Turing

TuringAlan M. TuringAlan Mathison Turing
Those formalizations included the Gödel–Herbrand–Kleene recursive functions of 1930, 1934 and 1935, Alonzo Church's lambda calculus of 1936, Emil Post's Formulation 1 of 1936, and Alan Turing's Turing machines of 1936–37 and 1939.
Turing was highly influential in the development of theoretical computer science, providing a formalisation of the concepts of algorithm and computation with the Turing machine, which can be considered a model of a general-purpose computer.

Entscheidungsproblem

Church's theoremcorrectly evaluate every statementDecision Problem
A partial formalization of what would become the modern concept of algorithm began with attempts to solve the Entscheidungsproblem (decision problem) posed by David Hilbert in 1928.
The problem asks for an algorithm that takes as input a statement of a first-order logic (possibly with a finite number of axioms beyond the usual axioms of first-order logic) and answers "Yes" or "No" according to whether the statement is universally valid, i.e., valid in every structure satisfying the axioms.

Flowchart

flow chartflowchartsflow charts
A prototypical example of an algorithm is the Euclidean algorithm, which is used to determine the maximum common divisor of two integers; an example (there are others) is described by the flowchart above and as an example in a later section. Algorithms can be expressed in many kinds of notation, including natural languages, pseudocode, flowcharts, drakon-charts, programming languages or control tables (processed by interpreters).
A flowchart can also be defined as a diagrammatic representation of an algorithm, a step-by-step approach to solving a task.

Recursively enumerable set

recursively enumerablecomputably enumerablecomputably enumerable set
An "enumerably infinite set" is one whose elements can be put into one-to-one correspondence with the integers.
*There is an algorithm such that the set of input numbers for which the algorithm halts is exactly S.

DRAKON

Drakon-chartdrakon-chartsDRAKON flowchart
Algorithms can be expressed in many kinds of notation, including natural languages, pseudocode, flowcharts, drakon-charts, programming languages or control tables (processed by interpreters).
DRAKON is an algorithmic visual programming and modeling language developed within the Buran space project following ergonomic design principles.

Turing reduction

Turing reducibleTuring reducibilityCook reduction
Thus, an algorithm can be considered to be any sequence of operations that can be simulated by a Turing-complete system.
It can be understood as an algorithm that could be used to solve A if it had available to it a subroutine for solving B.

Programming language

programming languageslanguagedialect
Algorithms can be expressed in many kinds of notation, including natural languages, pseudocode, flowcharts, drakon-charts, programming languages or control tables (processed by interpreters).
Programming languages are used in computer programming to implement algorithms.

Turing machine

deterministic Turing machineTuring machinesuniversal computer
Those formalizations included the Gödel–Herbrand–Kleene recursive functions of 1930, 1934 and 1935, Alonzo Church's lambda calculus of 1936, Emil Post's Formulation 1 of 1936, and Alan Turing's Turing machines of 1936–37 and 1939.
Despite the model's simplicity, given any computer algorithm, a Turing machine capable of simulating that algorithm's logic can be constructed.

Pseudocode

pseudo-codepseudo codepseudo
Algorithms can be expressed in many kinds of notation, including natural languages, pseudocode, flowcharts, drakon-charts, programming languages or control tables (processed by interpreters).
Pseudocode is an informal high-level description of the operating principle of a computer program or other algorithm.

Data structure

data structuresstructurestructures
In practice, the state is stored in one or more data structures.
Usually, efficient data structures are key to designing efficient algorithms.

Divide-and-conquer algorithm

divide and conquer algorithmdivide and conquerdivide-and-conquer
The design of algorithms is part of many solution theories of operation research, such as dynamic programming and divide-and-conquer.
A divide-and-conquer algorithm works by recursively breaking down a problem into two or more sub-problems of the same or related type, until these become simple enough to be solved directly.

Computational complexity theory

computational complexitycomplexity theorycomplexity
Van Emde Boas observes "even if we base complexity theory on abstract instead of concrete machines, arbitrariness of the choice of a model remains. It is at this point that the notion of simulation enters".
A computation problem is solvable by mechanical application of mathematical steps, such as an algorithm.

Halting problem

always terminatesavoid the halting problemdetect non-terminating computations
This requirement renders the task of deciding whether a formal procedure is an algorithm impossible in the general case—due to of a major theorem of Computability Theory known as the Halting Problem.
Alan Turing proved in 1936 that a general algorithm to solve the halting problem for all possible program-input pairs cannot exist.

Effective method

effective procedureeffectively calculableeffective
As an effective method, an algorithm can be expressed within a finite amount of space and time, and in a well-defined formal language for calculating a function.
An effective method for calculating the values of a function is an algorithm.

Computer program

programprogramscomputer programs
Most algorithms are intended to be implemented as computer programs.
The underlying method used for some calculation or manipulation is known as an algorithm.

Computability

computableCalculabilitycomputable in ''D
Minsky describes a more congenial variation of Lambek's "abacus" model in his "Very Simple Bases for Computability".
The computability of a problem is closely linked to the existence of an algorithm to solve the problem.

Control table

quotations
Algorithms can be expressed in many kinds of notation, including natural languages, pseudocode, flowcharts, drakon-charts, programming languages or control tables (processed by interpreters).
The tables can have multiple dimensions, of fixed or variable lengths and are usually portable between computer platforms, requiring only a change to the interpreter, not the algorithm itself - the logic of which is essentially embodied within the table structure and content.

Correctness (computer science)

correctnessprogram correctnesscorrect
An additional benefit of a structured program is that it lends itself to proofs of correctness using mathematical induction.
In theoretical computer science, correctness of an algorithm is asserted when it is said that the algorithm is correct with respect to a specification.

Algorithmic efficiency

efficiencyefficientefficiently
Different algorithms may complete the same task with a different set of instructions in less or more time, space, or 'effort' than others.
In computer science, algorithmic efficiency is a property of an algorithm which relates to the number of computational resources used by the algorithm.