Design & Analysis of Algorithms (BTCS 403-18) - Theory

Course Objectives

The main objective of this course is to introduce students to the fundamental principles and techniques of algorithm design and analysis. The course will cover the following concepts:

Course Outcomes

Upon completion of this course, students will be able to:

  1. Analyze the time and space complexity of algorithms.
  2. Apply different algorithm design paradigms to solve problems efficiently.
  3. Understand and implement common algorithms for sorting, searching, and graph problems.
  4. Identify NP-complete problems and apply approximation algorithms when necessary.
  5. Design and analyze their own algorithms for specific problems.

Detailed Syllabus

Module 1: Introduction

Module 2: Divide and Conquer

Module 3: Greedy Method

Module 4: Dynamic Programming

Module 5: Backtracking

Module 6: Branch and Bound

Module 7: NP-Hard and NP-Complete problems

Module 8: Approximation Algorithms

Text Books

Reference Books


Design & Analysis of Algorithms Lab (BTCS 405-18)

List of Experiments

  1. Implement and analyze the time complexities of the following sorting algorithms:
    • Bubble Sort
    • Selection Sort
    • Insertion Sort
    • Merge Sort
    • Quick Sort
    • Heap Sort
  2. Implement and analyze the time complexities of the following searching algorithms:
    • Linear Search
    • Binary Search
  3. Implement Divide and Conquer technique for:
    • Finding the maximum and minimum element from an unsorted array.
    • Matrix Multiplication
  4. Implement Greedy technique for:
    • Job Sequencing with Deadlines
    • Fractional Knapsack problem
  5. Implement Dynamic programming for:
    • 0/1 Knapsack problem
    • Finding Longest Common Subsequence
  6. Implement Backtracking for:
    • N-Queens problem
  7. Implement Graph Traversals:
    • Breadth First Search (BFS)
    • Depth First Search (DFS)
  8. Implement:
    • Prim's Algorithm
    • Kruskal’s Algorithm
  9. Implement Dijkstra’s Algorithm for finding shortest path.

Course Outcomes

Upon completion of this lab, students will be able to:

  1. Implement various algorithms in a programming language like C/C++/Java.
  2. Analyze the time and space complexity of implemented algorithms.
  3. Compare the performance of different algorithms for the same problem.
  4. Choose appropriate algorithms for specific problem scenarios.