Data Structures and Algorithms Made Easy: Narasimha Karumanchi
Data Structures and Algorithms Made Easy: Narasimha Karumanchi
And
Algorithms
Made Easy
-To All My Readers
By
Narasimha Karumanchi
Concepts
Problems
Interview Questions
Copyright 2016 by .
All rights reserved.
Designed by
Acknowledgements
and , it is impossible to thank you adequately for everything you have done, from loving me
unconditionally to raising me in a stable household, where your persistent efforts and traditional values
taught your children to celebrate and embrace life. I could not have asked for better parents or rolemodels. You showed me that anything is possible with faith, hard work and determination.
This book would not have been possible without the help of many people. I would like to express my
gratitude to all of the people who provided support, talked things over, read, wrote, offered comments,
allowed me to quote their remarks and assisted in the editing, proofreading and design. In particular, I
would like to thank the following individuals:
Preface
Dear Reader,
Please hold on! I know many people typically do not read the Preface of a book. But I strongly recommend
that you read this particular Preface.
It is not the main objective of this book to present you with the theorems and proofs on and
. I have followed a pattern of improving the problem solutions with different complexities (for each
problem, you will find multiple solutions with different, and reduced, complexities). Basically, its an
enumeration of possible solutions. With this approach, even if you get a new question, it will show you a way to
think about the possible solutions. You will find this book useful for interview preparation, competitive exams
preparation, and campus interview preparations.
As a , if you read the complete book, I am sure you will be able to challenge the interviewers. If you
read it as an , it will help you to deliver lectures with an approach that is easy to follow, and as a result
your students will appreciate the fact that they have opted for Computer Science / Information Technology as
their degree.
This book is also useful for and during their academic
preparations. In all the chapters you will see that there is more emphasis on problems and their analysis rather
than on theory. In each chapter, you will first read about the basic required theory, which is then followed by a
section on problem sets. In total, there are approximately 700 algorithmic problems, all with solutions.
If you read the book as a preparing for competitive exams for Computer Science / Information
Technology, the content covers the topics in full detail. While writing this book, my main focus was to
help students who are preparing for these exams.
In all the chapters you will see more emphasis on problems and analysis rather than on theory. In each chapter,
you will first see the basic required theory followed by various problems.
For many problems, solutions are provided with different levels of complexity. We start with the
solution and slowly move toward the possible for that problem. For each problem, we
endeavor to understand how much time the algorithm takes and how much memory the algorithm uses.
It is recommended that the reader does at least one complete reading of this book to gain a full understanding of
all the topics that are covered. Then, in subsequent readings you can skip directly to any chapter to refer to a
specific topic. Even though many readings have been done for the purpose of correcting errors, there could still
be some minor typos in the book. If any are found, they will be updated at . . . You can
monitor this site for any corrections and also for new problems and solutions. Also, please provide your valuable
suggestions at: @. .
I wish you all the best and I am confident that you will find this book useful.
M-Tech,
Founder, .
Table of Contents
1. Introduction------------------------------------------------------------------------------------ 13
1.1 Variables --------------------------------------------------------------------------------------------------- 13
1.2 Data Types ------------------------------------------------------------------------------------------------- 13
1.3 Data Structures ------------------------------------------------------------------------------------------- 14
1.4 Abstract Data Types (ADTs) ----------------------------------------------------------------------------- 14
1.5 What is an Algorithm? ----------------------------------------------------------------------------------- 14
1.6 Why the Analysis of Algorithms? ----------------------------------------------------------------------- 15
1.7 Goal of the Analysis of Algorithms --------------------------------------------------------------------- 15
1.8 What is Running Time Analysis? ----------------------------------------------------------------------- 15
1.9 How to Compare Algorithms ---------------------------------------------------------------------------- 15
1.10 What is Rate of Growth? ------------------------------------------------------------------------------- 15
1.11 Commonly Used Rates of Growth --------------------------------------------------------------------- 16
1.12 Types of Analysis ---------------------------------------------------------------------------------------- 17
1.13 Asymptotic Notation ------------------------------------------------------------------------------------ 17
1.14 Big-O Notation ------------------------------------------------------------------------------------------- 17
1.15 Omega- Notation --------------------------------------------------------------------------------------- 19
1.16 Theta- Notation ---------------------------------------------------------------------------------------- 19
1.17 Why is it called Asymptotic Analysis? ---------------------------------------------------------------- 20
1.18 Guidelines for Asymptotic Analysis ------------------------------------------------------------------- 20
1.19 Properties of Notations --------------------------------------------------------------------------------- 22
1.20 Commonly used Logarithms and Summations ----------------------------------------------------- 22
1.21 Master Theorem for Divide and Conquer ------------------------------------------------------------ 22
1.22 Divide and Conquer Master Theorem: Problems & Solutions ------------------------------------ 23
1.23 Master Theorem for Subtract and Conquer Recurrences ----------------------------------------- 23
1.24 Variant of Subtraction and Conquer Master Theorem--------------------------------------------- 24
1.25 Method of Guessing and Confirming ----------------------------------------------------------------- 24
1.26 Amortized Analysis -------------------------------------------------------------------------------------- 25
1.27 Algorithms Analysis: Problems & Solutions --------------------------------------------------------- 26
4. Stacks ------------------------------------------------------------------------------------------ 86
4.1 What is a Stack? ------------------------------------------------------------------------------------------ 86
4.2 How Stacks are used ------------------------------------------------------------------------------------- 86
4.3 Stack ADT -------------------------------------------------------------------------------------------------- 87
4.4 Applications ------------------------------------------------------------------------------------------------ 87
4.5 Implementation-------------------------------------------------------------------------------------------- 87
4.6 Comparison of Implementations ------------------------------------------------------------------------ 92
4.7 Stacks: Problems & Solutions --------------------------------------------------------------------------- 92