wu :: forums
« wu :: forums - Usefulness of advanced algorithm design courses »

Welcome, Guest. Please Login or Register.
Apr 18th, 2024, 2:16pm

RIDDLES SITE WRITE MATH! Home Home Help Help Search Search Members Members Login Login Register Register
   wu :: forums
   riddles
   general problem-solving / chatting / whatever
(Moderators: Icarus, Grimbal, ThudnBlunder, SMQ, towr, william wu, Eigenray)
   Usefulness of advanced algorithm design courses
« Previous topic | Next topic »
Pages: 1  Reply Reply Notify of replies Notify of replies Send Topic Send Topic Print Print
   Author  Topic: Usefulness of advanced algorithm design courses  (Read 1468 times)
amichail
Senior Riddler
****





   


Posts: 450
Usefulness of advanced algorithm design courses  
« on: Nov 28th, 2006, 7:55pm »
Quote Quote Modify Modify

How useful are advanced algorithm design courses for software engineers?
 
This seems like a complicated question to me.
 
If a software engineer encounters a common problem, then there is almost certainly a library with one of the best algorithms available for that problem.
 
If a software engineer encounters an obscure problem, then what is the probability that (a) the problem is tractable and (b)  the software engineer would find an efficient algorithm for that problem?
 
And even if the software engineer succeeds in that respect (and perhaps publishes a paper or two along the way), what happens if the problem evolves as the system evolves?
 
What is the probability that the efficient algorithm will continue to apply, at least in some variation?  
 
Whether or not advanced algorithm design courses are useful for software engineers appears to be an empirical question that would be quite difficult to answer.
« Last Edit: Nov 28th, 2006, 7:59pm by amichail » IP Logged

DropZap - a new kind of block elimination game
Sameer
Uberpuzzler
*****



Pie = pi * e

   


Gender: male
Posts: 1261
Re: Usefulness of advanced algorithm design course  
« Reply #1 on: Nov 28th, 2006, 9:23pm »
Quote Quote Modify Modify

i am not from comp sci background but from my friends who are and the algorithm books they have been reading, I think the course is very important. It is just not the case of knowing algorithms and that libraries are available, but it is also important for software engineers to know the techniques employed in reducing the complexity of calculations. The approach is more useful than the content itself.
IP Logged

"Obvious" is the most dangerous word in mathematics.
--Bell, Eric Temple

Proof is an idol before which the mathematician tortures himself.
Sir Arthur Eddington, quoted in Bridges to Infinity
Whiskey Tango Foxtrot
Uberpuzzler
*****



Sorry Goose, it's time to buzz a tower.

   
Email

Gender: male
Posts: 1672
Re: Usefulness of advanced algorithm design course  
« Reply #2 on: Nov 28th, 2006, 9:35pm »
Quote Quote Modify Modify

I agree as well.  I am not a comp sci major either, but I have taken more than my fair share and have used almost everything I've learned in those classes in EE courses and projects.  I actually talked this over with my uncle, who works at Goldman Sachs, and he said that finding a more efficient algorithm is the major selling point for most computation-based services.  If your company can pump out 40 calculations in the time it takes your competitor to do 25, you are providing a more valuable service.  Learning how to create advanced algorithms is invaluable in my opinion, but I'm interested to see what some of the more experienced computer wizards on the site have to say.
IP Logged

"I do not feel obliged to believe that the same God who has endowed us with sense, reason, and intellect has intended us to forgo their use." - Galileo Galilei
towr
wu::riddles Moderator
Uberpuzzler
*****



Some people are average, some are just mean.

   


Gender: male
Posts: 13730
Re: Usefulness of advanced algorithm design course  
« Reply #3 on: Nov 29th, 2006, 1:37am »
Quote Quote Modify Modify

on Nov 28th, 2006, 7:55pm, amichail wrote:
If a software engineer encounters a common problem, then there is almost certainly a library with one of the best algorithms available for that problem.
It is actually rare to find that a general library function does exactly what you specifically want. Libraries do general things pretty well, but specific things not as well as possible. A good software engineer should be able to make up some of that difference, although hobby programmers probably won't.
 
Quote:
If a software engineer encounters an obscure problem, then what is the probability that (a) the problem is tractable and (b)  the software engineer would find an efficient algorithm for that problem?
If he followed an advanced algorithm design class, the chances are rather better than if he hasn't. Because in the design class he'll have learned how to think about reducing the problem to manageble proportions.
And of course efficiency is a relative term. If the only alternative is the application of a brute force library function, then chances are he can vastly improve the computation process. I know people working with image/handwriting processing, where processing the database in the standard way would take weeks, but with improved algorithms it takes mere hours. It can be very important to squeeze out those last few cycles.
 
Quote:
And even if the software engineer succeeds in that respect (and perhaps publishes a paper or two along the way), what happens if the problem evolves as the system evolves?
Typically the application/algorithms also evolves. It's just coevolution at work.
 
Quote:
What is the probability that the efficient algorithm will continue to apply, at least in some variation?
Pretty good, generally. As the key problems don't usually change that much. And even if they do, you want to get there as fast as possible. If nothing else an efficient algorithm is usefull to bring you to the next stage as fast as possible. A bit of thought can safe you months of work (especially in fields involving vast amounts of dataprocessing, as mentioned before).
 
Quote:
Whether or not advanced algorithm design courses are useful for software engineers appears to be an empirical question that would be quite difficult to answer.
If it's an empirical question, then experiment.  
-Make two groups of students
-Make/compile a set of complicated problems
-Have one group start right away at solving them, and the other first follow a course in advanced algorithm design.  
-At the end check who has made the most and best progress a year later.  
It will probably be the second group, even though they started late due to "wasting" a quarter studying design.
IP Logged

