1- Logarithmic Algorithms:
This type is the fastest of those 4 classes. It has a run curve that looks something like this:
bool BSearch(int[] list, int item, int first, int last)
{
if(last - first < 2)
return list[first] == item || list[last] == item;
int mid = (first + last)/2;
if(list[mid] == item)
return true;
if (list[mid] > item)
return BSearch(list, item, first, mid - 1);
return BSearch(list, item, mid + 1, last);
}
2- Linear Algorithms:
Runs in time, linear to the input items. It's curve looks like the following:
A linear search is a typical example of that, where one would traverse the array or, whatever data structure, item by item. An implementation of linear search looks like this:
bool LinearSearch(int[] list, int item)
{
for(int i = 0; i < list.Length; i++)
if(list[i] == item)
return true;
return false;
}
3- Quadratic Algorithm: This one runs time grows to to the power of 2, with each increase in the input sizes, which means while processing 2 items the algorithm will do 4 steps, 3 items will take 9 steps, 4 items will take 16 steps, etc. The next figure shows how a quadratic curve might look like: A famous example of an algorithm with quadratic growth is Selection Sort:
void SelectionSrot(int[] list)
{
int i, j;
int min, temp;
for (i = 0; i < list.Length - 1; i++)
{
min = i;
for (j = i + 1; j < list.Length; j++)
{
if (list[j] < list[min])
{
min = j;
}
}
temp = list[i];
list[i] = list[min];
list[min] = temp;
}
}
4- Exponential Algorithm:
This is the super slow of this list of four. It grows exponentially (that is, for 2 items it takes 2 ^ 2, for 3 items it takes 2^3, for 4 items it takes 2 ^ 4, etc.
Again algorithms are the key to computer science, the most fun part of programmer's job. Choose your algorithms carefully and always try to improve.
Hope this helps.



2 comments:
A more fine-grained and comprehensive listing:
http://en.wikipedia.org/wiki/Time_complexity#Table_of_common_time_complexities
Nice table, good link. Thank you!
Post a Comment