"In mathematics and computer science, an algorithm ( ) is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation."
It involves the development and analysis of algorithms for solving computationally difficult problems, focusing on issues such as optimization, performance, and correctness.
Time and space complexity analysis: Calculating the amount of time or memory required to execute an algorithm on theoretical models of computation.
Big-O notation: A way to express the rate at which the resources required by an algorithm grow as the input size increases.
Sorting algorithms: A set of algorithms that arrange items in a specific order, such as numerical or lexicographical order.
Searching algorithms: A set of algorithms that locate the position of a target item within a collection of data.
Recursion: A technique used to break down a problem into smaller subproblems, solve each subproblem, and combine the results to solve the original problem.
Dynamic programming: A technique used to solve complex problems by breaking them down into smaller subproblems and storing the solutions to those subproblems to help solve the larger problem.
Greedy algorithms: A technique used to solve optimization problems by making locally optimal choices that lead to a globally optimal solution.
Graph theory: The study of graphs, which are mathematical structures that model relationships between pairs of objects.
Data structures: The ways in which data is stored, organized, and manipulated in computer science, including arrays, linked lists, stacks, queues, and trees.
Complexity classes: A way of classifying problems in terms of their computational complexity, such as P, NP, and NP-complete.
Numerical algorithms: A set of algorithms used to solve mathematical problems numerically, such as solving differential equations, root finding, or numerical optimization.
String matching algorithms: A set of algorithms used to find occurrences of a specific substring in a larger string.
Hashing: A technique used to map large amounts of data to a smaller set of values, typically used for data retrieval and lookup.
Turing Machines: An abstract computational device that can simulate any computer algorithm and is used in studying the limits of computation.
Brute Force Algorithm: A simple algorithm that tries all possible solutions to a problem, regardless of efficiency.
Divide and Conquer Algorithm: A technique that breaks a problem into smaller sub-problems, solves them recursively, and then combines their solutions.
Dynamic Programming Algorithm: A method for solving problems that involves breaking them down into smaller sub-problems, solving them, and then storing the solutions for later use in solving larger problems.
Greedy Algorithm: A process that selects the best decision at each step, without considering the overall implications and potential for backtracking.
Randomized Algorithm: A decision-making algorithm that uses a source of randomness to arrive at a solution.
Backtracking Algorithm: A method for solving problems that involves trying out different possibilities, and then "backtracking" or undoing decisions that lead to dead ends.
Branch and Bound Algorithm: A technique that divides a problem into sub-problems, solves them recursively, and then prunes the search space based on a lower or upper bound.
Approximation Algorithm: A type of algorithm that provides an approximate solution to a problem, without guaranteeing that it is optimal.
Heuristic Algorithm: A method that uses a simple set of rules as a guide for solving problems, without considering all possible solutions.
Reduction Algorithm: A technique for solving one problem by transforming it into another problem that is easier to solve.
Network Flow Algorithm: A method for optimizing the flow of material or information through a network, by minimizing or maximizing a particular metric.
Linear Programming Algorithm: A process for solving optimization problems that are subject to linear constraints.
Computational Geometry Algorithm: A type of algorithm that specializes in the manipulation of geometric objects, such as points, lines, and polygons.
Graph Theory Algorithm: A set of techniques for working with networks consisting of nodes and edges.
String Matching Algorithm: A method for searching for a particular sequence of characters within a larger body of text.
Artificial Intelligence Algorithms: A set of techniques for creating smart, decision-making systems that can learn and adapt over time.
Parallel Algorithms: A type of algorithm that runs multiple threads of computation simultaneously to speed up the process.
Distributed Algorithms: A process that distributes computational tasks across multiple devices or nodes, working together to achieve a common goal.
"Algorithms are used as specifications for performing calculations and data processing."
"More advanced algorithms can use conditionals to divert the code execution through various routes (referred to as automated decision-making) and deduce valid inferences (referred to as automated reasoning), achieving automation eventually."
"Using human characteristics as descriptors of machines in metaphorical ways was already practiced by Alan Turing with terms such as 'memory,' 'search,' and 'stimulus'."
"In contrast, a heuristic is an approach to problem solving that may not be fully specified or may not guarantee correct or optimal results, especially in problem domains where there is no well-defined correct or optimal result."
"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."
"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."
"The transition from one state to the next is not necessarily deterministic; some algorithms, known as randomized algorithms, incorporate random input."
"More advanced algorithms can use conditionals to divert the code execution through various routes (referred to as automated decision-making)."
"More advanced algorithms [...] deduce valid inferences (referred to as automated reasoning)."
"Using human characteristics as descriptors of machines in metaphorical ways was already practiced by Alan Turing."
"Using terms such as 'memory,' 'search,' and 'stimulus'."
"In contrast, a heuristic is an approach to problem solving that may not be fully specified or may not guarantee correct or optimal results."
"Especially in problem domains where there is no well-defined correct or optimal result."
"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."
"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'..."
"...terminating at a final ending state."
"The transition from one state to the next is not necessarily deterministic; some algorithms, known as randomized algorithms, incorporate random input."