
College Directory | University Directory | Maps | Contact Us
© 2012 The University of Chicago,
5801 South Ellis Ave. Chicago, IL 60637
773.702.1234
© 2012 The University of Chicago,
5801 South Ellis Ave. Chicago, IL 60637
773.702.1234
Catalog Home › The College › Programs of Study › Computer Science
Contacts | Program of Study | Program Requirements | Summary of Requirements | Grading | Honors | Recommended Sequences in Computer Science | Minor Program in Computer Science | Graduate Courses | Courses
Department Counselor Sharon Salveter
Ry 150
834.2773
Email
Student Services Representative Margaret Jaffey
Ry 156
702.6011
Email
The computer science program prepares students for either graduate work or employment in computer science by offering both the BA and BS degrees. Students receiving the BA will have sufficient breadth and depth for either graduate study or immediate employment in computer science. Recipients of the BS will also have substantial depth and breadth in a field outside of computer science through the completion of an approved related area.
Students in other fields of study may complete a minor in Computer Science. Information follows the description of the major.
Both the BA and BS in Computer Science require fulfillment of the mathematical sciences requirement in general education by completing an approved two-quarter calculus sequence. The physical sciences requirement in general education must be satisfied by completing an approved two-quarter sequence in either chemistry or physics. Both BA and BS students take at least fourteen computer science courses chosen from an approved program. BS students also take three courses in an approved related field outside computer science.
Students pursuing a bachelor's degree in computer science should note that by judicious choice of courses from another field a supplementary field can be developed that is often in itself a solid basis for graduate or professional work in that field. Some examples are biology, biophysics, chemistry, geophysical sciences, history, linguistics, mathematics, philosophy, political science, psychology, physics, sociology, statistics, and economics.
Students who are majoring in computer science may not use AP credit for computer science to meet requirements in the major. Students with AP scores of 4 or 5 on Computer Science A from May 2010 forward or Computer Science AB prior to that receive two quarters of elective credit. NOTE: Students must forgo AP elective credit if they register for one of the following:
CMSC 10500 | Fundamentals of Computer Programming I | 100 |
CMSC 10600 | Fundamentals of Computer Programming II | 100 |
CMSC 15100 | Introduction to Computer Science I | 100 |
CMSC 15200 | Introduction to Computer Science II | 100 |
Students who enroll in CMSC 12100 Computer Science with Applications I, CMSC 12200 Computer Science with Applications II, CMSC 16100 Honors Introduction to Computer Science I, and CMSC 16200 Honors Introduction to Computer Science II may retain AP elective credit.
Computer science majors may use AP credit for chemistry or physics to meet their physical sciences requirement in general education or physical science components of the major. However, no credit designated simply as "physical science" (from either AP or the College's physical sciences examinations) may be used to meet general education or requirements in the computer science majors.
The notion of "approval" in the program requirements allows timely response to change in the course offerings of the various departments. The computer science department counselor is responsible for approval of specific courses and sequences. Students should consult the department counselor for details on specific courses they are considering taking to meet the requirements.
For the authoritative version of the Department of Computer Science requirements and course descriptions, visit cs.uchicago.edu .
There is a single approved program comprising required courses in four topical areas, plus three elective computer science courses. This is a general program in computer science and is used for either the BA or the BS degree. Upper-level or graduate courses in similar topics may be substituted for those on the list that follows, with the approval of the department counselor. Students considering a computer science major are strongly advised to register for an introductory sequence in their first year.
1. Introductory Sequence (four courses required):
CMSC 15100 | Introduction to Computer Science I | 100 |
or CMSC 16100 | Honors Introduction to Computer Science I | |
CMSC 15200 | Introduction to Computer Science II | 100 |
or CMSC 16200 | Honors Introduction to Computer Science II | |
CMSC 15300 | Foundations of Software * | 100 |
CMSC 15400 | Introduction to Computer Systems | 100 |
* | Students who have credit for MATH 13300 or higher should see the Department Counselor for prior approval to substitute CMSC 28000 or 27700, or another approved course. |
Students may only receive credit for one introductory programming sequence: CMSC 10500-10600 Fundamentals of Computer Programming I-II, CMSC 12100-12200 Computer Science with Applications I-II, CMSC 15100-15200 Introduction to Computer Science I-II, or CMSC 16100-16200 Honors Introduction to Computer Science I-II. Exceptions must be approved by the department counselor prior to taking the second sequence.
2. Programming Languages and Systems Sequence (two courses required):
Two of the following: | ||
Programming Languages | ||
Computer Architecture | ||
Functional Programming | ||
Implementation of Computer Languages I | ||
Operating Systems | ||
Networks and Distributed Systems | ||
Mobile Computing | ||
Introduction to Database Systems | ||
Introduction to Computer Graphics | ||
Game Construction |
3. Algorithms and Theory Sequence (three courses required):
Three of the following: | ||
Discrete Mathematics | ||
Theory of Algorithms | ||
Introduction to Formal Languages | ||
or CMSC 28100 | Introduction to Complexity Theory |
4. Other Sequences (one two-course sequence required):
Artificial Intelligence Sequence (two courses required): | ||
Two of the following: | ||
Artificial Intelligence | ||
Computational Linguistics | ||
Computational Models of Speech | ||
Introduction to Computer Vision | ||
Computer Vision | ||
Computational Biology |
Advanced Systems Sequence (two courses required): | ||
Two of the following: * | ||
Programming Languages | ||
Computer Architecture | ||
Functional Programming | ||
Implementation of Computer Languages I | ||
Implementation of Computer Languages II | ||
Operating Systems | ||
Networks and Distributed Systems | ||
Advanced Distributed Systems | ||
Mobile Computing | ||
Introduction to Database Systems | ||
Introduction to Computer Graphics | ||
Scientific Visualization | ||
Game Construction |
Scientific Computing Sequence (two courses required): | ||
Two of the following: | ||
Scientific Visualization | ||
Digital Biology | ||
Introduction to Scientific Computing |
5. Electives (three courses required):
Three additional elective Computer Science courses numbered 20000 or above. A BS student with a double major in a related area may petition to have some of the electives be courses in the other major.
* | depending upon what courses the student has taken in the Programming Languages and Systems Sequence (courses may not be used to meet both requirements) |
General Education | ||
One of the following sequences: | 200 | |
Introductory General Chemistry I and Introductory General Chemistry II (or higher or equivalent) * | ||
General Physics I-II (or higher) * | ||
MATH 13100-13200 | Elementary Functions and Calculus I-II (or higher) * | 200 |
Total Units | 400 |
Major | ||
Introductory Sequence: | 400 | |
Introduction to Computer Science I | ||
or CMSC 16100 | Honors Introduction to Computer Science I | |
Introduction to Computer Science II | ||
or CMSC 16200 | Honors Introduction to Computer Science II | |
Foundations of Software | ||
Introduction to Computer Systems | ||
Programming Languages and Systems Sequence (two of the following): | 200 | |
Programming Languages | ||
Computer Architecture | ||
Functional Programming | ||
Implementation of Computer Languages I | ||
Operating Systems | ||
Networks and Distributed Systems | ||
Mobile Computing | ||
Introduction to Database Systems | ||
Introduction to Computer Graphics | ||
Game Construction | ||
Algorithms and Theory Sequence: | 300 | |
Discrete Mathematics | ||
Theory of Algorithms | ||
Introduction to Formal Languages | ||
or CMSC 28100 | Introduction to Complexity Theory | |
Two courses from an approved sequence | 200 | |
Three electives numbered CMSC 20000 or above | 300 | |
Plus the following requirements: | 0-300 | |
BA (no other courses required) | ||
BS (3 courses in an approved program in a related field) | ||
Total Units | 1400-1700 |
* | Credit may be granted by examination. |
Computer science majors must take courses in the major for quality grades. A grade of C- or higher must be received in each course in the major. Any 20000-level computer science course taken as an elective beyond requirements for the major may, with consent of instructor, be taken for P/F grading.
Nonmajors may take courses for either quality grades or, subject to College regulations and with consent of instructor, for P/F grading. A Pass grade is given only for work of C- quality or higher. Courses taken to meet general education requirements must be taken for quality grades.
Incompletes are typically given in the Department of Computer Science only to students who have done at least 60 percent of the course's work of a passing quality and who are unable to complete all course work by the end of the quarter. Other restrictions on Incompletes are the province of individual instructors, many of whom do not permit Incompletes. To receive an Incomplete, students must make arrangements in advance with the instructor; a consent form to be signed by the instructor is available from the College adviser.
Students may earn a BA or BS degree with honors by attaining a grade of B or higher in all courses in the major and a grade of B or higher in three approved graduate computer science courses (30000-level and above). These courses may be courses taken for the major or as electives.
Students may also earn a BA or BS degree with honors by attaining the same minimum B grade in all courses in the major and by writing a successful bachelor's thesis as part of CMSC 29900 Bachelor's Thesis. This thesis must be based on an approved research project that is directed by a faculty member and approved by the department counselor.
The kinds of computer science courses appropriate for undergraduates will vary according to each student's interests.
CMSC 22100 | Programming Languages | 100 |
CMSC 22200 | Computer Architecture | 100 |
Time permitting, they should also take advanced programming topics including but not limited to the following: | ||
CMSC 22610 & 22620 | Implementation of Computer Languages I and Implementation of Computer Languages II | 200 |
CMSC 23000 | Operating Systems | 100 |
CMSC 23300 | Networks and Distributed Systems | 100 |
CMSC 23400 | Mobile Computing | 100 |
CMSC 23500 | Introduction to Database Systems | 100 |
CMSC 23700 | Introduction to Computer Graphics | 100 |
CMSC 23710 | Scientific Visualization | 100 |
CMSC 23800 | Game Construction | 100 |
and such courses in advanced programming topics as may be offered |
CMSC 27100 | Discrete Mathematics | 100 |
CMSC 27200 | Theory of Algorithms | 100 |
CMSC 28000 | Introduction to Formal Languages | 100 |
CMSC 28100 | Introduction to Complexity Theory | 100 |
The department also offers a number of special-interest courses that are detailed in the course descriptions. For information on new courses that are added on a regular basis, consult the department counselor and visit cs.uchicago.edu .
Students interested in continuing their studies beyond the undergraduate level should major in computer science and take as many computer science courses as possible. The most important courses are:
CMSC 15100 | Introduction to Computer Science I | 100 |
CMSC 15200 | Introduction to Computer Science II | 100 |
CMSC 15300 | Foundations of Software | 100 |
CMSC 15400 | Introduction to Computer Systems | 100 |
CMSC 22100 | Programming Languages | 100 |
CMSC 22200 | Computer Architecture | 100 |
CMSC 22610 | Implementation of Computer Languages I | 100 |
CMSC 23000 | Operating Systems | 100 |
CMSC 23300 | Networks and Distributed Systems | 100 |
CMSC 23500 | Introduction to Database Systems | 100 |
CMSC 23700 | Introduction to Computer Graphics | 100 |
CMSC 25010 | Artificial Intelligence | 100 |
CMSC 27100 | Discrete Mathematics | 100 |
CMSC 27200 | Theory of Algorithms | 100 |
CMSC 28000 | Introduction to Formal Languages | 100 |
CMSC 28100 | Introduction to Complexity Theory | 100 |
For more information about options for graduate study, consult the department counselor and the director of graduate studies.
The minor in Computer Science requires seven courses. The introductory sequence of computer science courses is followed by three approved upper-level courses chosen to complement a student's major or personal interest. Courses in the minor must be taken for quality grades, with a grade of C- or higher in each course. Students may not use AP credit for computer science to meet requirements for the minor.
No courses in the minor can be double counted with the student's major(s) or with other minors; nor can they be counted toward general education requirements. More than half of the requirements for the minor must be met by registering for courses bearing University of Chicago course numbers. By the end of Spring Quarter of their third year, students must submit approval of their minor program from the department counselor on a form obtained from their College adviser.
Other programs may be approved in consultation with the department counselor.
Students must choose four courses from the following (at least one course from both Area A and Area B):
Area A: | ||
Computer Science with Applications I | ||
Introduction to Computer Science I | ||
Honors Introduction to Computer Science I | ||
Area B: | ||
Computer Science with Applications II | ||
Introduction to Computer Science II | ||
Honors Introduction to Computer Science II | ||
CMSC 15300 | Foundations of Software | 100 |
CMSC 15400 | Introduction to Computer Systems | 100 |
Three 20000-level or above computer science courses must be approved by the department counselor or selected from a pre-approved three-course group below. A 20000-level course must replace each 10000-level course in the list above that was used to meet general education requirements.
CMSC 22100 | Programming Languages | 100 |
CMSC 22200 | Computer Architecture | 100 |
CMSC 22300 | Functional Programming | 100 |
CMSC 22610 | Implementation of Computer Languages I | 100 |
CMSC 23000 | Operating Systems | 100 |
CMSC 23300 | Networks and Distributed Systems | 100 |
CMSC 23400 | Mobile Computing | 100 |
CMSC 23500 | Introduction to Database Systems | 100 |
CMSC 23700 | Introduction to Computer Graphics | 100 |
CMSC 23800 | Game Construction | 100 |
CMSC 27100 | Discrete Mathematics | 100 |
CMSC 27200 | Theory of Algorithms | 100 |
CMSC 28000 | Introduction to Formal Languages | 100 |
CMSC 28100 | Introduction to Complexity Theory | 100 |
CMSC 23710 | Scientific Visualization | 100 |
CMSC 27610 | Digital Biology | 100 |
CMSC 28510 | Introduction to Scientific Computing | 100 |
CMSC 25010 | Artificial Intelligence | 100 |
CMSC 25020 | Computational Linguistics | 100 |
CMSC 25030 | Computational Models of Speech | 100 |
CMSC 25040 | Introduction to Computer Vision | 100 |
CMSC 25050 | Computer Vision | 100 |
CMSC 27600 | Computational Biology | 100 |
Graduate courses and seminars offered by the Department of Computer Science are open to College students with consent of instructor and department counselor. For more information, consult the department counselor.
CMSC 10100. Introduction to Programming for the World Wide Web I. 100 Units.
This course teaches the basics of building and maintaining a site on the World Wide Web. We discuss Internet terminology and how the Internet and its associated technologies work. Topics include programming websites, hypertext markup language (HTML), Cascading Style Sheets (CSS), and Common Gateway Interface (CGI) scripts (using PERL). Students also learn how to use JavaScript to add client-side functionality.
Instructor(s): W. Sterner Terms Offered: Winter
Note(s): This course does not meet the general education requirement in the mathematical sciences.
CMSC 10200. Introduction to Programming for the World Wide Web II. 100 Units.
This course introduces computer programming in Java with a focus on designing and implementing software for the World Wide Web. We first introduce the fundamentals of programming, giving particular attention to basic object-oriented techniques. We employ Java Server Pages to develop programs that interact with users through web browsers. Finally, we study relational databases and, integrating that study with general-purpose Java programming, build database-backed web applications.
Terms Offered: Spring
Prerequisite(s): MATH 10600, or placement into 13100 or equivalent; and knowledge of HTML
Note(s): This course meets the general education requirement in the mathematical sciences. May not be taken for credit by students who have credit for CMSC 10600, 12100, 15200, or 16200.
CMSC 10500-10600. Fundamentals of Computer Programming I-II.
This sequence meets the general education requirement in the mathematical sciences.
CMSC 10500. Fundamentals of Computer Programming I. 100 Units.
This course introduces computer programming using the functional programming language Scheme. We emphasize design, algorithm construction, and procedural/functional/data abstraction.
Instructor(s): S. Salveter Terms Offered: Autumn
Prerequisite(s): MATH 10600, or placement into 13100 or equivalent; or consent of departmental counselor required; previous computer experience and advanced mathematical knowledge not required
Note(s): CMSC 10500 and 10600 may be taken in sequence or individually. This course meets the general education requirement in the mathematical sciences.
CMSC 10600. Fundamentals of Computer Programming II. 100 Units.
This course is an introduction to computer programming using the object-oriented programming language C++. We emphasize algorithm design and construction. Topics include complex types, iteration, recursion, procedural/functional/data abstraction, classes, methods, inheritance, and polymorphism.
Instructor(s): S. Salveter Terms Offered: Winter
Prerequisite(s): MATH 10600, or placement into 13100 or equivalent; or consent of departmental counselor
Note(s): CMSC 10500 and 10600 may be taken in sequence or individually. This course meets the general education requirement in the mathematical sciences.
CMSC 11000-11100. Multimedia Programming as an Interdisciplinary Art I-II.
Either course in this sequence meets the general education requirement in the mathematical sciences. Like other classic Chicago general education courses, this sequence provides students with both practical programming skills and core ideas in computer science in interdisciplinary applications. Students learn how to perform in a multi-platform (Mac/Linux/Windows) environment using a high-level prototyping language (revTalk) that allows for the quick creation of useful multimedia applications. As a classic Core course in the Chicago tradition, the course presents introductory techniques of problem solving, algorithm construction, program coding, and debugging as interdisciplinary arts adaptable to a wide range of disciplines with their specialized problems. The first course moves through a sequence from step-by-step introductory labs, to labs that require independent analysis and solution, to a student-designed final project. The second course consists of several scientific and humanistic projects such as Turing Machines, biological modeling, and language manipulation with another final project.
CMSC 11000. Multimedia Programming as an Interdisciplinary Art I. 100 Units.
Instructor(s): W. Sterner Terms Offered: Winter
Prerequisite(s): MATH 10600, or placement into 13100 or equivalent; or consent of instructor
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 11100. Multimedia Programming as an Interdisciplinary Art II. 100 Units.
Instructor(s): W. Sterner Terms Offered: Spring
Prerequisite(s): MATH 10600, or placement into 13100 or equivalent; or consent of instructor
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 11200. Introduction to Interactive Logic. 100 Units.
No programming skills are assumed, but those with some programming background do projects with HyperCard, a Computer Assisted Design package, Prolog, or other software. The course continues in the same spirit as CMSC 11000-11100, but they are not prerequisites. This hands-on course presents logic as a concrete discipline that is used for understanding and creating human-computer technology in the context of science, technology, and society. We look at computer science, logic, philosophy, aesthetics, design, and the study of technology, as well as at the software packages of Tarski's World and possibly HyperProof.
Instructor(s): W. Sterner Terms Offered: Not offered 2012–13
Prerequisite(s): MATH 10600, or placement into 13100 or equivalent
Note(s): Offered in alternate years. Some experience with computers helpful. This course does not meet the general education requirement in the mathematical sciences.
CMSC 11710. Networks. 100 Units.
Networks help explain phenomena in such technological, social, and biological domains as the spread of opinions, knowledge, and infectious diseases. Networks also help us understand properties of financial markets, food webs, and web technologies. At the same time, the structure and evolution of networks is determined by the set of interactions in the domain. Our study of networks will employ formalisms such as graph theory, game theory, information networks, and network dynamics, with the goal of building formal models and translating their observed properties into qualitative explanations.
Instructor(s): J. Simon Terms Offered: Spring
Prerequisite(s): Completion of the general education requirement in the mathematical sciences, and familiarity with basic concepts of probability at the high school level.
Note(s): Necessary mathematical concepts will be presented in class.
CMSC 12100-12200. Computer Science with Applications I-II.
This two-quarter sequence teaches computational thinking and skills to students who are majoring in the sciences, mathematics, and economics. Lectures cover topics in (1) programming, such as recursion, abstract data types, and processing data; (2) computer science, such as clustering methods, event-driven simulation, and theory of computation; and to a lesser extent (3) numerical computation, such as approximating functions and their derivatives and integrals, solving systems of linear equations, and simple Monte Carlo techniques. Applications from a wide variety of fields serve both as examples in lectures and as the basis for programming assignments. In recent offerings, students have written programs to evaluate betting strategies, determine the number of machines needed at a polling place, and predict the size of extinct marsupials. Students learn Java and Python.
CMSC 12100. Computer Science with Applications I. 100 Units.
Instructor(s): A. Rogers Terms Offered: Autumn
Prerequisite(s): Placement into MATH 15200 or higher, or consent of instructor
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 12200. Computer Science with Applications II. 100 Units.
Instructor(s): A. Rogers Terms Offered: Winter
Prerequisite(s): Placement into MATH 15200 or higher, or consent of instructor
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 15100-15200. Introduction to Computer Science I-II.
This course, which is recommended for all students planning to take more advanced courses in computer science, introduces computer science using both functional (Scheme) and object-oriented (C++) programming languages. Topics include control and data abstraction, self-reference, time and space analysis, and data structures. NOTE: Nonmajors may use either course in this sequence to meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science must use either CMSC 15100-15200 or 16100-16200 to meet requirements for the major.
CMSC 15100. Introduction to Computer Science I. 100 Units.
Terms Offered: Autumn, Summer
Prerequisite(s): Placement into MATH 15100 or equivalent, or consent of departmental counselor
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 15200. Introduction to Computer Science II. 100 Units.
Terms Offered: Winter, Summer
Prerequisite(s): CMSC 15100
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 15300. Foundations of Software. 100 Units.
This course is concerned with the mathematical foundations of computer software. We introduce a number of mathematical areas used in the modeling of programming languages and software, including prepositional and predicate logic, basic set theory, relations, and automata theory. The connection between mathematics and software is made via examples and small programming assignments.
Terms Offered: Autumn
Prerequisite(s): CMSC 15200 or 12200
Note(s): Required of students who are majoring or minoring in Computer Science. Students who have credit for MATH 13300 or higher should see the Department Counselor for prior approval to substitute CMSC 28000 or 27700.
CMSC 15400. Introduction to Computer Systems. 100 Units.
This course covers the basics of computer systems from a programmer's perspective. Topics include data representation, machine language programming, exceptions, code optimization, performance measurement, memory systems, and system-level I/O. Extensive programming required.
Terms Offered: Spring
Prerequisite(s): CMSC 15200 or 12200
Note(s): Required of students who are majoring in Computer Science.
CMSC 16100-16200. Honors Introduction to Computer Science I-II.
Both courses in this sequence meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science must use either CMSC 15200 or 16200 to meet requirements for the major.
CMSC 16100. Honors Introduction to Computer Science I. 100 Units.
Programming in a functional language (currently Haskell), including higher-order functions, type definition, algebraic data types, modules, parsing, I/O, and monads. Basic data structures, including lists, binary search trees, and tree balancing. Basic mathematics for reasoning about programs, including induction, inductive definition, propositional logic, and proofs. Search in graphs, including depth-first and breadth-first search. Search in metric graphs, including greedy and A* search, with applications.
Instructor(s): S. Kurtz Terms Offered: Autumn
Prerequisite(s): Placement into MATH 15100 or equivalent and programming experience, or consent of department counselor
Note(s): This course meets the general education requirement in the mathematical sciences.
CMSC 16200. Honors Introduction to Computer Science II. 100 Units.
This course emphasizes the C Programming Language, but not in isolation. Instead, C is developed as a part of a larger programming toolkit that includes the shell (specifically ksh), shell programming, and standard Unix utilities (including awk). Nonshell scripting languages, in particular perl and python, are introduced, as well as interpreter (#!) files that use the command-line version of DrScheme. We cover various standard data structures, both abstractly, and in terms of concrete implementations—primarily in C, but also from time to time in other contexts like scheme and ksh. The course uses a team programming approach. There is a mixture of individual programming assignments that focus on current lecture material, together with team programming assignments that can be tackled using any Unix technology. Team projects are assessed based on correctness, elegance, and quality of documentation. We teach the "Unix way" of breaking a complex computational problem into smaller pieces, most or all of which can be solved using pre-existing, well-debugged, and documented components, and then composed in a variety of ways.
Instructor(s): S. Kurtz Terms Offered: Winter
Prerequisite(s): CMSC 16100, or consent of department counselor
Note(s): Students who have taken CMSC 15100 may take 16200 with consent of instructor. This course meets the general education requirement in the mathematical sciences.
CMSC 22100. Programming Languages. 100 Units.
Programming language design aims at the closest possible correspondence between the structures of a program and the task it performs. This course studies some of the structural concepts affecting programming languages: iterative and recursive control flow, data types and type checking, procedural versus functional programming, modularity and encapsulation, fundamentals of interpreting and compiling, and formal descriptions of syntax and semantics. Students write short programs in radically different languages to illuminate the variety of possible designs.
Terms Offered: Autumn. Not offered 2012-13.
Prerequisite(s): CMSC 15300
CMSC 22200. Computer Architecture. 100 Units.
This course is a survey of contemporary computer organization covering CPU design, instruction sets, control, processors, busses, ALU, memory, pipelined computers, multiprocessors, networking, and case studies. We focus on the techniques of quantitative analysis and evaluation of modern computing systems, such as the selection of appropriate benchmarks to reveal and compare the performance of alternative design choices in system design. We emphasize major component subsystems of high-performance computers: pipelining, instruction-level parallelism, memory hierarchies, input/output, and network-oriented interconnections.
Terms Offered: Autumn
Prerequisite(s): CMSC 15400
CMSC 22300. Functional Programming. 100 Units.
This course presents the functional programming paradigm, based on the idea of functions as "first-class" values that can be manipulated like other data. This idea leads to great power of expression while maintaining simplicity, making it easier to write correct and maintainable software. We use the languages Haskell and ML as representatives of the two main schools of functional programming, the pure and the impure. After learning the basic elements of these languages, we explore functional programming techniques that can be exploited in many areas of application using a surprising variety of languages (e.g., C#, Python) that have included first-class functions as a feature. We compare functional and object oriented programming and include an brief overview of concurrent functional programming in ML and Haskell.
Terms Offered: Not offered 2012–13
Prerequisite(s): CMSC 15300
CMSC 22610. Implementation of Computer Languages I. 100 Units.
This course covers principles and techniques for implementing computer languages (e.g., programming languages, query languages, specification languages, domain-specific languages). Topics include lexical analysis, parsing, tree representations of programs (both parse trees and abstract syntax trees), types and type checking, interpreters, abstract machines, and run-time systems. This is a project-based course involving the implementation of a small language using Standard ML.
Terms Offered: Winter
Prerequisite(s): CMSC 15300 and 15400 required; CMSC 22100 recommended
Note(s): Prior experience with ML programming not required. This course is offered in alternate years.
CMSC 22620. Implementation of Computer Languages II. 100 Units.
This course is a continuation of CMSC 22610, covering compilers for general-purpose languages. Topics include compiler-immediate representations, continuation-passing style, runtime representations, code generation, code optimization, register allocation, instruction scheduling, and garbage collection. This is a project-based course in which students construct a complete, working compiler for a small language using Standard ML.
Terms Offered: Spring
Prerequisite(s): CMSC 22610 required; CMSC 22100 strongly recommended
Note(s): This course is offered in alternate years.
Equivalent Course(s): CMSC 32620
CMSC 22630. Advanced Implementation of Computer Languages. 100 Units.
This course explores advanced topics in the implementation of high-level programming languages that vary each year (e.g., control-flow analysis algorithms, abstract interpretation, partial evaluation, advanced optimizations, runtime system representations, garbage collection algorithms, foreign-function interfaces). Students are expected to develop both a foundational and applied understanding of these topics.
Instructor(s): J. Reppy Terms Offered: Autumn. Not offered 2012–13.
Prerequisite(s): CMSC 22100 and 22620, or equivalent
CMSC 23000. Operating Systems. 100 Units.
This course provides an introduction to the basic concepts and techniques used to implement operating systems. Topics include processes and threads, interprocess communication and synchronization, memory management, segmentation, paging, linking and loading, scheduling, file systems, and input/output. The course will revolve around the implementation of an x86 operating system kernel.
Terms Offered: Spring
Prerequisite(s): CMSC 15400, and one of the following: CMSC 22200, CMSC 22610, CMSC 23300, CMSC 23500, CMSC 23700, or CMSC 23800
Note(s): This course is offered in alternate years.
CMSC 23300. Networks and Distributed Systems. 100 Units.
This course focuses on the principles and techniques used in the development of networked and distributed software. Topics include programming with sockets; concurrent programming; data link layer (Ethernet, packet switching, etc.); internet and routing protocols (UDP, TCP); and other commonly used network protocols and techniques. This is a project-oriented course in which students are required to develop software in C on a UNIX environment.
Instructor(s): B. Sotomayor Terms Offered: Spring
Prerequisite(s): CMSC 15400
CMSC 23310. Advanced Distributed Systems. 100 Units.
This course explores advanced topics in distributed systems. Topics include supercomputing (architectures, applications, programming models, etc.); grid computing with an emphasis on Globus technologies; Infrastructure-as-a-Service clouds (virtual infrastructure management, Amazon EC2, etc.), Platform-as-a-Service clouds (Google App Engine, etc.), and the Software-as-a-Service model; and other current topics related to using and building distributed systems. The course includes a substantial practical component but also requires students to read papers and articles on current advances in the field.
Instructor(s): B. Sotomayor Terms Offered: Spring
Prerequisite(s): CMSC 23300 or consent of instructor
CMSC 23340. Grid Computing. 100 Units.
The new Open Grid Services Architecture (OGSA) defines interfaces and protocols that promise to make it far easier to construct decentralized, dynamic, large-scale systems. We explore and evaluate this technology by using it to develop a range of scalable distributed services. We use the Globus Toolkit, an open source implementation of key OGSA standards, to design and build services. We then evaluate our implementations from the perspectives of performance and programmability.
Instructor(s): I. Foster Terms Offered: Winter. Not offered 2012–13.
Prerequisite(s): Substantial programming experience
CMSC 23400. Mobile Computing. 100 Units.
Mobile computing is proliferating at an extraordinary pace and changing nearly every aspect of society. Increased sensing and awareness capabilities of mobile devices have triggered a radical transformation of the modalities of interaction and applications. Mobile devices are also reshaping many aspects of computing—usage, networking, interface, computing models, etc. We explore elements of the core and emerging technologies underlying mobile computing. Past focus areas include visual experience, computational photography, augmented reality, synchronicity and proximity for shared social experiences. Students engage in a series of labs which expose them to elements of the software and hardware capabilities of mobile computing systems, and develop the capability to envision radical new applications. Students engage in extensive experiments and a large-scale project. Where possible, project teams are mentored by domain experts to shape their projects for greater impact.
Instructor(s): A. Chien Terms Offered: Winter
Prerequisite(s): CMSC 15200 and 15400 are required and CMSC 23000 or 23300 are recommended.
Equivalent Course(s): CMSC 33400
CMSC 23500. Introduction to Database Systems. 100 Units.
This course is an introduction to database design and programming using the relational model. Topics include DBMS architecture, entity-relationship and relational models, relational algebra, relational calculus, functional dependencies and normal forms, web DBs and PHP, query optimization, and physical data organization. The lab section guides students through the collaborative implementation of a relational database management system, allowing students to see topics such as physical data organization and DBMS architecture in practice, and exercise general skills such as collaborative software development.
Terms Offered: Spring
Prerequisite(s): CMSC 15300 and 15400
CMSC 23700. Introduction to Computer Graphics. 100 Units.
This course introduces the basic concepts and techniques used in three-dimensional computer graphics. The focus is on real-time rendering techniques, such as those found in computer games. These include coordinate systems and transformations, the graphics pipeline, basic geometric algorithms, texture mapping, level-of detail optimizations, and shadows. Students are required to complete both written assignments and programming projects using OpenGL.
Terms Offered: Winter
Prerequisite(s): CMSC 15400
Note(s): This course is offered in alternate years.
CMSC 23710. Scientific Visualization. 100 Units.
Scientific visualization combines the image synthesis methods of computer graphics, numerical methods of scientific computing, and mathematical models of the physical world to create a visual framework for discovering, understanding, and solving scientific problems. This course describes the context, methods, and application of modern scientific visualization, giving students the skills required to evaluate, design, and create effective visualizations. This course, which uses mainly Python software and packages that have convenient Python interfaces, is also intended for nonmajors with scientific data visualization needs.
Instructor(s): G. Kindlmann Terms Offered: Winter
Prerequisite(s): Strong programming skills and basic knowledge of linear algebra and calculus
Note(s): This course is offered in alternate years.
CMSC 23800. Game Construction. 100 Units.
Computer games are one of the most exciting applications of computer technology. They also are large software systems that embody cutting-edge graphics, as well as techniques from AI, scientific simulation, networking, and databases. This course introduces the student to the basic algorithms and techniques used in computer-game construction. Students work in teams to design and create games using existing libraries for graphics, physics simulation, and so forth.
Instructor(s): J. Reppy Terms Offered: Spring. Not offered 2012–13.
Prerequisite(s): CMSC 15400, and at least two of the following courses: CMSC 23700, CMSC 25000, CMSC 23000, CMSC 23300, CMSC 23500. Strong background in programming and expertise in at least two technical areas underlying computer games (e.g., AI, graphics, scientific computing, networking).
Equivalent Course(s): CSPP 53800
CMSC 25010. Artificial Intelligence. 100 Units.
This course introduces the theoretical, technical, and philosophical issues of AI. The emphasis is on computational and mathematical modes of inquiry into the structure and function of intelligent systems. Topics include learning and inference, speech and language, vision and robotics, search and reasoning.
Terms Offered: Spring
Prerequisite(s): CMSC 15300
CMSC 25020. Computational Linguistics. 100 Units.
This course introduces the problems of computational linguistics and the techniques used to deal with them. Topics are drawn primarily from phonology, morphology, and syntax. Special topics include automatic learning of grammatical structure and the treatment of languages other than English.
Instructor(s): J. Goldsmith Terms Offered: Winter
Prerequisite(s): CMSC 15200 or 12200, or competence in a programming language
Equivalent Course(s): LING 28600
CMSC 25025. Machine Learning and Large-Scale Data Analysis. 100 Units.
This course is an introduction to machine learning and the analysis of large data sets using distributed computation and storage infrastructure. Basic machine learning methodology and relevant statistical theory will be presented in lectures. Homework exercises will give students hands-on experience with the methods on different types of data. Methods include algorithms for clustering, binary classification, and hierarchical Bayesian modeling. Data types include images, archives of scientific articles, online ad clickthrough logs, and public records of the City of Chicago. Programming will be based on Python and R, but previous exposure to these languages is not assumed.
Instructor(s): J. Lafferty Terms Offered: Spring
Prerequisite(s): CMSC 15400 (or CMSC 12200 and either STAT 22400 or STAT 24400), or consent of the instructor
Equivalent Course(s): STAT 37601
CMSC 25030. Computational Models of Speech. 100 Units.
Terms Offered: Not offered in 2012-13.
CMSC 25040. Introduction to Computer Vision. 100 Units.
This course covers the fundamentals of digital image formation; image processing, detection and analysis of visual features; representation shape and recovery of 3D information from images and video; analysis of motion. We also study some prominent applications of modern computer vision such as face recognition and object and scene classification. Our emphasis is on basic principles, mathematical models, and efficient algorithms established in modern computer vision.
Terms Offered: Spring
Prerequisite(s): CMSC 25010
Note(s): This course is offered in alternate years.
CMSC 25050. Computer Vision. 100 Units.
This course covers deformable models for detecting objects in images. Topics include one-dimensional models to identify object contours and boundaries; two-dimensional models for image matching; and sparse models for efficient detection of objects in complex scenes. Mathematical tools needed to define the models and associated algorithms are developed. Applications include detecting contours in medical images, matching brains, and detecting faces in images. Neural network implementations of some of the algorithms are presented, and connections to the functions of the biological visual system are discussed.
Instructor(s): Y. Amit Terms Offered: Winter. Not offered 2012–13.
Prerequisite(s): Consent of department counselor and instructor
Equivalent Course(s): CMSC 35500,STAT 37900
CMSC 27100. Discrete Mathematics. 100 Units.
This course emphasizes mathematical discovery and rigorous proof, which are illustrated on a refreshing variety of accessible and useful topics. Basic counting is a recurring theme and provides the most important source for sequences, which is another recurring theme. Further topics include proof by induction; recurrences and Fibonacci numbers; graph theory and trees; number theory, congruences, and Fermat's little theorem; counting, factorials, and binomial coefficients; combinatorial probability; random variables, expected value, and variance; and limits of sequences, asymtotic equality, and rates of growth.
Terms Offered: Autumn
Prerequisite(s): CMSC 15300, or placement into MATH 15100 or equivalent
Note(s): This is a directed course in mathematical topics and techniques that is a prerequisite for courses such as CMSC 27200 and 27400.
CMSC 27200. Theory of Algorithms. 100 Units.
This course covers design and analysis of efficient algorithms, with emphasis on ideas rather than on implementation. Algorithmic questions include sorting and searching, discrete optimization, algorithmic graph theory, algorithmic number theory, and cryptography. Design techniques include "divide-and-conquer" methods, dynamic programming, greedy algorithms, and graph search, as well as the design of efficient data structures. Methods of algorithm analysis include asymptotic notation, evaluation of recurrent inequalities, the concepts of polynomial-time algorithms, and NP-completeness.
Terms Offered: Winter
Prerequisite(s): CMSC 27100 or consent of instructor
CMSC 27410. Honors Combinatorics. 100 Units.
Methods of enumeration, construction, and proof of existence of discrete structures are discussed in conjunction with the basic concepts of probability theory over a finite sample space. Enumeration techniques are applied to the calculation of probabilities, and, conversely, probabilistic arguments are used in the analysis of combinatorial structures. Other topics include basic counting, linear recurrences, generating functions, Latin squares, finite projective planes, graph theory, Ramsey theory, coloring graphs and set systems, random variables, independence, expected value, standard deviation, and Chebyshev's and Chernoff's inequalities.
Instructor(s): L. Babai Terms Offered: Winter
Prerequisite(s): MATH 19900 or 25400, or CMSC 27100, or consent of instructor. Experience with mathematical proofs.
Note(s): This course is offered in alternate years.
CMSC 27500. Graph Theory. 100 Units.
This course covers the basics of the theory of finite graphs. Topics include shortest paths, spanning trees, counting techniques, matchings, Hamiltonian cycles, chromatic number, extremal graph theory, Turan's theorem, planarity, Menger's theorem, the max-flow/min-cut theorem, Ramsey theory, directed graphs, strongly connected components, directed acyclic graphs, and tournaments. Techniques studied include the probabilistic method.
Terms Offered: Spring
Prerequisite(s): CMSC 15300 or MATH 20400
CMSC 27600. Computational Biology. 100 Units.
This course serves as a general introduction to the basic algorithms used to understand current problems in biology. Topics may include sequence alignment algorithms to study DNA and protein sequences, algorithms and experiments for protein structure prediction, dynamics, and folding, clustering and machine learning methods for gene expression analysis, computational models of RNA structure, and DNA computing and self-assembly.
Instructor(s): N. Hinrichs Terms Offered: Winter
Prerequisite(s): Familiarity with basic discrete mathematics/statistics/algorithms and biology recommended but not required.
Note(s): This course is offered in alternate years.
CMSC 27610. Digital Biology. 100 Units.
Explores the digital nature of biology at the molecular scale. Focuses on the role of hydrophobic effect in protein/ligand associations. Utilizes data-mining as a tool both to understand basic biophysics and to explain protein-ligand associations. Shows how such analog interactions can lead to digital devices (e.g., switches). No biochemistry background will be assumed.
Instructor(s): L. R. Scott Terms Offered: Winter
Prerequisite(s): MATH 15100-15200 and ability to program. All prerequisites will be provided in class.
Note(s): High school chemistry is helpful.
CMSC 27700-27800. Mathematical Logic I-II.
Mathematical Logic I-II
CMSC 27700. Mathematical Logic I. 100 Units.
This course introduces mathematical logic. Topics include propositional and predicate logic and the syntactic notion of proof versus the semantic notion of truth (e.g., soundness, completeness). We also discuss the Gödel completeness theorem, the compactness theorem, and applications of compactness to algebraic problems.
Terms Offered: Autumn
Prerequisite(s): MATH 25400 or 25700; open to students who are majoring in computer science who have taken CMSC 15400 along with MATH 16300 or MATH 19900
Equivalent Course(s): MATH 27700
CMSC 27800. Mathematical Logic II. 100 Units.
Topics include number theory, Peano arithmetic, Turing compatibility, unsolvable problems, Gödel's incompleteness theorem, undecidable theories (e.g., the theory of groups), quantifier elimination, and decidable theories (e.g., the theory of algebraically closed fields).
Terms Offered: Winter
Prerequisite(s): MATH 27700 or equivalent
Equivalent Course(s): MATH 27800
CMSC 27900. Chaos, Complexity, and Computers. 100 Units.
This course presents the mathematical bases for the complex, scale-independent behavior seen in chaotic dynamics and fractal patterns. It illustrates these principles from physical and biological phenomena. It explores these behaviors concretely using extensive computer simulation exercises, thus developing simulation and data analysis skills. L.
Instructor(s): Staff Terms Offered: Autumn
Prerequisite(s): PHYS 13300 or 14300; PHYS 25000 or prior programming experience.
Equivalent Course(s): MATH 29200,PHYS 25100
CMSC 28000. Introduction to Formal Languages. 100 Units.
This course is a basic introduction to computability theory and formal languages. Topics include automata theory, regular languages, context-free languages, and Turing machines.
Terms Offered: Autumn
Prerequisite(s): CMSC 15300, or MATH 19900 or 25500
Equivalent Course(s): MATH 28000
CMSC 28100. Introduction to Complexity Theory. 100 Units.
Computability topics are discussed (e.g., the s-m-n theorem and the recursion theorem, resource-bounded computation). This course introduces complexity theory. Relationships between space and time, determinism and non-determinism, NP-completeness, and the P versus NP question are investigated.
Terms Offered: Spring
Prerequisite(s): CMSC 27100, or MATH 19900 or 25500; and experience with mathematical proofs
Equivalent Course(s): MATH 28100
CMSC 28501. Topics in Scientific Computing. 100 Units.
This course covers current topics in scientific computing.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of instructor
CMSC 28510. Introduction to Scientific Computing. 100 Units.
Basic processes of numerical computation are examined from both an experimental and theoretical point of view. This course deals with numerical linear algebra, approximation of functions, approximate integration and differentiation, Fourier transformation, solution of nonlinear equations, and the approximate solution of initial value problems for ordinary differential equations. We concentrate on a few widely used methods in each area covered.
Instructor(s): T. Dupont Terms Offered: Autumn
Prerequisite(s): A year of calculus (MATH 15300 or higher), a quarter of linear algebra (MATH 19620 or higher), and CMSC 10600 or higher; or consent of instructor
Note(s): This course is offered in alternate years.
CMSC 29700. Reading and Research in Computer Science. 100 Units.
Students do reading and research in an area of computer science under the guidance of a faculty member. A written report is typically required.
Terms Offered: Summer, Autumn, Winter, Spring
Prerequisite(s): Consent of instructor and approval of department counselor
Note(s): Open both to students who are majoring in Computer Science and to nonmajors. Students are required to submit the College Reading and Research Course Form.
CMSC 29900. Bachelor's Thesis. 100 Units.
Terms Offered: Summer, Autumn, Winter, Spring
Prerequisite(s): Consent of instructor and department counselor. Students are required to submit the College Reading and Research Course Form.
Note(s): Open to fourth-year students who are candidates for honors in Computer Science
CMSC 31100. Big Ideas in Computer Science. 100 Units.
This course introduces many of the important concepts in the broad area of computer science. Each week a different professor gives a three-lecture sequence on a big idea in their field of specialty. Previous ideas have included undecidability, randomness, cryptography, stability of numerical algorithms, structural operational semantics, software engineering, and the Internet.
Terms Offered: Autumn
Prerequisite(s): Consent of department counselor and instructor
CMSC 32001. Topics in Programming Languages. 100 Units.
This course covers a selection of advanced topics in programming languages.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of department counselor and instructor
CMSC 32201. Topics in Computer Architecture. 100 Units.
This course covers a selection of advanced topics in computer architecture.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of department counselor and instructor
CMSC 32620. Implementation of Computer Languages II. 100 Units.
This course is a continuation of CMSC 22610, covering compilers for general-purpose languages. Topics include compiler-immediate representations, continuation-passing style, runtime representations, code generation, code optimization, register allocation, instruction scheduling, and garbage collection. This is a project-based course in which students construct a complete, working compiler for a small language using Standard ML.
Terms Offered: Spring
Prerequisite(s): CMSC 22610 required; CMSC 22100 strongly recommended
Note(s): This course is offered in alternate years.
Equivalent Course(s): CMSC 22620
CMSC 33400. Mobile Computing. 100 Units.
Mobile computing is proliferating at an extraordinary pace and changing nearly every aspect of society. Increased sensing and awareness capabilities of mobile devices have triggered a radical transformation of the modalities of interaction and applications. Mobile devices are also reshaping many aspects of computing—usage, networking, interface, computing models, etc. We explore elements of the core and emerging technologies underlying mobile computing. Past focus areas include visual experience, computational photography, augmented reality, synchronicity and proximity for shared social experiences. Students engage in a series of labs which expose them to elements of the software and hardware capabilities of mobile computing systems, and develop the capability to envision radical new applications. Students engage in extensive experiments and a large-scale project. Where possible, project teams are mentored by domain experts to shape their projects for greater impact.
Instructor(s): A. Chien Terms Offered: Winter
Prerequisite(s): CMSC 23000 or 23300 or equivalent are required.
Equivalent Course(s): CMSC 23400
CMSC 33501. Topics in Databases. 100 Units.
This course covers a selection of advanced topics in database systems.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of department counselor and instructor
CMSC 33600. Type Systems for Programming Languages. 100 Units.
This course covers the basic ideas of type systems, their formal properties, their role in programming language design, and their implementation. Exercises involving design and implementation explore the various options and issues.
Terms Offered: Winter
Prerequisite(s): Consent of department counselor
Note(s): CMSC 22100 recommended.
CMSC 33710. Scientific Visualization. 100 Units.
Scientific visualization combines the image synthesis methods of computer graphics, numerical methods of scientific computing, and mathematical models of the physical world to create a visual framework for discovering, understanding, and solving scientific problems. This course describes the context, methods, and application of modern scientific visualization, giving students the skills required to evaluate, design, and create effective visualizations. This course, which uses mainly Python software and packages that have convenient Python interfaces, is also intended for nonmajors with scientific data visualization needs.
Instructor(s): G. Kindlmann
Terms Offered: Winter
Prerequisite(s): Strong programming skills and basic knowledge of linear algebra and calculus
Note(s): This course is offered in alternate years.
Equivalent Course(s): CMSC 23710
CMSC 34000. Scientific Parallel Computing. 100 Units.
This course covers the use of multiple processors cooperating to solve a common task, as well as related issues in computer architecture, performance analysis, prediction and measurement, programming languages, and algorithms for large-scale computation. Programming at least one parallel computer is required. Possibilities include one of the clusters of workstations connected by high-speed networks on campus. We focus on state-of-the-art parallel algorithms for scientific computing. Topics are based on interest. General principles of parallel computing are emphasized.
Instructor(s): L. R. Scott Terms Offered: Autumn
Prerequisite(s): Consent of department counselor and instructor required; experience in scientific computing recommended
Note(s): This course is offered in alernate years.
CMSC 34200. Numerical Hydrodynamics. 100 Units.
This course covers numerical methods for the solution of fluid flow problems. We also make a theoretical evaluation of the methods and experimental study based on the opinionated book Fundamentals of Computational Fluid Dynamics by Patrick J. Roache.
Instructor(s): T. Dupont Terms Offered: Winter
Prerequisite(s): Consent of department counselor. Ability to program; and familiarity with elementary numerical methods and modeling physical systems by systems of differential equations
CMSC 34710. Wireless Sensor Networks. 100 Units.
This course introduces the concepts and technologies for building embedded systems and wireless sensors nets by focusing on four areas: low-power hardware, wireless networking, embedded operating systems, and sensors. Two assignments provide hands-on experience by deploying small wireless sensor motes running TinyOS to form an ad-hoc peer-to-peer network that can collect environmental data and forward it back to an 802.11b-equiped embedded Linux module. Students also read and summarize papers, participate in classroom discussions, and work on a team research project.
Instructor(s): R. Stevens Terms Offered: Not offered 2012–13
Prerequisite(s): Consent of department counselor. Graduate-level understanding of Unix/Linux operating systems, networking, computer architecture, and programming
CMSC 35000. Introduction to Artificial Intelligence. 100 Units.
This course introduces the theoretical, technical, and philosophical aspects of Artificial Intelligence. We emphasize computational and mathematical modes of inquiry into the structure and function of intelligent systems. Topics include learning and inference, speech and language, vision and robotics, and reasoning and search.
Instructor(s): J. Lafferty Terms Offered: Spring
Prerequisite(s): Consent of department counselor; CMSC 25010.
CMSC 35100. Natural Language Processing. 100 Units.
This course introduces the theory and practice of natural language processing, with applications to both text and speech. Topics include regular expressions, finite state automata, morphology, part of speech tagging, context free grammars, parsing, semantics, discourse, and dialogue. Symbolic and probabilistic models are presented. Techniques for automatic acquisition of linguistic knowledge are emphasized.
Terms Offered: Spring. Not offered 2012-13.
Prerequisite(s): Consent of department counselor. CMSC 25010 or consent of instructor.
CMSC 35400. Machine Learning. 100 Units.
This course introduces the theory and practice of machine learning, emphasizing statistical approaches to the problem. Topics include pattern recognition, empirical risk minimization and the Vapnik Chervonenkis theory, neural networks, decision trees, genetic algorithms, unsupervised learning, and multiple classifiers.
Instructor(s): J. Lafferty Terms Offered: Winter
Prerequisite(s): Consent of department counselor. CMSC 25010 or consent of instructor.
Equivalent Course(s): STAT 37710
CMSC 35500. Computer Vision. 100 Units.
This course covers deformable models for detecting objects in images. Topics include one-dimensional models to identify object contours and boundaries; two-dimensional models for image matching; and sparse models for efficient detection of objects in complex scenes. Mathematical tools needed to define the models and associated algorithms are developed. Applications include detecting contours in medical images, matching brains, and detecting faces in images. Neural network implementations of some of the algorithms are presented, and connections to the functions of the biological visual system are discussed.
Instructor(s): Y. Amit Terms Offered: Winter. Not offered 2012–13.
Prerequisite(s): Consent of department counselor and instructor
Equivalent Course(s): CMSC 25050,STAT 37900
CMSC 35900. Topics in Artificial Intelligence. 100 Units.
This course covers topics in artificial intelligence.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of department counselor and instructor
CMSC 36500. Algorithms in Finite Groups. 100 Units.
We consider the asymptotic complexity of some of the basic problems of computational group theory. The course demonstrates the relevance of a mix of mathematical techniques, ranging from combinatorial ideas, the elements of probability theory, and elementary group theory, to the theories of rapidly mixing Markov chains, applications of simply stated consequences of the Classification of Finite Simple Groups (CFSG), and, occasionally, detailed information about finite simple groups. No programming problems are assigned.
Instructor(s): L. Babai Terms Offered: Spring
Prerequisite(s): Consent of department counselor. Linear algebra, finite fields, and a first course in group theory (Jordan-Holder and Sylow theorems) required; prior knowledge of algorithms not required
Note(s): This course is offered in alternate years.
Equivalent Course(s): MATH 37500
CMSC 37000. Algorithms. 100 Units.
The focus of this course is the analysis and design of efficient algorithms, with emphasis on ideas rather than on implementation. Algorithmic questions include sorting and searching, discrete optimization, algorithmic graph theory, algorithmic number theory, and cryptography. Design techniques include "divide-and-conquer" methods, dynamic programming, greedy algorithms, and graph search, as well as the design of efficient data structures. Methods of algorithm analysis include asymptotic notation, evaluation of recurrent inequalities, the concepts of polynomial-time algorithms, and NP-completeness.
Instructor(s): L. Babai Terms Offered: Winter
Prerequisite(s): Consent of department counselor. CMSC 27200 or consent of instructor.
CMSC 37100. Topics in Algorithms. 100 Units.
This course covers current topics in algorithms.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of department counselor. CMSC 27200 or consent of instructor.
CMSC 37110. Discrete Mathematics. 100 Units.
This course emphasizes mathematical discovery and rigorous proof, illustrated on a variety of accessible and useful topics, including basic number theory, asymptotic growth of sequences, combinatorics and graph theory, discrete probability, and finite Markov chains. This course includes an introduction to linear algebra.
Instructor(s): L. Babai Terms Offered: Autumn
Prerequisite(s): Consent of department counselor and instructor
CMSC 37200. Combinatorics. 100 Units.
Methods of enumeration, construction, and proof of existence of discrete structures are discussed. The course emphasizes applications of linear algebra, number theory, and the probabilistic method to combinatorics. Applications to the theory of computing are indicated, and open problems are discussed.
Instructor(s): L. Babai Terms Offered: Winter
Prerequisite(s): Consent of department counselor. Linear algebra, basic combinatorics, or consent of instructor.
CMSC 37400. Constructive Combinatorics. 100 Units.
This course covers constructive combinatorial techniques in areas such as enumerative combinatorics, invariant theory, and representation theory of symmetric groups. Constructive techniques refer to techniques that have algorithmic flavor, such as those that are against purely existential techniques based on counting.
Instructor(s): K. Mulmuley Terms Offered: Spring
Prerequisite(s): Consent of department counselor. Advanced knowledge of mathematics and consent of instructor.
CMSC 37701. Topics in Bioinformatics. 100 Units.
This course covers current topics in bioinformatics.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of Consent of department counselor and instructor
CMSC 37720. Computational Systems Biology. 100 Units.
This course introduces concepts of systems biology. We also discuss computational methods for analysis, reconstruction, visualization, modeling, and simulation of complex cellular networks (e.g., biochemical pathways for metabolism, regulation, and signaling). Students explore systems of their own choosing and participate in developing algorithms and tools for comparative genomic analysis, metabolic pathway construction, stoichiometeric analysis, flux analysis, metabolic modeling, and cell simulation. We also focus on understanding the computer science challenges in the engineering of prokaryotic organisms.
Instructor(s): R. Stevens Terms Offered: Autumn. Not offered 2012–13.
Prerequisite(s): Consent of department counselor and instructor
CMSC 37800. Numerical Computation. 100 Units.
This course covers topics in numerical methods and computation that are useful in statistical research (e.g., simulation, random number generation, Monte Carlo methods, quadrature, optimization, matrix methods).
Terms Offered: Autumn. Not offered 2011-12.
Prerequisite(s): Consent of departmental counselor. STAT 34300 or consent of instructor.
Equivalent Course(s): STAT 30700
CMSC 37810. Mathematical Computation I: Matrix Computation Course. 100 Units.
This course covers the theory and practice of matrix computation, starting with the LU and Cholesky decompositions, the QR decompositions with applications to least squares, iterative methods for solving eigenvalue problems, iterative methods for solving large systems of equations, and (time permitting) the basics of the fast Fourier and fast wavelet transforms. The mathematical theory underlying the algorithms is emphasized, as well as their implementation in code.
Terms Offered: Autumn
Prerequisite(s): Linear algebra (STAT 24300 or equivalent) and some previous experience with statistics
Equivalent Course(s): STAT 30900
CMSC 37811. Mathematical Computation II: Optimization and Simulation. 100 Units.
This course covers the fundamentals of continuous optimization, including constrained optimization, and introduces the use of Monte Carlo methods in computer simulation and combinatorial optimization problems. Several substantial programming projects (using MATLAB) are completed during the course.
Terms Offered: Winter
Prerequisite(s): Solid grounding in multivariate calculus, linear algebra, and probability theory
Equivalent Course(s): STAT 31000
CMSC 37812. Mathematical Computation III: Numerical Methods for PDE's. 100 Units.
The first part of this course introduces basic properties of PDE’s; finite difference discretizations; and stability, consistency, convergence, and Lax’s equivalence theorem. We also cover examples of finite difference schemes; simple stability analysis; convergence analysis and order of accuracy; consistency analysis and errors (i.e., dissipative and dispersive errors); and unconditional stability and implicit schemes. The second part of this course includes solution of stiff systems in 1, 2, and 3D; direct vs. iterative methods (i.e., banded and sparse LU factorizations); and Jacobi, Gauss-Seidel, multigrid, conjugate gradient, and GMRES iterations..
Terms Offered: Spring
Prerequisite(s): Some prior exposure to differential equations and linear algebra
Equivalent Course(s): STAT 31100
CMSC 38000-38100. Computability Theory I-II.
The courses in this sequence are offered in alternate years.
CMSC 38000. Computability Theory I. 100 Units.
CMSC 38000 is concerned with recursive (computable) functions and sets generated by an algorithm (recursively enumerable sets). Topics include various mathematical models for computations (e.g., Turing machines and Kleene schemata, enumeration and s-m-n theorems, the recursion theorem, classification of unsolvable problems, priority methods for the construction of recursively enumerable sets and degrees).
Instructor(s): R. Soare Terms Offered: Winter
Prerequisite(s): Consent of department counselor. MATH 25500 or consent of instructor.
Equivalent Course(s): MATH 30200
CMSC 38100. Computability Theory II. 100 Units.
CMSC 38100 treats classification of sets by the degree of information they encode, algebraic structure and degrees of recursively enumerable sets, advanced priority methods, and generalized recursion theory.
Instructor(s): R. Soare Terms Offered: Winter, Spring
Prerequisite(s): Consent of department counselor. MATH 25500 or consent of instructor.
Equivalent Course(s): MATH 30300
CMSC 38300. Numerical Solutions to Partial Differential Equations. 100 Units.
This course covers the basic mathematical theory behind numerical solution of partial differential equations. We investigate the convergence properties of finite element, finite difference and other discretization methods for solving partial differential equations, introducing Sobolev spaces and polynomial approximation theory. We emphasize error estimators, adaptivity, and optimal-order solvers for linear systems arising from PDEs. Special topics include PDEs of fluid mechanics, max-norm error estimates, and Banach-space operator-interpolation techniques.
Instructor(s): L. R. Scott Terms Offered: Spring. This course is offered in alternate years.
Prerequisite(s): Consent of department counselor and instructor
Equivalent Course(s): MATH 38300
CMSC 38410. Quantum Computing. 100 Units.
This course covers mathematical and complexity aspects of quantum computing, putting aside all questions pertaining to its physical realizability. Possible topics include: (1) quantum model of computation, quantum complexity classes, and relations to their classical counterparts; (2) famous quantum algorithms (including Shor and Grover); (3) black-box quantum models (lower and upper bounds); (4) quantum communication complexity (lower and upper bounds); and (5) quantum information theory.
Instructor(s): A. Razborov Terms Offered: Winter. This course is offered in alternate years.
Prerequisite(s): Consent of department counselor. Basic knowledge of computational complexity and linear algebra required; knowledge of quantum mechanics not required
CMSC 38500. Computability and Complexity Theory. 100 Units.
Part one of this course consists of models for defining computable functions: primitive recursive functions, (general) recursive functions, and Turing machines; the Church-Turing Thesis; unsolvable problems; diagonalization; and properties of computably enumerable sets. Part two of this course deals with Kolmogorov (resource bounded) complexity: the quantity of information in individual objects. Part three of this course covers functions computable with time and space bounds of the Turing machine: polynomial time computability, the classes P and NP, NP-complete problems, polynomial time hierarchy, and P-space complete problems.
Instructor(s): A. Razborov Terms Offered: Winter
Prerequisite(s): Consent of department counselor and instructor
Equivalent Course(s): MATH 30500
CMSC 38512. Kolmogorov Complexity. 100 Units.
This course introduces the theory of Kolmogorov Complexity with an emphasis on its use in theoretical computer science, mostly in computational complexity. If time permits, we may briefly touch on its uses in statics, prediction, and learning.
Instructor(s): J. Simon Terms Offered: Autumn. Not offered 2012–13.
Prerequisite(s): Consent of department counselor and instructor
CMSC 38600. Complexity Theory A. 100 Units.
This course covers topics in computational complexity theory, with an emphasis on machine-based complexity classes.
Terms Offered: Spring
Prerequisite(s): Consent of department counselor and instructor
CMSC 38700. Complexity Theory B. 100 Units.
This course covers topics in computational complexity theory, with an emphasis on combinatorial problems in complexity.
Instructor(s): A. Razborov Terms Offered: Spring. Not offered 2012-13.
Prerequisite(s): Consent of department counselor and instructor
CMSC 38815. Geometric Complexity. 100 Units.
This course provides a basic introduction to geometric complexity theory, an approach to the P vs. NP and related problems through algebraic geometry and representation theory.
Instructor(s): K. Mulmuley Terms Offered: Autumn. This course is offered in alternate years.
Prerequisite(s): Consent of department counselor and instructor
Note(s): Background in algebraic geometry or representation theory not required
CMSC 39000. Computational Geometry. 100 Units.
This course is a seminar on topics in computational geometry.
Instructor(s): K. Mulmuley Terms Offered: Spring. This course is offered in alternate years.
Prerequisite(s): Consent of department counselor and instructor
CMSC 39600. Topics in Theoretical Computer Science. 100 Units.
This course is a seminar on current research in theoretical computer science.
Terms Offered: Autumn, Winter, Spring
Prerequisite(s): Consent of department counselor and instructor