UNDERGRADUATE COURSES CS 105 Introduction to Scientific Computing (2-2-3) This is a first course in computer programming for students with no prior experience. Students will learn the core process of programming: given a problem statement, how does one design an algorithm to solve that particular problem and then implement the algorithm in a computer program? The course will also introduce elementary programming concepts like basic control concepts (such as conditional statements and loops) and a few essential data types (e.g., integers and doubles). Exposure to programming will be through a self-contained user-friendly programming environment, widely used by the scientific and engineering communities, such as Matlab. The course will cover problems from all fields of science, engineering and business. CS 115 Introduction to Computer Science (3-2-4) An introduction to the basic concepts of computer systems and programming for students with prior exposure to imperative programming. The course focuses on algorithmic thinking and problem solving. An intensive lab augments the classroom exercises with hands-on programming projects. Topics covered include: the concept of an algorithm; typing and type checking; how elementary data types are represented inside a computer; how a program executes (fetch-execute cycle, activation records, pointers); recursion and induction; elementary data structures (string, array, stack, list); introduction to sorting and searching; time and space complexity; concepts of object-oriented programming: object, reference, method, class and inheritance; software design concepts: modularity, encapsulation, interface; and formal reasoning about programs. There will be regular programming assignments to be done in Java. Prerequisite: substantial high school exposure to C++, Java, or some other major imperative programming language. CS 181 Introduction to Computer Science Honors I (3-2-4) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, switch/case. Loop operations, while, do/while and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, priority trees with applications. Trees, simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284. CS 182 Introduction to Computer Science Honors II (4-0-4) An overview of the C++ language. Algorithm design and computational complexity. Abstract data types. Review of fundamental data structures: vectors, lists, stacks and queues. Trees and binary trees. Heaps and priority queues with applications. Dictionaries with applications. Implementation of dictionaries using binary search trees, AVL trees and red-black trees. Sorting algorithms. Graphs and networks with applications. Graph implementations, depth-first and breadth-first searching with applications. Other graph algorithms. Students who complete this class are exempt from CS 385. Prerequisite: CS 181 and permission of the instructor. CS 284 Data Structures and Algorithms (3-0-3) This course is a continuation of CS 115, focusing on data structures and algorithms, including their design, analysis and implementation. Students will learn elementary and intermediate data structures like priority queues, heaps, and binary trees. The course provides a more in-depth, rigorous coverage of basic design principles like recursion. The course will also cover asymptotic run-time analysis and present, in that context, more advanced sorting and searching algorithms. Emphasis will be placed on implementation in Java. Prerequisite: CS 115 or CS 181. Corequisite: Ma 134. CS 335 Computational Structures (3-0-3) This course uses functional programming to study discrete mathematics, building on Ma 134. It begins with an introduction to a small subset of a functional language used in the course to explore examples and implement some basic algorithms. Operations on relations are explored by the use of lists to represent finite sets, functions and relations, as well as operations of composition, transitive closure, direct image, etc. Some algebraic structures, such as monoids and semirings, are introduced; lists and relations are used as primary examples of monoids; and trees are introduced as inductive data types. Other topics: structural recursion and induction; abstract syntax as data type; interpreters for simple languages (monoid expressions; Boolean expressions; integer expressions; relational expressions) without variable binding; inductively defined relations; transition rules for configurations of simple machine; partial orders and lattices; simple abstract interpretations of expressions; equational logic. Prerequisite: Ma 134. CS 381 Switching Theory and Logical Design (3-0-3) Digital systems; number systems and codes; Boolean algebra; application of Boolean algebra to switching circuits; minimization of Boolean functions using algebraic, Karnaugh map and tabular methods; design of combinational circuits; programmable logic devices; sequential circuit components; design and analysis of synchronous and asynchronous sequential circuits. Cross-listed with CpE 358. Prerequisite: CS 115 or CS 181. CS 383 Computer Organization and Programming (3-0-3) Basic structure of the stored program computer, addressing methods and program sequencing, instruction sets and their implementation, the CPU and microprogrammed control, input/output organization, peripherals and interfacing and main memory. Detailed study of a small machine. Assignments are devoted to assembly language programming. Prerequisite: CS 181 or CS 284. CS 385 Advanced Data Structures and Object Oriented Design (3-0-3) This course will cover advanced data structures like sets, balanced trees and graphs, and their associated algorithms, while also focusing on essential principles of object oriented programming like classes, inheritance and polymorphism. Students will learn how to design classes for implementing advanced data structures and their operations. Students will also learn how tools of objected-oriented design provide for safe code reuse when implementing new data structures. The course will provide a more in-depth, rigorous presentation of asymptotic run-time analysis. Emphasis will be placed on implementation in C++. Prerequisite: CS 284. CS 392 Systems Programming (3-0-3) Introduction to systems programming in C++ on UNIX. Students will be introduced to GNU tools for compilation, dynamic linking, debugging, editing, automatic rebuilding, version control, and parser creation. Some aspects of the UNIX system call interface will be studied, drawn from this list: process creation, signals, terminal I/O, file I/O, inter-process communication, and threads. Style issues to be covered include: naming, layout, commenting, portability, design for robustness and debugability and language pitfalls. X programming and GUI design will be covered if time allows. Programming assignments will be given weekly. Prerequisites: CS 383 and either CS 385 or CS 182. CS 393 Web Programming (3-0-3) Introduction to Internet programming. Covers how the Internet works, the basics of HTML, and how to create advanced web sites using PHP, MySQL, and JavaScript. The course also places importance on presentations and team work. Prerequisite: CS 385 or CS 182. CS 434 Theory of Computation (3-0-3) Introduction to the mathematical theory of computation. A number of models of computation are considered, as well as their relation to various problem classes (e.g. solvable problems, polynomial time solvable problems). Topics relevant to computer science such as the theory of formal languages and low complexity classes are particularly emphasized. Prerequisite: CS 335 and Ma 134. CS 437 Interactive Computer Graphics (3-0-3) A comprehensive introduction to the field of Computer Graphics. Students study the conceptual framework for interactive computer graphics: transformations, viewing, shading, clipping, rasterization, curves and surfaces, selected topics. OpenGL is used as an application-programming interface. Prerequisite: CS 385 or CS 182. CS 442 Database Management Systems (3-1-4) Introduction to the design of relational databases and the use of standard relational query languages. Topics include: relational schemas; keys and foreign key references; relational algebra (as an introduction to SQL); SQL; Entity-Relationship (ER) database design; translating from ER models to relational schemas and from relational schemas to ER models; functional dependencies; normalization. Prerequisite: CS 385 or CS 182. CS 482 Artificial Intelligence (3-0-3) An introduction to the large and diverse field of artificial intelligence. Topics include: problem solving by search and constraint satisfaction; alpha-beta search for two-player games; logic and knowledge representation, planning, learning, decision theory, statistical learning, computer vision. Prerequisite: CS 385 or 182. CS 487 Digital System Design (3-0-3) Digital design concepts, building blocks for digital systems and digital system organization. Design of combinational logic circuits and arithmetic functions. Approaches to sequential circuit design, separation of data and control, the algorithmic state machine. System controller design: System controllers using MSI/LSI circuits. Clocks and timing. Asynchronous systems design. Metastability and reliability. Cross-listed with CpE 487. Prerequisite: CS 381. CS 488 Computer Architecture (3-0-3) An introduction to the functional level structure of modern pipelined processors and the empirical and analytic evaluation of their performance. Topics include: empirical and analytic techniques for measuring performance (use of various means, Amdahl's Law, benchmarks); tradeoff analysis; principles of instruction set design and evaluation (memory addressing, operations, types and sizes of operands, instruction set encoding, CISC vs. RISC and related compilation issues); pipelining (basics, data hazards, control hazards); memory systems. Prerequisite: CS 383. Corequisite: Ma 222. CS 492 Operating Systems (3-0-3) The use and internals of modern operating systems. Lectures focus on internals whereas programming assignments focus on use of the operating system interface. Major topics include: the process concept; concurrency and how to program with threads; memory management techniques including virtual memory and shared libraries; file system data structures; and I/O. Prerequisites: CS 383 and either CS 385 or CS 182. CS 494 Compiler Design (3-0-3) Design and implementation of compilers, principles of languages translation. Each student implements a complete compiler for a small but substantial language. The stages of a compiler. Boot-strapping a compiler. Lexical analysis, regular expressions, finite state machines. Syntactic analysis, context free grammars, parsers. Semantic analysis, type checking, symbol tables. Syntax-directed translation. Data flow analysis, peephole optimization. Code generation. Prerequisite: CS 385 or CS 182. CS 496 Programming Languages (3-0-3) An introduction to programming language design and implementation, with an emphasis on the abstractions provided by programming languages. Assignments include implementing one or more interpreters for simple procedural languages, in a functional language such as Scheme or ML. Recursive types and recursive functions; structural induction. Abstract data types. Abstract syntax. Implementing languages with interpreters. Static vs. dynamic scoping, closures, state. Exceptions. Types: type-checking, type inference, static vs. dynamic typing. Object-oriented languages: classes and interfaces, inheritance and subtyping. Polymorphism and genericity. Prerequisites: CS 335, CS 434, and either CS 385 or CS 182. CS 498 Senior Research I (0-8-3) Individual research project under the guidance of a faculty member of the department, whose prior approval is required. Either a written report in acceptable journal format or the completion of a senior thesis, as well as an oral presentation, is required at the end of the project. Senior students only. CS 498 and CS 499 cannot be taken simultaneously. CS 499 Senior Research II (0-8-3) Individual research project under the guidance of a faculty member of the department, whose prior approval is required. Either a written report in acceptable journal format or the completion of a senior thesis, as well as an oral presentation, is required at the end of the project. Senior students only. CS 498 and CS 499 cannot be taken simultaneously.