In this course you will learn data structures and algorithms by solving practice problems. You will begin each course by learning to solve defined problems related to a particular data structure and algorithm. By the end of each course, you would be able to evaluate and assess different data structures and algorithms for any open-ended problem and implement a solution based on your design choices.
An algorithms is, essentially, a well-defined set of rules or instructions that allow solving a computational problem. The theoretical study of the performance of the algorithms and the resources used by them, usually time and space, allows us to evaluate if an algorithm is suitable for solving a specific problem, comparing it with other algorithms for the same problem or even delimiting the boundary between viable and impossible.
Main References
This is a restricted list of various interesting and useful books that will be touched during the course. You need to consult them occasionally.
Gayle Laakmann McDowell Cracking the Coding Interview
Alexander S. Kulikov and Pavel A. Pevzner Learning Algorithms Through Programming and Puzzle Solving
Aditya Y. Bhargava Grokking Algorithms: An illustrated guide for programmers and other curious people
Thomas H. Cormen, Charles E. Leiserson Introduction to Algorithms
Adnan Aziz, Tsung-Hsien Lee, and Amit Prakash, Elements of Programming Interviews in Java: The Insiders' Guide
This course is primarily designed to boost your knowledge in algorithms and data structures by closing technical preparation gaps.
This course if mainly for current software engineers with some years of experience.
Learning Ourcomes
Develop the ability to evaluate the complexity and quality of algorithms proposed for a given problem
Study the most representative, introductory algorithms of the most important classes problems threated in computation
Develop the ability to solve algorithmic problems using the fundamental principles of algorithms design
Be able to answer the following questions when a new algorihtm is presented. How good is the performance?, Is there a better way to solve the problem?
Prerequisites
An understanding of logic, maths, algorithms, and proficiency in some programming language is assumed.