In an algorithm design there is no one 'silver bullet' that is a cure for all computation problems. Different problems require the use of different kinds of techniques. A good programmer uses all these techniques based on the type of problem. In this blog post, I am going to cover 2 fundamental algorithm design principles: greedy algorithms and dynamic programming.
Leni Krsová is social media data analyst from the Czech Republic, currently based in Prague. At the beginning of her career, she worked for Czech TV, a public broadcaster in the country, as a social media editor but switched quickly from marketing to the path of a data analyst. Since then she is interested more and more in data analysis of social media and online news media data with R, data privacy and academic research in these fields. She is planning to start her Ph.D. studies in near future.
Deep Narain Singh is Data Scientist with specialization in machine learning and deep learning. He has extensive work experience in building NLP/Computer Vision products using AI/ML/DL. He has spent 12 years in industry working with startups and large scale companies. He holds a Master’s degree in Data Science from the University Of New Haven/Galvanize and completed his undergraduate in Civil Engineering from NIT Jaipur.
The major advantage of using decision trees is that they are intuitively very easy to explain. They closely mirror human decision-making compared to other regression and classification approaches. They can be displayed graphically, and they can easily handle qualitative predictors without the need to create dummy variables.
As you see, you should make a habit of thinking about the time complexity of algorithms as you design them. Asymptotic analysis is a powerful tool, but use it wisely. Sometimes optimizing runtime may negatively impact readability or coding time. Whether you like it or not, an effective engineer knows how to strike the right balance between runtime, space, implementation time, maintainability, and readability.