Ongoing Project
This program developed to learn Algorithms for using in Competitive Prorgamming, but can be used for:
- Competitive Programming
- Practicing for Interviews
- Improving Algorithmic Thinking
- Practicing for College Class
- FUN
The course requires:
- To know at least one programming language well. (You have to be able to use the language efficiently.)
- You have to be familiarize with some of the basic Data Structures (Array, Stack, Queue, etc.) (Although if you don't know some of them, you may learn it when you come accross.)
PS: I am saying "Any programming language" but in this course mostly we used Java and C++ some C. But still you can follow the curriculum without any knowledge of these languages
In this course we will use some tools for the questions. As I mentioned above all of these questions already exists, we just highlight them so that you can reach better. Here are the websites/tools that we use through this course:
I gave these tools name because you may not be able to submit your solution or display the question for some websites. It would be better if you just sign up. Although it is not neccesary...
Here are the topics we included in this curriculum.
- Stacks
- Queues
- Priority queue
- Hashmap
- Linked List
- Trees
- Heaps
- Advanced Trees
- Tries
- Segment trees
- Fenwick tree or Binary indexed trees
- RMQ
- SQRT Decomposition
- Disjoint Data Structure
- C++ STL (optional)
-
Number Theory
- Prime Numbers (Sieve of Eratosthenes)
- GCD and LCM Euclid’s Algorithm
- Modular Exponentiation
- Long arithmetic (Multi, Add)
- Efficient Prime Factorization
-
Combinatorics(Probability-Combinations-Permutations-Matrix..)
-
Computational geometry
- Primitive Operations
- Intuition
- Polygon Inside, Outside
- Implementing CCW
- Immutable Point ADT
- Convex Hull
- Closest pair problem
- Line intersection
- Primitive Operations
-
Sorting
- QuickSort
- Counting Sort
- Merge Sort
-
Searching
- Binary Search
- Ternary Search
-
Graph Theory
- Depth First Search (DFS)
- Breadth First Search (BFS)
- Dijkstra’s Shortest Path
- Minimum Spanning Tree
- Ford Bellman
- Floyd Warshall
- LCA (Lowest Common Ancestor)
- Max Flow / Min Cut
-
Dynamic programming
- Knapsack
- Matrix chain multiplication
- Coin Change
- Kadane
- Longest increasing Subsequence (with RMQ)
-
Strings
- Z algorithm
- Suffix Trees/Arrays
- Knuth-Morris-Pratt Algorithm (KMP)
- Rabin-Karp Algorithm
- Hash
-
Bit Manipulation
-
Game theory
- Nim game
- Grundy numbers
- Sprague-Grundy theorem
-
Optional Advanced Algorithms
- AVL Trees
- Graph Coloring
- Mo's Algorithm
- Palindromic Tree
- Heavy Light Decomposition
- Dynamic Programming by Profile
- Rod Cutting
- Topological Sorting
- DP with Bitmask - Dynamic Programming
- Diobhantine Equation - Math
- Flood Fill - Graph
Week | Topics | Optional Topics |
---|---|---|
1.Week |
|
|
2.Week |
|
|
3.Week |
|
|
4.Week |
|
|
5.Week |
|
|
6.Week |
|
|
7.Week |
|
|
8.Week | Questions from previous topics | |
9.Week |
|
|
10.Week |
|
|
11.Week |
|
|
12.Week |
|
|
13.Week |
|
|
14.Week |
|
|
15.Week |
|
|
16.Week | Questions from previous topics | |
17.Week |
|
|
18.Week |
|
|
19.Week |
|
|
20.Week |
|
|
This repository contains examples of various algorithms written on different programming languages...
Maths | C | CPP | Java | Python |
---|---|---|---|---|
Euclidean GCD | ||||
Fibonacci series | ||||
Pallindrome number | ||||
Perfect number |
Searching and Sorting | C | CPP | Java | Python |
---|---|---|---|---|
QuickSort | ||||
Merge Sort | ||||
Insertion Sort | ||||
Counting Sort | ||||
Radix Sort | ||||
Bubble Sort | ||||
Heap Sort | ||||
Linear Search | ||||
Binary Search |
Tree traversal | C | CPP | Java | Python |
---|---|---|---|---|
Pre-Order Traversal | ||||
Post-Order Traversal | ||||
In-Order Traversal | ||||
Binary Search Tree | ||||
Height of the Tree | ||||
Depth of the Tree | ||||
AVL Tree | ||||
Spanning Tree | ||||
Segment Tree | ||||
Fenwick Tree | ||||
Trie |
Graph Traversal | C | CPP | Java | Python |
---|---|---|---|---|
Breadth First Search | ||||
Depth First Search | ||||
Topological Sort | ||||
Kruskals Algorithms | ||||
Prim's Algorithms | ||||
Belmon Ford Algorithms | ||||
Floyd-Warshall Algorithm | ||||
Dijkstra's Algorithm |
- Project Euler
- LeetCode
- InterviewBit
- Codility
- HackerRank
- Project Euler
- Spoj
- Google Code Jam practice problems
- HackerEarth
- Top Coder
- CodeChef
- Codewars
- CodeSignal
- CodeKata
- Firecode
- Data Structures
- Algorithms
- Competitive Programming 3 - Steven Halim & Felix Halim
- Cracking The Coding Interview - Gayle Laakmann McDowell
- Cracking The PM Interview - Gayle Laakmann McDowell & Jackie Bavaro
- Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest & Clifford Stein
- GeeksForGeeks – A CS portal for geeks
- Learneroo – Algorithms
- Top Coder tutorials
- Infoarena training path (RO)
- Steven & Felix Halim – Increasing the Lower Bound of Programming Contests (UVA Online Judge)
- MIT – Hacking a Google Interview
- Coderust 2.0 ($$)
- Interview Cake ($$$) [review]
- How to Ace the Software Engineering Interview ($$)
- Grokking the System Design Interview ($$)
- Coding for Interviews
- Career Cup
- HiredInTech
- Codela
- TestDome
- FreeCodeCamp "Learn to code and help nonprofits"
- Dynamic Programming Practice Problems
- How to: Work at Google – Candidate Coaching Session for Technical Interviewing [45:45]
- Gayle McDowell – Cracking the Coding Interview [1:14:24]
- Gayle McDowell - Cracking the Coding Interview (examples) [9:05]
- Google Recruiters Share Technical Interview Tips [31:06]
- Google Recruiters Share Non-Technical Interview Tips [28:23]
- Moishe Lettvin – What I Learned Doing 250 Interviews at Google [1:00:24]
- Sean Lee – How to Get a Job at the Big 4 [42:34]
- Ladies Storm Hackathons – Interview Prep Round 1: Strings, Arrays, Linked Lists [1:12:39]
- Randall Koutnik – Rethinking the Developer Career Path [25:03]
- donnemartin/system-design-primer
- Grokking the System Design Interview
- This is a paid course but has several free previews such as Designing Instagram
- binhnguyennus/awesome-scalability
- Raph Levien – Rope Science
- Architecture of Open Source Applications
- How should I prepare system design questions for Google/Facebook interview?
- Jeff Atwood – How Good an Estimator Are You?
- 0xAX/linux-insides
* Codecademy
* Freecodecamp
* Progate
* Cs50 by Harvard university
* udacity
* Coursera - recommended courses - Algorithmic toolbox, java programming
* Edx - CS50 , Mit introduction to programming with python
* Datacamp
- Git
- Postman
- Learn an Object oriented programming language - Java, c++, python etc
- Learn DS, Algo
- Learn Database and dbms concepts
- Networking
- Operating systems
- Web Programming - CS50 web programming course by Harvard university
- Learn basics of unix
- Open Source CS
- A-Z Student Resouce
- Project based in C
- Fnplus
- Build your own X
- Project based Learning *Awesome Beginners
- Fork it!
- Clone the forked repository to local system.
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
. Go through Commit Messages guidelines - Push to the branch:
git push origin my-new-feature
- Submit a pull request 😄
See Contributor.md ilename] |
Only project maintainers should merge a PR. Other members can add their reviews to a PR but the merging should be done by only a project maintainer.