This essay has been submitted by a student. This is not an example of the work written by our professional essay writers.
Searching something in a list is a common task. That something is normally called as a record(s). I.e. employee number , employee address etc. The goal of a search algorithm is to find the item/record in shortest possible time, keeping in view the efficient resource utilization. The resource in question may be Storage requirements, CPU utilization/Total execution time etc.
To store and search/access the data efficiently a number of data structures are used. Some of the commonly used data structures are arrays, stacks, queue, linked lists, tree, heaps etc. What to use where is the main concern. Every data structure has its pros and cons but the concept of efficiency or complexity is important when comparing algorithms. Most of the time mistake commited in choosing an algorithm is to put a side performance characteristic. Speedy algorithms are often more complex, keeping this in view, implementers are often ready to adopt a slower algorithm, provided it remains simple. Sometimes it also happens that a faster algorithm is also not too complex, and if we can bear little complexity, it is a small price to pay in return for a faster algorithm.
Types of input data
Data to be searched are found in two basic forms as listed below:
1)un Sorted data: Unsorted data is the data in its original form. No operation, besides simple insertion, has been performed on the data structure in which data it is stored. This type of data is normally used in linear searching algorithms.
2)Sorted Data: this types of data relates to data structure in which data is arranged in alphabetical order or in ascending / descending order.
Classes of Algorithm
Broadly classifying algorithms lie in following three classes:
Algorithms for sub structures of a specific structure.
Algorithms for virtual search spaces.
Algorithms for quantum computers
Algorithms for sub structures of a specific structure
Combinational search is the term normally used for algorithms that search for a sub structure of a specific structure. Such as a tree, a heap, a finite group, a string and so on. The name combinatorial optimization is normally used when the goal is to search a sub-structure with a minimum (or max) value of some node/object. In a computer a sub structure is normally represented by a set of variables with constraints so these problems can be considered as a special case of discrete optimization or constraint satisfaction. But they are normally solved more abstractly where the internal representation is not mentioned explicitly.)
An extensively used and studied is an important subclass of graph algorithms. These algorithms are used for locating sub structures in a given graph - such as sub graphs, circuits and so on. Prime examples of such algorithm include Kruskal's algorithm, Dijkstra's algorithm and the algorithm. Another important subclass of this category, which search for patterns within strings, are the string searching algorithms. A well known example is Knuth-Morris-Pratt algorithm.
Algorithms for Virtual Search spaces:
These are the algorithms used in constraint satisfaction problem (CSP). CSP are the problems where the objective is to find a set of values for certain variables that will satisfy specific mathematical equations. These algorithms are also used when we wish to find particular variable assignment which will minimize or maximize a certain function of those variables. Algorithms for such problems are "uninformed" or "naive" search commonly known as brute force search and different types of heuristics based algorithms that try to use partial understanding / knowledge about structure of the space namely constraint generation, constraint propagation and linear relaxation.
Local search methods are a sub class that takes the elements of a search space as vertices of graph. Whose edges are defined by some heuristics related to the case. They search the space by moving from element to element following the edges. i.e. stochastic search. To further elaborate stochastic search. Stochastic search is a form of heuristic search which can be generalized by following steps:
Create a set of prospective solutions.
Choose some elements from the set so as to prefer elements with best heuristic scores.
Utilize the above chosen to create more random variations.
Include these variations in the set, while deleting less important to maintain a constant size.
This class also encompasses Meta heuristics algorithms. A Meta heuristics is simply an algorithmic approach to optimize other heuristics in order to find acceptable solution or simply finding excellent heuristics for a specific problem. i.e genetic programming which is a branch of genetic algorithm.
Tree algorithms also come under this class. We will explain tree algorithms in detail in chapter 2 but for a brief introduction. They are built representing a Tree (Inverted tree) like structure parent - child relationship exists between different nodes. These tree can be traversed (visiting / processing each node of the tree) in different fashions i.e mainly exhaustive and heuristic methods. Exhaustive methods include breadth first search which is basically a level by level search and another type is depth first search which further has three orders (i.e Pre-order, In-order, Post-order).heuristic methods example is backtracking etc
Lastly (but not the least) another sub class consists of algorithms mainly used in Artificial Intelligence. For instance minmax is a prime example of such kind of algorithms. This algorithm basically tries to find the best possible solution based on best choice of action. The most common use of such algorithms is in game programming.
Applications of Algorithms
Search algorithms are used in variety of applications. Ranging from medical to science, educational to commercial, data management to data entry etc.
Some of the major applications/uses of algorithms are as listed below:
Internet Search Engines