Skip to main content

Command Palette

Search for a command to run...

Table of Contents (For Java) : 1. Introduction

Note: Some terms and headings in my copy contained minor inconsistencies, so I have updated and standardized them here for clarity.

Updated
6 min read
A

I am a passionate Web Developer from India, currently specializing in Full Stack Development. I aim to actively engage with the tech community, fostering creativity, sharing my knowledge, and collaborating to grow together. Let's innovate and build the future of technology!

1.1. Variables

1.2. Data Types

1.3. Data Structure

1.4. Abstract Data Types(ADTs)

1.5. What is an algorithm?

1.6. Why Analysis of Algorithms?

1.7. Goal of Analysis of Algorithms

1.8. What is Running Time Analysis

1.9. How to compare Algorithms?

1.10. What is Rate of Growth?

1.11. Commonly used Rate of Growths

1.12. Types of Analysis

1.13. Asymptotic Notation

1.14. Big-O Notation

1.15. Omega-Ω Notation

1.16. Theta-Θ Notation

1.17. Important Notes

1.18. Why is it called Asymptotic Analysis?

1.19. Guidelines for Asymptotic Analysis

1.20. Properties of Notations

1.21. Commonly used Logarithms and Summations

1.22. Master Theorem for Divide and Conquer

1.23. Problems on Divide and Conquer Master Theorem

1.24. Master Theorem for Subtract and Conquer Recurrences

1.25. Variant of Subtraction and Conquer Master Theorem

1.26. Method of Guessing and Confirm

1.27. Amortized Analysis

1.28. Problems on Algorithms Analysis

2.Recursion and Backtracking

2.1. Introduction

2.2. What is Recursion

2.3. Why Recursion

2.4. Format of a Recursive Function

2.5. Recursion and Memory (Visualization)

2.6. Recursion versus Iteration

2.7. Notes on Recursion

2.8. Example Algorithms of Recursion

2.9. Problems on Recursion

2.10. What is Backtracking?

2.11. Example Algorithms of Backtracking

2.12. Problems on Backtracking

3.Linked Lists

3.1. What is a Linked List?

3.2. Linked Lists ADT

3.3. Why Linked Lists?

3.4. Arrays Overview

3.5. Comparison of Linked List with Arrays & Dynamic Arrays

3.6. Singly Linked Lists

3.7. Doubly Linked Lists

3.8. Circular Linked Lists

3.9. A Memory-Efficient Doubly Linked List

3.10. Unrolled Linked Lists

3.11. Skip Lists

3.12. Problems on Linked Lists

4.Stacks

4.1. What is a Stack?

4.2. How Stacks are used?

4.3. Stack ADT

4.4. Exceptions

4.5. Applications

4.6. Implementation

4.7. Comparison of Implementations

4.8. Problems on Stacks

5.Queues

5.1. What is a Queue?

5.2. How are Queues used?

5.3. Queue ADT

5.4. Exceptions

5.5. Applications

5.6. Implementation

5.7. Problems on Queues

6.Trees

6.1. What is a Tree?

6.2. Glossary

6.3. Binary Trees

6.4. Binary Tree Traversals

6.5. Generic Trees (N-ary Trees)

6.6. Threaded [Stack or Queue less] Binary Tree Traversals

6.7. Expression Trees

6.8. XOR Trees

6.9. Binary Search Trees (BSTs)

6.10. Balanced Binary Search Trees

6.11. AVL (Adelson-Velskii and Landis) Trees

6.12. Other Variations in Trees

7.Priority Queues and Heaps

7.1. What is a Priority Queue?

7.2. Priority Queue ADT

7.3. Priority Queue Applications

7.4. Priority Queue Implementations

7.5. Heaps and Binary Heap

7.6. Binary Heaps

7.7. Problems on Priority Queues [Heaps]

8.Disjoint Sets ADT

8.1. Introduction

8.2. Equivalence Relations and Equivalence Classes

8.3. Disjoint Sets ADT

8.4. Applications

8.5. Tradeoffs in Implementing Disjoint Sets ADT

8.6. Fast UNION implementation (Slow FIND)

8.7. Fast UNION implementation (Quick FIND)

8.8. Path Compression

8.9. Summary

8.10. Problems on Disjoint Sets

9.Graph Algorithms

9.1. Introduction

9.2. Glossary

9.3. Applications of Graphs

9.4. Graph Representation

9.5. Graph Traversals

9.6. Topological Sort

9.7. Shortest Path Algorithms

9.8. Minimum Spanning Tree

