|
||||||||||
Title: Usefulness of advanced algorithm design courses Post by amichail on Nov 28th, 2006, 7:55pm 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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by Sameer on Nov 28th, 2006, 9:23pm 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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by Whiskey Tango Foxtrot on Nov 28th, 2006, 9:35pm 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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by towr on Nov 29th, 2006, 1:37am on 11/28/06 at 19:55:33, amichail wrote:
Quote:
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:
Quote:
Quote:
-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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by amichail on Nov 29th, 2006, 1:47am on 11/29/06 at 01:37:42, towr 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. 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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by towr on Nov 29th, 2006, 2:15am on 11/29/06 at 01:47:43, amichail wrote:
Quote:
Quote:
|
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by amichail on Nov 29th, 2006, 2:19am 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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by amichail on Nov 29th, 2006, 2:22am on 11/29/06 at 02:15:00, towr 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. |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by towr on Nov 29th, 2006, 3:05am on 11/29/06 at 02:22:27, amichail wrote:
on 11/29/06 at 02:19:13, amichail wrote:
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) |
||||||||||
Title: Re: Usefulness of advanced algorithm design course Post by kay on Dec 22nd, 2006, 1:45am 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. |
||||||||||
Powered by YaBB 1 Gold - SP 1.4! Forum software copyright © 2000-2004 Yet another Bulletin Board |