# DSA -Day1

### **Why start DSA first?**

**DSA gives a better idea of how the tools of any particular language** like Python; c++; java  
in my point of view, languages are categorized as subsets

python&lt; java&lt; c++&lt; c &gt; &gt; &gt;

you can have a better view of the above after learning the basics of each language  
**it makes problem-solving easy**

### **What to learn in DSA?**

**step1 -** learn the basics of any one language(**NOTE:-** learning this in one language is enough to implement in any other language)

**step2 -** learn about big-O notations space-time complexity

**step3 -** learn about recursions and looping

**step4 -** learn about array linked **lists, stacks,** and **queues**(linear data structures)

**step5 - searching, sorting, heap maps, heaps, trees,** and **sliding windows**

**step6 -**  
graphs -

1. breadth-first search (BFS)
    
2. depth-first search(DFS)
    
3. shortest path from source to all vertices: Dijkstra
    
4. the shorter path from every vertex to every other vertex
    
5. minimum spanning tree: prim
    
6. maximum spanning tree: Kruskal
    
7. strongly connected components: kosaraju algorithm
    
8. topological sort
    
9. the shortest path from source to all vertices with negative part: Bellmen Ford
    
10. normal DSU
    
11. DSU by rank
    

Dynamic Programming -

1. memoisation
    
2. tabulation
    

**step7 - number theory, bit manipulation,** and **tries**

**step8 - OOP**

**step9 - projects**

**Note** - these are the basic you learn in DSA with which you can start doing problems while parallelly learning