9.9. Problems on Graph Algorithms

10.Sorting

10.1. What is Sorting?

10.2. Why is Sorting Necessary?

10.3. Classification

10.4. Other Classifications

10.5. Bubble sort

10.6. Selection Sort

10.7. Insertion Sort

10.8. Shell Sort

10.9. Merge Sort

10.10. Heapsort

10.11. Quicksort

10.12. Tree Sort

10.13. Comparison of Sorting Algorithms

10.14. Linear Sorting Algorithms

10.15. Counting Sort

10.16. Bucket sort [or Bin Sort]

10.17. Radix sort

10.18. Topological Sort

10.19. External Sorting

10.20. Problems on Sorting

11.Searching

11.1. What is Searching?

11.2. Why do we need Searching?

11.3. Types of Searching

11.4. Symbol Tables and Hashing

11.5. String Searching Algorithms

11.6.Problems on Searching

12.Selection Algorithms [Medians]

12.1. What are Selection Algorithms?

12.2. Selection by Sorting

12.3. Partition-based Selection Algorithm

12.4 Linear Selection algorithm - Median of Medians algorithm

12.5. Finding the K Smallest Elements in Sorted Order

12.6. Problems on Selection Algorithms

13.Symbol Tables

13.1. Introduction

13.2. What are Symbol Tables?

13.3. Symbol Table Implementations

13.4. Comparison of Symbol Table Implementations

14.Hashing

14.1. What is Hashing?

14.2. Why Hashing?

14.3. HashTable ADT

14.4. Understanding Hashing

14.5. Components of Hashing

14.6. Hash Table

14.7. Hash Function

14.8. Load Factor

14.9. Collisions

14.10. Collision Resolution Techniques

14.11. Separate Chaining

14.12. Open Addressing

14.13. Comparison of Collision Resolution Techniques

14.14. How Hashing Gets O(1) Complexity?

14.15. Hashing Techniques

14.16. Problems for which Hash Tables are not Suitable

14.17. Bloom Filters

14.18. Problems on Hashing

15.String Algorithms

15.1. Introduction

15.2. String Matching Algorithms

15.3. Brute Force Method

15.4. Rabin-Karp String Matching Algorithm

15.5. String Matching with Finite Automata

15.6. KMP Algorithm

15.7. Boyer-Moore Algorithm

15.8. Data Structures for Storing Strings

15.9. Hash Tables for Strings

15.10. Binary Search Trees for Strings

15.11. Tries

15.12. Ternary Search Trees

15.13. Comparing BSTs, Tries and TSTs

15.14. Suffix Trees

15.15. Problems on Strings

16.Algorithms Design Techniques

16.1. Introduction

16.2. Classification

16.3. Classification by Implementation Method

16.4. Classification by Design Method

16.5. Other Classifications

17.Greedy Algorithms

17.1. Introduction

17.2. Greedy Strategy

17.3. Elements of Greedy Algorithms

17.4. Does Greedy Always Work?

17.5. Advantages and Disadvantages of Greedy Method

17.6. Greedy Applications

17.7. Understanding Greedy Algorithms

17.8. Problems on Greedy Algorithms

18.Divide and Conquer Algorithms

18.1. Introduction

18.2. What is Divide and Conquer Strategy?

18.3. Does Divide and Conquer Always Work?

18.4. Divide and Conquer Visualization

18.5. Understanding Divide and Conquer

18.6. Master Theorem

18.7. Divide and Conquer Applications

18.8 Problems on Divide and Conquer

19.Dynamic Programming

19.1. Introduction

19.2. What is Dynamic Programming Strategy?

19.3. Properties of Dynamic Programming Strategy

19.4. Can Dynamic Programming Solve All problems?

19.5. Dynamic Programming Approaches

19.6. Examples of Dynamic Programming Algorithms

19.7. Understanding Dynamic Programming

19.8. Problems on Dynamic Programming

20.Complexity Classes

20.1. Introduction

20.2. Polynomial/Exponential time

20.3. What is a Decision Problem?

20.4. Decision Procedure

20.5. What is a Complexity Class?

20.6. 6 Types of Complexity Classes

20.7. Reductions

20.8. Problems on Complexity Classes

21.Miscellaneous Concepts

21.1. Introduction

21.2. Hacks on Bitwise Programming

21.3. Other Programming Questions

Data Structures and algorithms in java

Part 1 of 1

Learning DSA through Data Structures and Algorithms Made Easy in Java Book. Sharing my own insights and key takeaways from each topic to simplify concepts and learn together with the tech community.