Wikipedia, Google, Mathworld, Integer sequence DB
amichail
Senior Riddler
****





   


Posts: 450
Re: Usefulness of advanced algorithm design course  
« Reply #4 on: Nov 29th, 2006, 1:47am »
Quote Quote Modify Modify

on Nov 29th, 2006, 1:37am, towr wrote:

Pretty good, generally. As the key problems don't usually change that much. And even if they do, you want to get there as fast as possible. If nothing else an efficient algorithm is usefull to bring you to the next stage as fast as possible. A bit of thought can safe you months of work (especially in fields involving vast amounts of dataprocessing, as mentioned before).

It seems to me that efficient algorithms tend to be very brittle. Change the problem even slightly, and they may not apply at all. In fact, the problem may in fact become intractable. This is not a good sign for rapidly changing requirements.
 
By "efficient algorithms", I mean ones with good worst case/average case guarantees.
 
Heuristics, which provide no such guarantees, might be less brittle in the presence of changing requirements. But heuristics don't require an advanced algorithms class either.
IP Logged

DropZap - a new kind of block elimination game
towr
wu::riddles Moderator
Uberpuzzler
*****



Some people are average, some are just mean.

   


Gender: male
Posts: 13730
Re: Usefulness of advanced algorithm design course  
« Reply #5 on: Nov 29th, 2006, 2:15am »
Quote Quote Modify Modify

on Nov 29th, 2006, 1:47am, amichail wrote:
It seems to me that efficient algorithms tend to be very brittle. Change the problem even slightly, and they may not apply at all.
Not without adapting the algorithm slightly, no. Btu I don't see why that would be a problem.
 
Quote:
This is not a good sign for rapidly changing requirements.
Areas were efficiency is required aren't generally all that changeable in my experience. Notable because efficiency isn't needed unless you have "a lot of the same" going on repeatedly.
 
Quote:
But heuristics don't require an advanced algorithms class either.
They don't?!
IP Logged

Wikipedia, Google, Mathworld, Integer sequence DB
amichail
Senior Riddler
****





   


Posts: 450
Re: Usefulness of advanced algorithm design course  
« Reply #6 on: Nov 29th, 2006, 2:19am »
Quote Quote Modify Modify

By heuristics, I mean algorithms with no guarantees.
 
So I don't see that there is a lot to teach people about how to come up with heuristics.
IP Logged

DropZap - a new kind of block elimination game
amichail
Senior Riddler
****





   


Posts: 450
Re: Usefulness of advanced algorithm design course  
« Reply #7 on: Nov 29th, 2006, 2:22am »
Quote Quote Modify Modify

on Nov 29th, 2006, 2:15am, towr wrote:

Not without adapting the algorithm slightly, no. Btu I don't see why that would be a problem.

Changing the problem slightly might make it intractable (e.g., NP-complete). It's not obvious that the original algorithm or a slight variation thereof would be of any use now.
IP Logged

DropZap - a new kind of block elimination game
towr
wu::riddles Moderator
Uberpuzzler
*****



Some people are average, some are just mean.

   


Gender: male
Posts: 13730
Re: Usefulness of advanced algorithm design course  
« Reply #8 on: Nov 29th, 2006, 3:05am »
Quote Quote Modify Modify

on Nov 29th, 2006, 2:22am, amichail wrote:
Changing the problem slightly might make it intractable (e.g., NP-complete). It's not obvious that the original algorithm or a slight variation thereof would be of any use now.
I disagree that that is generally the case. It's a matter of evolution, usually you don't stray very far from where you start. Radical changes of the problem at hand are rare.
 
on Nov 29th, 2006, 2:19am, amichail wrote:
By heuristics, I mean algorithms with no guarantees.
 
So I don't see that there is a lot to teach people about how to come up with heuristics.
Again, I disagree. It is a way of thinking that doesn't come naturally to everyone, and it needs to be develloped. A sort of philosophy of computation. There's really much more to it than a bit of handwaving.
Take computational chess for example, the heuristic strategies it employs are hardly trivial. And while it may not guarantee the best play, it is generally better under time constraints than an algorithms that would guarantee best play (for one, because that would be intractable except in endgames)
IP Logged

Wikipedia, Google, Mathworld, Integer sequence DB
kay
Newbie
*





   


Posts: 1
Re: Usefulness of advanced algorithm design course  
« Reply #9 on: Dec 22nd, 2006, 1:45am »
Quote Quote Modify Modify


Some points which seem to be missing so far from the discussion:
 
1. One of the most important things you learn in an advanced algorithms class is the notion of reduction. A large fraction of problems programmers face in practice can be reduced to standard problems such as max flow or matching. Having taken an algorithms class makes you better positioned to realize that there is a reduction.  
 
2. Of course there is the question of knowing that problems such as min cost flow and B-matching can be solved efficiently, and knowing how to solve them. In an algorithms class, you learn that these are well studied problems.
 
3. A math class teaches you how to add numbers, so that even though it doesn't explicitly teach you how to add 12442 and 1077543, you are usually in a position to add these two after learning to add. In a similar way, an algorithms class teaches you how to think algorithmically... so that you can solve the particular problem you face later.
 
4. Often I have found that programmers don't even recognize that there can be a non-brute force way to do something.  Often that is fine in that the problem is not really a bottleneck and may not be worth the time spent looking for a better solution. Sometimes though it can really make a difference.
IP Logged
Pages: 1  Reply Reply Notify of replies Notify of replies Send Topic Send Topic Print Print

« Previous topic | Next topic »

Powered by YaBB 1 Gold - SP 1.4!
Forum software copyright © 2000-2004 Yet another Bulletin Board