# Index

## A

- A* search / A* Search
- activity selection problem
- about / The Activity Selection Problem
- solving / Solving the Activity Selection Problem

- adjacency list representation
- about / Adjacency List Representation

- adjacency matrix representation
- about / Adjacency Matrix Representation
- of weighted undirected graph, building / Activity: Building the Adjacency Matrix Representation of a Weighted Undirected Graph

- Aho-Corasick algorithm / Aho–Corasick
- algorithm
- developing / Developing Our First Algorithm
- for converting Binary Numbers, to Decimal / Algorithm for Converting Binary Numbers to Decimal
- for converting Octal Numbers, to Decimal / Activity: Writing an Algorithm to Convert Numbers from Octal To Decimal

- Algorithmic Complexity
- measuring, with Big O Notation / Measuring Algorithmic Complexity with Big O Notation
- example / Complexity Example
- about / Understanding Complexity
- timing table developing, exponential algorithm used / Activity: Developing a Timing Table Using the Exponential Algorithm
- notation / Complexity Notation
- performance, identifying while checking for duplicates in array / Identifying the Best and Worst Performance of an Algorithm While Checking for Duplicates in an Array
- notation, rules / Identifying the Best and Worst Performance of an Algorithm While Checking for Duplicates in an Array
- Expressions, converting to Big O Notations / Activity: Converting Expressions to Big O Notations

- algorithms with complexities, identifying
- about / Identifying Algorithms with Different Complexities
- Linear Complexity / Linear Complexity
- Quadratic Complexity / Quadratic Complexity
- Logarithmic Complexity / Logarithmic Complexity
- Exponential Complexity / Exponential Complexity
- Constant Complexity / Constant Complexity
- Faster Intersection Algorithm, developing / Activity: Developing a Faster Intersection Algorithm

- arrays
- used, for modeling stacks / Modeling Stacks and Queues Using Arrays
- used, for modeling queues / Modeling Stacks and Queues Using Arrays
- safe enqueuing / Safe Enqueuing in an Array

## B

- back edges / Cycle Detection
- bad character rule
- about / The Bad Character Rule
- implementing / Activity: Implementing the Bad Character Rule

- base case / The Divide and Conquer Approach
- BFS
- implementing, in Java / Activity: Implementing BFS in Java
- used, for finding shortest path out of maze / Activity: Using BFS to Find the Shortest Path Out of a Maze

- Big O Notation
- Algorithmic Complexity, measuring / Measuring Algorithmic Complexity with Big O Notation
- expressions, converting to / Activity: Converting Expressions to Big O Notations

- Binary Numbers
- converting, to Decimal / Algorithm for Converting Binary Numbers to Decimal

- binary search tree
- about / Getting Started with Binary Search Trees
- structure / Binary Tree Structure
- operations / Binary Search Tree Operations
- minimum key, searching for / Searching for a Minimum Key in a Binary Tree
- traversing / Traversing a Binary Search Tree
- postorder execution / Traversing a Binary Search Tree
- preorder execution / Traversing a Binary Search Tree
- inorder execution / Traversing a Binary Search Tree
- BFS, implementing in Java / Activity: Implementing BFS in Java
- balanced / Balanced Binary Search Trees
- element successor, retrieving / Activity: Retrieving the Successor of an Element When the Tree is Traversed in Inorder

- binary search tree, balanced
- about / Balanced Binary Search Trees
- right tree rotation, applying / Applying Right Tree Rotation

- Boyer-Moore string searching algorithm
- about / Getting Started with the Boyer-Moore String Searching Algorithm
- bad character rule / The Bad Character Rule
- bad character rule, implementing / Activity: Implementing the Bad Character Rule
- good suffix rule / The Good Suffix Rule
- application / Application of the Boyer-Moore Algorithm
- implementing / Implementing the Boyer-Moore Algorithm

- breadth-first search (BFS) / Breadth-First Search
- bubble sorting
- about / Introducing Bubble Sorting, Understanding Bubble Sorting
- implementing / Implementing Bubble Sort
- performance, improving / Improving Bubble Sorting
- selection sort, implementing in Java / Activity: Implementing Selection Sort in Java

## C

- chained hash table / Dealing with Collisions with Chaining
- coin change problem / Activity: The Coin Change Problem
- collisions
- with chaining, dealing with / Dealing with Collisions with Chaining
- with open addressing, dealing with / Dealing with Collisions with Open Addressing

- Constant Complexity / Constant Complexity
- critical exponent / The Master Method
- cross edges / Cycle Detection

## D

