Computer system instruction set design and implementation, including memory hierarchies, microprogramming, pipelining and multiprocessors. Issues and tradeoffs involved in the design of computer system architectures with respect to the design of instruction sets. Grammars, automata, Turing machines, decidability and complexity, language hierarchies, normal forms, NP-completeness, and reducibilities. Applications will be drawn from various areas of computer science. A formal study of the software development process.
Students work in small teams on significant projects.
Design techniques such as amortized analysis, dynamic programming, and greedy algorithms. Computational geometry, graph algorithms, primality and other number-theoretic algorithms, specialized data structure techniques such as augmenting data structures, combinatorial graph reduction and functional repetition. NP completeness and approximation algorithms. OSI layers, fault tolerance, sockets, streams, parallel processes, spooling, remote execution and client-server models. Advanced topics in programming-language theory, design, and implementation.