# Data Structures and Algorithms Made Easy

Data Structures and Algorithms Made Easy 5th Edition Data Structures and Algorithms Puzzles by Narasimha Karumanchi.

## Contents of Data Structures and Algorithms

Introduction

1. Variables
2. Data Types
3. Data Structures
5. What is an Algorithm?
6. Why the Analysis of Algorithms?
7. The goal of the Analysis of Algorithms
8. What is Running Time Analysis?
9. How to Compare Algorithms
10. What is the Rate of Growth?
11. Commonly Used Rates of Growth
12. Types of Analysis
13. Asymptotic Notation
14. Big-O Notation [Upper Bounding Function]
15. Omega-Q Notation [Lower Bounding Function]
16. Theta-Θ Notation [Order Function]
17. Important Notes
18. Why is it called Asymptotic Analysis?
19. Guidelines for Asymptotic Analysis
20. Simplyfying properties of asymptotic notations
21. Commonly used Logarithms and Summations
22. Master Theorem for Divide and Conquer Recurrences
23. Divide and Conquer Master Theorem: Problems & Solutions
24. Master Theorem for Subtract and Conquer Recurrences
25. Variant of Subtraction and Conquer Master Theorem
26. Method of Guessing and Confirming
27. Amortized Analysis
28. Algorithms Analysis: Problems & Solutions

Recursion and Backtracking

1. Introduction
2. What is Recursion?
3. Why Recursion?
4. Format of a Recursive Function
5. Recursion and Memory (Visualization)
6. Recursion versus Iteration
7. Notes on Recursion
8. Example Algorithms of Recursion
9. Recursion: Problems & Solutions
10. What is Backtracking?
11. Example Algorithms of Backtracking
12. Backtracking: Problems & Solutions

1. What is a Linked List?
4. Arrays Overview
5. Comparison of Linked Lists with Arrays & Dynamic Arrays
9. A Memory-efficient Doubly Linked List
11. Skip Lists
12. Linked Lists: Problems & Solutions

Stacks

1. What is a Stack?
2. How Stacks are used
4. Applications
5. Implementation
6. Comparison of Implementations
7. Stacks: Problems & Solutions

Queues

1. What is a Queue?
2. How are Queues Used?
4. Exceptions
5. Applications
6. Implementation
7. Queues: Problems & Solutions

Trees

1. What is a Tree?
2. Glossary
3. Binary Trees
4. Types of Binary Trees
5. Properties of Binary Trees
6. Binary Tree Traversals
7. Generic Trees (N-ary Trees)
8. Threaded Binary Tree Traversals (Stack or Queue-less Traversals)
9. Expression Trees
10. XOR Trees
11. Binary Search Trees (BSTs)
12. Balanced Binary Search Trees
14. Other Variations on Trees

Priority Queues and Heaps

1. What is a Priority Queue?
3. Priority Queue Applications
4. Priority Queue Implementations
5. Heaps and Binary Heaps
6. Binary Heaps
7. Heapsort
8. Priority Queues [Heaps]: Problems & Solutions

1. Introduction
2. Equivalence Relations and Equivalence Classes
4. Applications
6. Fast UNION Implementation (Slow FIND)
7. Fast UNION Implementations (Quick FIND)
8. Summary
9. Disjoint Sets: Problems & Solutions

Graph Algorithms

1. Introduction
2. Glossary
3. Applications of Graphs
4. Graph Representation
5. 9.5 Graph Traversals
6. Topological Sort
7. Shortest Path Algorithms
8. Minimal Spanning Tree
9. Graph Algorithms: Problems & Solutions

Sorting

1. What is Sorting?
2. Why is Sorting Necessary?
3. Classification of Sorting Algorithms
4. Other Classifications
5. Bubble Sort
6. Selection Sort
7. Insertion Sort
8. Shell Sort
9. Merge Sort
10. Heap Sort
11. Quick Sort
12. Tree Sort
13. Comparison of Sorting Algorithms
14. Linear Sorting Algorithms
15. Counting Sort
16. Bucket Sort (or Bin Sort)
18. Topological Sort
19. External Sorting
20. Sorting: Problems & Solutions

Searching

1. What is Searching?
2. Why do we need Searching?
3. Types of Searching
4. Unordered Linear Search
5. Sorted/Ordered Linear Search
6. Binary Search
7. Interpolation Search
8. Comparing Basic Searching Algorithms
9. Symbol Tables and Hashing
10. String Searching Algorithms
11. Searching: Problems & Solutions

Selection Algorithms [Medians]

1. What is Selection Algorithms?
2. Selection by Sorting
3. Partition-based Selection Algorithm
4. Linear Selection Algorithm – Median of Medians Algorithm
5. Finding the K Smallest Elements in Sorted Order
6. Selection Algorithms: Problems & Solutions

Symbol Tables

1. Introduction
2. What are Symbol Tables?
3. Symbol Table Implementations
4. Comparison Table of Symbols for Implementations
5. Hashing
6. What is Hashing?
7. Why Hashing?
9. Understanding Hashing
10. Components of Hashing
11. Hash Table
12. Hash Function
14. Collisions
15. Collision Resolution Techniques
16. Separate Chaining
18. Comparison of Collision Resolution Techniques
19. 1How Hashing Gets O(1) Complexity?
20. Hashing Techniques
21. Problems for which Hash Tables are not suitable
22. Bloom Filters
23. Hashing: Problems & Solutions

String Algorithms

1. Introduction
2. String Matching Algorithms
3. Brute Force Method
4. Rabin-Karp String Matching Algorithm
5. String Matching with Finite Automata
6. KMP Algorithm
7. Boyer-Moore Algorithm
8. Data Structures for Storing Strings
9. Hash Tables for Strings
10. Binary Search Trees for Strings
11. Tries
12. Ternary Search Trees
13. Comparing BSTs, Tries and TSTs
14. Suffix Trees
15. String Algorithms: Problems & Solutions
16. Algorithms Design Techniques
17. Introduction
18. Classification
19. Classification by Implementation Method
20. Classification by Design Method
21. Other Classifications

Greedy Algorithms

1. Introduction
2. Greedy Strategy
3. Elements of Greedy Algorithms
4. Does Greedy Always Work?
6. Greedy Applications
7. Understanding Greedy Technique
8. Greedy Algorithms: Problems & Solutions

Divide and Conquer Algorithms

1. Introduction
2. What is the Divide and Conquer Strategy?
3. Does Divide and Conquer Always Work?
4. Divide and Conquer Visualization
5. Understanding Divide and Conquer
6. Advantages of Divide and Conquer
7. Disadvantages of Divide and Conquer
8. Master Theorem
9. Divide and Conquer Applications
10. Divide and Conquer: Problems & Solutions

Dynamic Programming

1. Introduction
2. What is Dynamic Programming Strategy?
3. Properties of Dynamic Programming Strategy
4. Can Dynamic Programming Solve All Problems?
5. Dynamic Programming Approaches
6. Examples of Dynamic Programming Algorithms
7. Understanding Dynamic Programming
8. Longest Common Subsequence
9. Dynamic Programming: Problems & Solutions

Complexity Classes

1. Introduction
2. Polynomial/Exponential Time
3. What is a Decision Problem?
4. Decision Procedure
5. What is a Complexity Class?
6. Types of Complexity Classes
7. Reductions
8. Complexity Classes: Problems & Solutions

Miscellaneous Concepts

1. Introduction
2. Hacks on Bit-wise Programming
3. Other Programming Questions