- data structures
- about / Getting Started with Fundamental Data Structures, Introducing Data Structures
- linked lists structures / Linked Lists Structure
- linked list, converting to doubly linked list structure / Converting the Linked List to a Doubly Linked List Structure

- Decimal
- Binary Numbers, converting to / Algorithm for Converting Binary Numbers to Decimal
- Octal Numbers, converting to / Activity: Writing an Algorithm to Convert Numbers from Octal To Decimal

- depth-first search (DFS) / Depth-First Search
- Dijkstras algorithm / Single Source Shortest Path: Dijkstra's Algorithm
- divide and conquer algorithm
- about / Getting Started with Divide and Conquer Algorithms
- approach / The Divide and Conquer Approach
- master method / The Master Method
- points problem, closest pair / The Closest Pair of Points Problem
- maximum subarray problem, solving / Activity: Solving the Maximum Subarray Problem

- dynamic programming problem
- about / Understanding Dynamic Programming
- elements / Elements of a Dynamic Programming Problem
- optimal substructure / Optimal Substructure
- overlapping subproblems / Overlapping Subproblems
- 0-1 Knapsack / 0-1 Knapsack
- 0-1 knapsack problem solving, recursion used / Solving the 0-1 Knapsack Problem Using Recursion
- longest common subsequence / Longest Common Subsequence
- coin change problem / Activity: The Coin Change Problem

## E

- Egyptian fractions
- computing, by implementing greedy algorithm / Activity: Implementing a Greedy Algorithm to Compute Egyptian Fractions

- Exponential Complexity / Exponential Complexity

## F

- Floyd-Warshall algorithm
- about / All Pairs Shortest Paths: Floyd-Warshall Algorithm
- improving, to reconstruct shortest path / Activity: Improving Floyd-Warshall's Algorithm to Reconstruct the Shortest Path

- forward edges / Cycle Detection

## G

- good suffix rule
- about / The Good Suffix Rule

- graphs
- representing / Representing Graphs
- adjacency list representation / Adjacency List Representation
- Java code, writing to add weights to directed graph / Writing a Java Code to Add Weights to the Directed Graph
- adjacency matrix representation / Adjacency Matrix Representation
- adjacency matrix representation of weighted undirected graph, building / Activity: Building the Adjacency Matrix Representation of a Weighted Undirected Graph
- traversing / Traversing a Graph
- breadth-first search (BFS) / Breadth-First Search
- concepts / Other Concepts in Graphs
- minimum spanning trees / Minimum Spanning Trees
- A* search / A* Search
- maximum flow / Maximum Flow

- graphs, traversing
- breadth-first search (BFS) / Breadth-First Search
- depth-first search (DFS) / Depth-First Search
- cycle detection / Cycle Detection
- BFS, using to find shortest path out of maze / Activity: Using BFS to Find the Shortest Path Out of a Maze

- greedy algorithm
- activity selection problem / The Activity Selection Problem
- activity selection problem, solving / Solving the Activity Selection Problem
- Huffman coding / Huffman Coding
- Huffman code, building / Building a Huffman Code
- developing, to generate code words using Huffman code / Developing an Algorithm to Generate Code Words Using Huffman Coding
- implementing, to compute Egyptian Fractions / Activity: Implementing a Greedy Algorithm to Compute Egyptian Fractions

- greedy algorithm, ingredients
- about / Ingredients of a Greedy Algorithm
- optimal substructure property / Optimal Substructure Property
- greedy choice property / Greedy Choice Property

## H

- Hamiltonian path / Understanding Complexity Classes of Problems
- hash functions
- remainder and multiplication hash functions / Remainder and Multiplication Hash Functions
- open addressing, implementing / Activity: Implementing Open Addressing

- hash tables
- about / Introducing Hash Tables, Understanding Hash Tables
- collisions with chaining, dealing with / Dealing with Collisions with Chaining
- collisions with open addressing, dealing with / Dealing with Collisions with Open Addressing
- linear probing search operation, carrying out / Carrying out the Linear Probing Search Operation
- remainder and multiplication hash functions / Remainder and Multiplication Hash Functions
- multiplication method, implementing / Implementing the Multiplication Method for a Hash Table
- universal hashing / Universal Hashing

- Huffman code
- about / Huffman Coding
- building / Building a Huffman Code
- used, for building algorithms to generate code words / Developing an Algorithm to Generate Code Words Using Huffman Coding

## I

## J

- Java
- selection sort, implementing / Activity: Implementing Selection Sort in Java
- merge sort, implementing / Activity: Implementing Merge Sort in Java
- string matching algorithm, developing / Developing the String Matching Algorithm in Java

