Formal Methods and Computer Algorithms
The course is divided into two parts. The first part handles proofs and proof techniques. It revises the concepts of sets, cardinality, relations, functions, integers, rational numbers and real numbers. It also introduces some algebraic structures such as rings and fields and other structures such as trees and graphs. It also covers Automata and languages, and handles computability and complexity theories. The second part of the course presents the art of designing and analyzing computer algorithm to solve versatile problems. The course will handle graph and tree algorithms, greedy algorithms, divide-and-conquer technique, dynamic programming methodology, NP and Computational Intractability, approximation algorithms, and random algorithms.