The Kiron Computer Science curriculum offers an in-depth introduction to the mathematical and engineering basics of the discipline and equips students with the tools and knowledge necessary for a successful research, industrial and entrepreneurial career in computing. A series of core courses gives students a thorough foundation in mathematical tools, programming principles, algorithms and complexity, and computing systems. It also provides considerable flexibility in selecting courses on topics such as cryptography, artificial intelligence, statistics and web programming. Students who complete a Computer Science study track will have in-depth knowledge and understanding of the research frontiers in at least one subfield of computing in information systems, and across science and engineering.
“Algorithms and Data Structures” is a typical module in the Computer Science track.
Name: Algorithms and Data Structures
Workload: 9 CP
This module provides an introduction to analyzing and developing efficient algorithms as well as the interaction between algorithms and data structures. The topics covered in this module include: Runtime analysis: different types of runtime approximations (best-case, worst-case, expected runtime), asymptotic analysis of upper and expected complexity bounds, big O notation (definition and computation), important complexity classes (constant, logarithmic, linear, quadratic and exponential), methods for empirical performance evaluation, time and space trade-off Data structures: singly and doubly linked lists, stacks, queues, trees, graphs Algorithms: sorting methods (e.g. Quicksort, Mergesort or Heapsort), graph algorithms (e.g. Dijkstra’s and Floyd’s algorithms, Prim’s and Kruskal’s algorithm), principles of hashing (simple hashing functions, basic collision strategies, dynamic hashing methods, e.g. linear hashing). Algorithmic strategies: exhaustive search, greedy algorithms, divide-and-conquer, recursive backtracking, branch-and-bound
After successfully completing this module, students will:
- be able to evaluate the runtime and memory requirements for a given algorithm,
- be able to describe important complexity classes for the analysis of runtime and memory complexity,
- be capable of formally modeling and describing algorithmic problem settings,
- be able to adapt the introduced data structures and algorithms to modified problem settings,
- be capable of developing efficient algorithms and data structures using algorithmic strategies,
- be able to explain and apply different sorting algorithms,
- be capable of developing and implementing programs based on the introduced algorithmic techniques,
- be able to evaluate different approaches to solving a given problem based on formal analysis.
Algorithms Specialization, Stanford University
Foundations of Data Structures, IIT Bombay
Implementation of Data Structures, IIT Bombay
Algorithms, IIT Bombay