Skip to content

Implemetation of all DSA from *Data Structures and Algorithms Specialization* on Coursera

License

Notifications You must be signed in to change notification settings

aniket-kr/Techniques-of-Designing-Algorithms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Algorithm Design Techniques

The Data Structures and Algorithms Specialization on Coursera teaches various ways to develop and design algorithms. This repo is a collection of algorithms I have developed by one of these techniques.

Greedy Algorithms

Greedy algorithms work by choosing a safe step and repeating the safe step till the problem is solved.

Divide and Conquer Algorithms

These algorithms divide the problem into smaller non-overlapping sub-problems. The base case of these sub-problems is usually the most obvious solution for the smallest input. MergeSort is an example.

Dynamic Programming

Dynamic Programming is a mathematical approach for breaking down the given problem into smaller overlapping sub-problems. The way to this approach is to develop a brute force solution and then optimize it using one of these techniques:

Memoization

Cache the output of the recursive function for given set of changing inputs.

Tabulation

Creates a table in memory and computes the result iteratively. The next larger result is computed using the previously computed smaller results.

Classic Algorithmic Problems

The following algorithms were covered in the course material:

  • Discrete Knapsack
  • Fractional Knapsack
  • (More soon..)

About

Implemetation of all DSA from *Data Structures and Algorithms Specialization* on Coursera

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published