Introduction
Learn the origin of the word algorithm, its definition, characteristics and design strategies.
The word algorithm comes from the name of a Persian, Abu Ja'far Muhammad ibn Musa al-Khwarizmi, dubbed the father of algebra (al-jabr). An algorithm is a series of step-by-step instructions that aim to solve a particular problem.
Learn the origin of the word algorithm, its definition, characteristics and design strategies.
Understand what an algorithm is and how step-by-step instructions solve a problem.
Learn instruction space, data space and how the space requirement of an algorithm is calculated.
Learn how the running time of an algorithm is estimated.
Learn the upper bound (worst case) notation used to describe growth of an algorithm.
Learn the lower bound (best case) notation.
Learn the tight bound notation that bounds a function from above and below.
Learn the divide-and-conquer strategy of splitting a problem into smaller subproblems.
Search for an element efficiently in a sorted array by repeatedly dividing the search interval into two halves.
Learn how Quick Sort uses a pivot element to partition an array and recursively sort smaller subarrays.
Learn how Merge Sort divides an array into smaller subarrays, sorts them recursively, and merges them into a sorted array.
Learn how Strassen’s algorithm multiplies two matrices efficiently by reducing the number of recursive multiplications.
Understand the basic operations performed on disjoint sets, including creating sets, finding representatives, and combining sets.
Learn how the Union and Find algorithms identify set representatives and merge two disjoint sets efficiently.
Understand how a priority queue stores elements based on priority and supports efficient insertion and deletion operations.
Learn the structure of binary heaps, including min-heaps, max-heaps, heap properties, insertion, and deletion operations.
Learn how the Heapsort algorithm uses a binary heap to sort elements efficiently in ascending or descending order.
Learn the general backtracking approach using state-space trees, promising functions, and systematic solution exploration.
Learn how to place N queens on an N × N chessboard so that no two queens attack each other using backtracking.
Learn how to find subsets of a given set whose elements add up to a specified target sum using backtracking.
Understand how to assign colors to the vertices of a graph so that no two adjacent vertices have the same color.
Learn how to find a cycle in a graph that visits every vertex exactly once and returns to the starting vertex using backtracking.
Understand the general approach of dynamic programming using optimal substructure, overlapping subproblems, recurrence relations, and tabulation.
Learn how to construct a binary search tree with minimum expected search cost using the probabilities of successful and unsuccessful searches.
Learn how to select items with given weights and profits to maximize total profit without exceeding the knapsack capacity using dynamic programming.
Learn how to find the shortest paths between every pair of vertices in a weighted graph using the Floyd-Warshall algorithm.
Learn how to find the minimum-cost tour that visits every city exactly once and returns to the starting city using dynamic programming.
Understand how dynamic programming helps design highly reliable systems by selecting components and configurations to maximize overall system reliability within a given budget.
Understand the general approach of greedy algorithms, including candidate selection, feasibility checking, objective functions, and solution construction.
Learn how to schedule jobs with deadlines and profits to maximize the total profit by selecting and arranging jobs efficiently.
Learn how to maximize the total profit by selecting items with given weights and values without exceeding the knapsack capacity using the greedy approach.
Learn how to construct a spanning tree with minimum total edge weight using Prim’s and Kruskal’s algorithms.
Learn how to find the shortest paths from a single source vertex to all other vertices in a weighted graph using Dijkstra’s algorithm.
Learn binary tree traversal techniques including preorder, inorder, postorder, and level order traversal with suitable examples.
Understand graph traversal techniques including Breadth First Search (BFS) and Depth First Search (DFS) to explore vertices and edges.
Learn how to identify maximal connected subgraphs in an undirected graph using graph traversal techniques.
Understand biconnected components in an undirected graph and identify subgraphs that remain connected even after removing any single vertex.