Courses Taught
Dr. Iqbal has been teaching a variety of undergraduate and graduate courses at NUST-SEECS, focusing on both theoretical foundations and practical applications in computer science.
Design and Analysis of Algorithms
Study of algorithm design techniques including divide-and-conquer, dynamic programming, greedy algorithms, and graph algorithms. Students learn to analyze time and space complexity, and develop problem-solving skills essential for software engineering and research.
Compiler Construction
Introduction to compiler design and implementation covering lexical analysis, parsing, syntax-directed translation, semantic analysis, and code generation. Students build a working compiler as a semester project.
Theory of Automata & Formal Languages
Mathematical foundations of computation including finite automata, regular expressions, context-free grammars, Turing machines, and the theory of NP-completeness. Essential background for theoretical computer science and algorithm design.
Mathematical Methods for Computing
Mathematical tools and techniques used in computer science including linear algebra, probability theory, statistics, and numerical methods. Bridges the gap between pure mathematics and its applications in computing.
Graph Theory and Algorithms
In-depth study of graph theory concepts and their algorithmic applications. Topics include graph traversal, shortest paths, network flow, matching, coloring problems, and approximation algorithms for NP-hard problems.
Discrete Mathematics
Fundamental mathematical structures including sets, relations, functions, logic, proof techniques, combinatorics, and discrete probability. Provides the mathematical foundation essential for all computer science study.
Fuzzy Controllers
Graduate-level course on fuzzy logic and fuzzy control systems. Students learn fuzzy set theory, fuzzy reasoning, and design of fuzzy controllers with applications in robotics, automotive systems, and industrial automation.
Formal Methods for Software Engineering
Application of mathematical methods to software design and development. Topics include specification languages, model checking, program verification, and formal testing techniques for producing reliable software systems.