hI THERE, i need some advice from the software geeks.If i need to get a fairly impressive hold over Algorithms,is it necessary to master calculus,theory of computation,discrete maths(as i've found them 2 be related 2 Algo analysis 2 some xtent?

0

0

What do you mean by 'algorithms'? Do you just want to memorize a bunch of algorithms? (Pretty useless; you can just look them up in a book.) Or do you want to be good at picking the right algorithm for your task? (Pretty useful.) Or do you want to be good at inventing algorithms to suit your needs? (Requires creative thinking, which you get by experience inventing algorithms to suit your needs.)

A combination of the three is what you want, I guess. It is not necessary to 'master' calculus or theory of computation to get a hold on Algorithms. (There is nobody in the world who has 'mastered' calculus or theory of computation, anyway.) Discrete mathematics, however, is very useful. Particularly, make yourself understand big O notation (otherwise, you won't understand how algorithms' running times and memory usage is measured).

I also strongly recommend making yourself have a solid understanding of proof by induction (part of any decent discrete mathematics course). (People who understand proof by induction and can actually put it into practice are better at writing anything that uses a while loop or recursion, because induction is often needed in order to convince yourself that a while loop or recursive function is programmed correctly. And vice versa -- people who write loops and recursive functions without a second thought are usually those who understand induction quickly.) If you want to understand _why_ an algorithm takes a certain amount of time, you'll need to use proof by induction usually. (Often induction can be abstracted over -- if a for loop runs N times, just multiply the inside by N, for example -- but other times it can't be.)

I don't think calculus is useful at all towards improving programming ability or understanding of algorithms. It depends on what you mean by 'calculus' -- a calculus course that teaches you how to be a robot that computes derivatives, integrals and limits is a complete waste of time. Calculus knowledge would only be useful for understanding numerical algorithms -- and that's more in the area of applied math than computer science.

So, discrete mathematics is the most important subject. And of that, only proof by induction and big O notation (what it means, and what its properties are) are really useful.

0

If the algorithms you write are for discrete mathematics then, yes, you do need an excellent hold of calculus, theory of computation, linear algebra, etc.

For example, if you were to write a program that does the Fast-Fourier Transform, and you didn't know the math behind it, you could write a program that works, but doesn't take advantage of the previous steps (or symmetry).

Another example: if you were to write a root-finding routine, you might simply write code based on the bisection algorithm. It would work, but it would not be elegant or efficient. However, if you had a better grasp of calculus, you might prefer code based on the secant method or Newton-Raphson method.

Even Games Developers, who you might think wouldn't be too mathematically involved, require a good grasp of math, especially linear algebra. They are always manipulating matrices, vectors, etc. and they want the code to execute as fast as possible. They could write adequate code, but the results wouldn't be realistic, and games players want their video games to be as realistic as possible. So Games Developers are constantly trying to improve their code. And many of those improvements come through a mastery of math.

Regards,

David

This topic has been dead for over six months. Start a new discussion instead.

Recommended Topics

HI everyone,

I recently inherited a project that has been in production for a number of years. They want a new field added. Easy peasy - or so you would ...

```
public class Gradesv2
{
public static void main(String[ ] args)
{
//local variables
int numTests = 0; //counts number of tests
int testgGrades = 0; //individual test grade
int totalPoints ...
```