in reply to Re: Re: Algorithms
in thread Algorithms
I don't think your point is sound. What does "combine two algorithms" mean? Does that mean that mean that we place the two algorithms into a container, and then provide a way to choose which operates? If so then when I stick a toaster and an alarm clock in a box with the power cords sticking out then have I combined the two machines? Because algorithms are just machines, and most programs are like the box.
Now if by "combining two algorithms" you mean putting the two algorithms together in such a way that we have created a wholly new algorithm (much as a man and woman put their algorithms together and create a new algorithm: a child) then I think we are talking about something different and useful. Certainly one can combine algorithms in this sense. Heap sort would be an example, as would quick sort, as would hybrid sorts, etc. However by writing a program that has a heap sort in it (say to sort file dirtectory listings), and a ray tracing algorithm for some kind of flashy display, we cant say that the two together is an algorithm unless the two are part of an integral whole. Now if the heap sort was used by the ray tracing algorithm, and that it was critical to it, then I might agree it was an new algorithm. But just because I reach both algorithms by running the same executable image doesnt make them a new algorithm at all.
If you weaken the definition of algorithm to the point that you have then it becomes a useless term. Thats fine, we can play such games with just about any term, but I wonder what the objective is? Personally I dont think that "a tried and tested method of accomplishing a very basic goal" is a good description of an algorithm. For instance we might use such a term to describe using crime or ethnic scare-tactics in an election. Or fishing in a favorite location, or yelling "Fire" in a restaurant to get the waiters attention. Yet I think no computer scientist would grant that these are algorithms.
To me an algorithm is a deterministic process provably able to achieve a well definied objective. (Which is pretty close to Knuths definition below) From that definition it is difficult to consider many programs to be algorithms at all.
Incidentally the following is exerpted/quoted from Knuths Art of Programming Vol I in the introduction.
[The word algorithm is new word, not being in Websters dictionary as late as 1957. It stems from the word algorism which] comes from the name of the famous Persian textbook author Abu 'Abd Allah Muhammad ibn Musa al-Khwarizmi (c.825) ... Al-Khwarizmi wrote the celebrated book Kitab al-jabr wa'l-muqabala ("Rules of restoring and equating"); another word, "algebra," stems from the title of this book, which was a systematic study of the solution of linear and quadratic equations.[Personally I find this slightly amusing considering that modern day Persia is basically Iraq. (demerphq)]
Gradually the form and meaning of algorism became corrupted; as explained by the OED the wrod "passed through many pseudo-etymological perversions, including a recent algorithm in which it is lernedly confused" with the Greek root of the word Arithmetic. ... An early German mathematical dictionary, Vollstandiges mathematisches Lexicon (Leipzeig 1747) gave the following definition for the word Algorithmus: "Under this designation are combined the notions of the four types of arithmetic calculations, namely addition, multiplication, subtraction, division." The latin phrase algorithmus infitesmalis was at that time used to denote "ways of calculation with infinitely small quantities as invented by Leibniz."
... he then discusses Euclids algorithm for determining the GCD of two positive integers ...
The modern meaning of an algorithm is quite similar to that of a recipe, process, method, technique, procedure, routine, rigmarole, except that the word algorithm connotes something just a little different. Besides being merely a finite set of rules that gives a sequence of operations for solving a specific type of problem, an algorithm has five important features:
Finiteness. An algorithm must always terminate after a finite number of steps. (A procedure that has all of the characteristics of an algorithm except that it possibly lacks finiteness maybe be called a computational method. An example of a nontermination computational method is a reactive process, which continually interacts with its environment.)
He goes on to discuss the ramifications of the above and then moves on to a mathematical definition:
Let us formally define a computational method to be a quadruple (Q,I Ω,f), in which Q is a set containing subsets I and Ω and f is a function from Q into itself. Furthermore f should leave Ω pointwise fixed; that is, f(q) should equal q for all elements q of Ω. The four quantities Q, I, Ω, f are intended to represent respectively the states of the computation, the input, the output, and the computational rule. Each input x in the set sequence x0, x1,x2,..., as follows
He then adds a discusion of effectiveness from a mathematical view, including adding such a definition to the one above. I think that if you are correct that we have not moved into proper software engineering (which is an interesting debate in itself, similar to the one about whether programming is an art or science) then using proper rigourous mathematically based deifnitions is crucial. Not wishy washy define it away to meaninglessness kind of thinking or talking.
Anyway, I guess I got carried away with the quote here, I hope its useful to this thread. :-)
• Update:
Fixed some typos, etc. (BTW, I didnt realize that I was repeating Abigail-IIs quote in more detail until afterwards. That'll teach me to reply to a node before I finish reading the whole thread :-)
|
|---|