Click here to Skip to main content
15,885,792 members
Please Sign up or sign in to vote.
2.33/5 (3 votes)
See more:
What approach do I need to do in order to increase my ability in algorithm when I create a software?
Posted
Comments
PIEBALDconsult 19-Dec-14 18:54pm    
Practice practice practice.
http://www.amazon.com/Computer-Algorithms-Ellis-Horowitz/dp/0929306414/ref=sr_1_6?s=books&ie=UTF8&qid=1419033186&sr=1-6&keywords=computer+algorithms
deelll 19-Dec-14 19:13pm    
How do I know what algorithm is efficient?
Andreas Gieriet 19-Dec-14 19:54pm    
Learn about Complexity Theory.
Cheers
Andi

read all the articles and books you can

pick a 'pet' project or two and practice applying and redefining the implementation of algorithms

there is NO magic potion you can take - it all takes time, knowledge & practice
 
Share this answer
 
v2
Comments
deelll 19-Dec-14 19:14pm    
Do you have any recommended 'pet' project that you can suggest me to do based on your experience?
Garth J Lancaster 19-Dec-14 23:48pm    
the whole point of a pet project is it is something that you are interested in - what are your hobbies for example ? one of the last things I did (very roughly) was part pet/part work - given a set of latitude/longitudes I needed to calculate the bearing, distance, and reverse bearing between pairs of lat/longs, to aim antennas - since I have an interest in geography for example, it was interesting to get back into these sorts of calulations - and as usual Google was my friend (next step will be to actually plot it out on a map) - but the point is, it has to be something that you are interested in, that's what makes it interesting/fun
Sergey Alexandrovich Kryukov 19-Dec-14 21:28pm    
Reasonable enough, a 5.
—SA
First of all, it's helpful to agree on the term Algorithm[^]: [...] In mathematics and computer science, an algorithm [...] is a step-by-step procedure for calculations. [...]

There are various angles to look at your question.

If it's about your skills to implement an existing step-by-step description in a given language (e.g. C++), then you need first the understanding of the problem domain and its formalism and then have the practical experience to write and test the program for it. E.g. take Regula Falsi[^], or FFT (and it's implementation in C++)[^], etc.

  1. Understand the problem domain.
  2. Master it's formalism.
  3. Deduce from the formalism some step-by-step procedure to calculate values.
  4. Gain experience to implement the step-by-step description into a given computer language.


Another angle to view this question is: how to produce for a given problem a step-by-step procedure to calculate values without having a formalism at hand. E.g. problems like "trim a string", "write a fixed-point arithmetic for add/sub/mul/div/rem/sin/cos for a given number range and precision", etc.


  1. Understand the problem domain.
  2. Invent a formalism (a way to describe the problem and possible solution, e.g. in pseudo code) and experiment with it.
  3. Deduce from the formalism some step-by-step procedure to calculate values.
  4. Gain experience to implement the step-by-step description into a given computer language.


You see that a good part is common to both cases.

You need to acquire knowledge on discrete mathematics since you have to know about the limits of computer arithmetics. You need to acquire knowledge about complexity theory since you have to know how to estimate the complexity of a calculation (e.g. execution time, memory foot print, etc.).

In any case, beside a good portion of enthusiasm, you need to exercise - again and again. Start with the first approach to "implement" existing algorithms. Chose a topic you are interested in, e.g. directed graphs (there are many books about it), or pattern match (regular expressions), trigonometric series like sin(x) = x - x3/3! + x5/5! - x7/7! ... (any Math book), etc. and implement some of the algorithms.

Gain experience and learn as you go...

Cheers
Andi
 
Share this answer
 
Comments
Sergey Alexandrovich Kryukov 19-Dec-14 21:29pm    
Makes sense, a 5.
—SA
Andreas Gieriet 20-Dec-14 17:11pm    
Thanks for your 5!
Cheers
Andi

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900