Foundations of Computer Science


The course aims at providing a complete introduction to the fundamental concepts and methods of Computer Science, across the entire spectrum from theory to applications. It comprises the following parts: Theory: computability and complexity, algorithmic performance, computation models: automata, Turing machines, Random Access Machines (RAM), formal languages and grammars, computer science logic. Algorithms: techniques and strategies, numerical computations, graph and network algorithms, text processing, encodings, hashing. System software and computing systems: Von Neumann, Harvard, Dataflow architectures, programming in assembly language, system software (operating systems, compilers), parallel/distributed systems, embedded systems. Applications: databases, cryptography, digital coins, computational biology, social networks.