## K

- 0-1 Knapsack problem
- about / 0-1 Knapsack
- recursion used / Solving the 0-1 Knapsack Problem Using Recursion

- Knuth-Morris-Pratt (KMP) algorithm / Knuth–Morris–Pratt

## L

- Last In First Out (LIFO) / Stacks
- Linear Complexity / Linear Complexity
- linear probing search operation
- carrying out / Carrying out the Linear Probing Search Operation

- linked lists operations
- about / Linked Lists Operations
- traversing / Activity: Traversing the Linked List

- linked lists structure / Linked Lists Structure
- Logarithmic complexity / Logarithmic Complexity
- longest common subsequence (LCS) / Longest Common Subsequence

## M

- maximum flow / Maximum Flow
- merge sort
- about / Using Merge Sort
- problem, dividing / Dividing the Problem
- implementing / Implementing Merge Sort
- problem, merging / Merging the Problem
- implementing, in Java / Activity: Implementing Merge Sort in Java

- minimum key
- searching, in binary tree / Searching for a Minimum Key in a Binary Tree

- minimum spinning trees / Minimum Spanning Trees
- minimum tree
- searching, in binary tree / Searching for a Minimum Key in a Binary Tree

- multiplication method
- about / Remainder and Multiplication Hash Functions
- implementing, for hash table / Implementing the Multiplication Method for a Hash Table

## N

- naive search algorithm
- about / Naive Search Algorithm
- implementing / Implementing Naive Search
- string matching algorithm, developing in Java / Developing the String Matching Algorithm in Java
- rationalization / Rationalization of the Naive Search Algorithm

- NP-Complete (NPC) problems / Understanding Complexity Classes of Problems
- NP problems / Understanding Complexity Classes of Problems

## O

- Octal Numbers
- converting, to Decimal / Activity: Writing an Algorithm to Convert Numbers from Octal To Decimal

- open addressing
- implementing / Activity: Implementing Open Addressing

## P

- Point class code
- reference link / Complexity Example

- Postfix expression
- evaluating / Activity: Evaluating the Postfix Expression

- prime numbers
- in algorithms / Prime Numbers in Algorithms
- sieve of Eratosthenes / Sieve of Eratosthenes
- prime factorization / Prime Factorization
- Sieve of Eratosthenes, implementing / Activity: Implementing the Sieve of Eratosthenes

- probe sequence / Dealing with Collisions with Open Addressing
- problems
- complexity classes / Understanding Complexity Classes of Problems

## Q

- Quadratic complexity / Quadratic Complexity
- queues
- about / Queues
- elements, adding / Adding and Deleting the Elements from the Queue
- elements, deleting / Adding and Deleting the Elements from the Queue
- modeling, arrays used / Modeling Stacks and Queues Using Arrays

- quick sort
- about / Understanding Quick Sort
- recursion / Understanding Recursion
- binary search, implementing recursively / Implementing Binary Search Recursively
- partitioning / Quicksort Partitioning
- partitioning method / Activity: Understanding the Partitioning Method, Putting It All Together
- implementing / Implementing Quick Sort

## R

- Rabin-Karp algorithm
- about / Rabin-Karp
- applying / Applying the Rabin-Karp Algorithm

- recursion / Understanding Recursion
- recursive case / The Divide and Conquer Approach
- remainder method / Remainder and Multiplication Hash Functions

## S

- shortest paths
- calculating / Calculating Shortest Paths
- Dijkstras algorithm, single source shortest path / Single Source Shortest Path: Dijkstra's Algorithm
- Floyd-Warshall algorithm / All Pairs Shortest Paths: Floyd-Warshall Algorithm
- reconstructing, by improving Floyd-Warshalls algorithm / Activity: Improving Floyd-Warshall's Algorithm to Reconstruct the Shortest Path

- Sieve of Eratosthenes
- about / Sieve of Eratosthenes
- implementing / Activity: Implementing the Sieve of Eratosthenes

- stacks
- about / Stacks
- string, reversing / Reversing a String
- modeling, arrays used / Modeling Stacks and Queues Using Arrays
- Postfix expression, evaluating / Activity: Evaluating the Postfix Expression

- string matching algorithm
- about / Introducing Other String Matching Algorithms
- Rabin-Karp / Rabin-Karp
- Knuth-Morris-Pratt (KMP) algorithm / Knuth–Morris–Pratt
- Aho-Corasick algorithm / Aho–Corasick

## T

- tree edges / Cycle Detection

## U

- universal hashing / Universal Hashing