An
algorithm is a definite list of well-defined instructions for completing a
task; that given an initial state, will proceed through a well-defined series
of successive states, eventually terminating in an end-state. The concept of an
algorithm originated as a means of recording procedures for solving
mathematical problems such as finding the common divisor of two numbers or
multiplying two numbers.
THE IMPORTANCE OF KNOWNING ALGORITHMS
As a computer scientist, it is important to
understand all of these types of algorithms so that one can use them properly.
If you are working on an important piece of software, you will likely need to
be able to estimate how fast it is going to run. Such an estimate will be less
accurate without an understanding of runtime analysis. Furthermore, you need to
understand the details of the algorithms involved so that you'll be able to
predict if there are special cases in which the software won't work quickly, or
if it will produce unacceptable results.
Of course, there are often times when you'll run across a problem that has not been previously studied. In these cases, you have to come up with a new algorithm, or apply an old algorithm in a new way. The more you know about algorithms in this case, the better your chances are of finding a good way to solve the problem. In many cases, a new problem can be reduced to an old problem without too much effort, but you will need to have a fundamental understanding of the old problem in order to do this.
Of course, there are often times when you'll run across a problem that has not been previously studied. In these cases, you have to come up with a new algorithm, or apply an old algorithm in a new way. The more you know about algorithms in this case, the better your chances are of finding a good way to solve the problem. In many cases, a new problem can be reduced to an old problem without too much effort, but you will need to have a fundamental understanding of the old problem in order to do this.
WHY ALGORITHMS ARE NECESSARY??
No human being can write fast enough, or long
enough, or small enough to list all members of an enumerable infinite set by
writing out their names, one after another, in some notation. But humans can do
something equally useful, in the case of certain enumerable infinite sets: They
can give explicit instructions for determining the nth member of the set, for arbitrary
finite n. Such instructions are to be given quite explicitly, in a form in
which they could be followed by a computing machine or by a human who is
capable of carrying out only very elementary operations on symbols".
Analysis
The analysis and study of algorithms is a
discipline of computer science, and is often practiced abstractly without the
use of a specific programming language or implementation. In this sense,
algorithm analysis resembles other mathematical disciplines in that it focuses
on the underlying properties of the algorithm and not on the specifics of any
particular implementation. Usually pseudo-code is used for analysis as it is
the simplest and most general representation.
REAL WORLD EXAMPLES
·
Maximum Flow
The maximum flow problem has to do with
determining the best way to get some sort of stuff from one place to another,
through a network of some sort. In more concrete terms, the problem first arose
in relation to the rail networks of the Soviet Union, during the 1950's. The US
wanted to know how quickly the Soviet Union could get supplies through its rail
network to its satellite states in Eastern Europe.
In addition, the US wanted to know which rails it could destroy most easily to cut off the satellite states from the rest of the Soviet Union. It turned out that these two problems were closely related, and that solving the max flow problem also solves the min cut problem of figuring out the cheapest way to cut off the Soviet Union from its satellites.
In addition, the US wanted to know which rails it could destroy most easily to cut off the satellite states from the rest of the Soviet Union. It turned out that these two problems were closely related, and that solving the max flow problem also solves the min cut problem of figuring out the cheapest way to cut off the Soviet Union from its satellites.
The first efficient algorithm for finding the
maximum flow was conceived by two Computer Scientists, named Ford and
Fulkerson. The algorithm was subsequently named the Ford-Fulkerson algorithm,
and is one of the more famous algorithms in computer science. In the last 50
years, a number of improvements have been made to the Ford-Fulkerson algorithm
to make it faster, some of which are dauntingly complex.
Since the problem was first posed, many
additional applications have been discovered. The algorithm has obvious
relevance to the Internet, where getting as much data as possible from one
point to another is important. It also comes up in many business settings, and
is an important part of operations research. For example, if you have N
employees and N jobs that need to be done, but not every employee can do every
job, the max flow algorithm will tell you how to assign your N employees to
jobs in such a way that every job gets done, provided that's possible.
Graduation, from SRM 200, is a good example of a TopCoder problem that lends
itself to a solution using max flow.
·
Sequence Comparison
Many coders go their entire careers without
ever having to implement an algorithm that uses dynamic programming. However,
dynamic programming pops up in a number of important algorithms. One algorithm
that most programmers have probably used, even though they may not have known
it, finds differences between two sequences. More specifically, it calculates
the minimum number of insertions, deletions, and edits required to transform
sequence A into sequence B.
For example, lets consider two sequences of letters, "AABAA" and "AAAB". To transform the first sequence into the second, the simplest thing to do is delete the B in the middle, and change the final A into a B. This algorithm has many applications, including some DNA problems and plagiarism detection. However, the form in which many programmers use it is when comparing two versions of the same source code file. If the elements of the sequence are lines in the file, then this algorithm can tell a programmer which lines of code were removed, which ones were inserted, and which ones were modified to get from one version to the next.
For example, lets consider two sequences of letters, "AABAA" and "AAAB". To transform the first sequence into the second, the simplest thing to do is delete the B in the middle, and change the final A into a B. This algorithm has many applications, including some DNA problems and plagiarism detection. However, the form in which many programmers use it is when comparing two versions of the same source code file. If the elements of the sequence are lines in the file, then this algorithm can tell a programmer which lines of code were removed, which ones were inserted, and which ones were modified to get from one version to the next.
Without dynamic programming, we would have to
consider a - you guessed it - exponential number of transformations to get from
one sequence to the other. As it is, however, dynamic programming makes for an
algorithm with a runtime of only O(N*M), where N and M are the numbers of
elements in the two sequences.
·
Automotive
Design
Using
Genetic Algorithms [GAs] to both design composite materials and aerodynamic
shapes for race cars and regular means of transportation
(including aviation) can return combinations of best materials and best
engineering to provide faster, lighter, more fuel efficient and safer vehicles
for all the things we use vehicles for. Rather than spending years in
laboratories working with polymers, wind tunnels and balsa wood shapes, the
processes can be done much quicker and more efficiently by computer modelling
using GA searches to return a range of options human designers can then put
together however they please.
·
Engineering
Design
Getting
the most out of a range of materials to optimize the structural and operational
design of buildings, factories, machines, etc. is a rapidly expanding
application of GAs. These are being created for such uses as optimizing the
design of heat exchangers, robot gripping arms, satellite booms, building
trusses, flywheels, turbines, and just about any other computer-assisted
engineering design application. There is work to combine GAs optimizing
particular aspects of engineering problems to work together, and some of these
can not only solve design problems, but also project them forward to analyze
weaknesses and possible point failures in the future so these can be avoided.
No comments:
Post a Comment