Courses
The Department of Computer Science offers a variety of regular
courses, as well as special topics courses and independent study
courses. Courses at the 400 level
are generally taken by senior
undergraduates but are open to graduate students.
Research seminars
are intended primarily for doctoral students and master's students
engaged in research. A synopsis of our current course offerings appears below.
Consultants
are available to help students with many courses.
Course archives from past semesters are available
online and in the department office.
Credit 1 unit pass/fail
Corequisite: Math 131 or equivalent. Three lectures
and a two-hour laboratory session each week. Credit 4 units per course.
Credit 3 units.
Credit 4 units.
Credit 2 units.
Credit 2 units.
Credit 3 units
Corequisite: CS 101G. Credit 3 units.
Prerequisites: CS 102G,
Math 142 or equivalent. Credit 3 units.
Prerequisites: CS 102G or 136G,
and sophomore standing.
Credit 3 units.
Corequisite: Math 217. Credit 3 units.
Prerequisite: none. Credit 3 units.
Prerequisites: CS 102G or
136G, and sophomore standing. Credit 3 units.
Prerequisites: CS 102G,
201. Credit 3 units.
Students use a programming environment based on a novel approach to
the construction of distributed applications. Students use graphics
tools to configure distributed applications and construct
direct-manipulation graphical user interfaces for them. Distributed
applications are constructed in a variety of domains, such as
distributed interactive simulations, group collaboration, pipelined
image processing, and distributed multiplayer games.
Prerequisites: CS 241 and C++ programming experience.
Credit 3 units.
Intensive focus on practical aspects of designing, implementing, and
debugging object-oriented software. Topics covered include reuing
design patterns and software architectures and developing, documenting,
and testing representative applications using object-oriented frameworks
and C++. Design and implementation based on design patterns and frameworks
are central themes to enable the construction of reusable, extensible,
efficient, and maintainable software.
Prerequisites: CS 101, 102, 241.
Credit 3 units
Prerequisite for CS 353T: CS 102G or
136G.
Prerequisites for CS 354M: at least sophomore standing, CS 353T, and either
SSM 326 or 325.
Credit 3 units per course.
Prerequisite: CS/EE 260M. Credit 3 units.
Prerequisite: junior standing. Credit to be arranged; no more than 3 units a
semester.
Prerequisites: CS 241, 306.
Credit 3 units.
Prerequisite: CS 306 or 326M.
Credit 3 units.
Prerequisite: Senior standing or greater or by permission of instructor.
Credit 3 units.
Prerequisites: CS 201, 241.
Credit 3 units.
Prerequisite: CS 241. Credit 3 units.
Prerequisites: CS 241 or equivalent.
Credit: 3 units.
Prerequisite: CS 241. Credit 3 units.
Prerequisites: CS 201, CS 241.
Credit 3 units.
Prerequisite: CS 455. Credit 3 units.
Prerequisites: CS 306, 362M.
Credit 3 units.
Prerequisites: Math 217; CS 102G,
136G, or 265; SSM 317;
and sophomore standing. Credit 3 units.
Prerequisites: CS 102G, 136G,
or M.B.A standing. Credit 3 units.
Prerequisite: CS 241. Credit 3 units.
Prerequisite: senior standing. Credit 3 units a semester.
Prerequisites: a strong academic record and permission of instructor.
Credit 3 units.
An introduction to various technologies for human-computer interaction
through visual, haptic, and audio channels. User interface management
systems for GUI (graphic user interface) and PUI (pen user interface).
Object-oriented design and implementation of UI application framework.
Adaptable user interfaces.
An overview of event-oriented end-user programming for user definable
user interfaces.
First hand design experience through individualized projects.
Prerequisite: permission of instructor. Credit 3 units.
Prerequsities: none. Credit 3 units. No credit toward CS graduate degree.
Prerequisite: CS 241. Credit 3 units.
Prerequisite: CS 201. Credit 3 units.
Prerequisites: Experience with high level programming language,
mathematical maturity, and permission of instructor.
Undergraduate credit toward general distribution,
but not toward CS requirements.
No credit toward CS graduate degree.
Credit 3 units.
Prerequisite: CS 510A or CS 455.
CS 511A is prerequisite for 512A.
Credit 3 units.
Prerequisites: CS 511A. Credit 3 units.
This course, intended for new graduate students without a computer science
background, covers the core components seen in a computer science
undergraduate curriculum on which our graduate level courses rely.
Topics include fundamental algorithms, data structures, proof techniques,
computational models, machine organization, and software design and
implementation.
No credit toward CS graduate degree.
Prerequisite: graduate standing. Some programming experience and
mathematical sophistication highly desirable. Credit 3 units.
Prerequisite: CS 511A. Credit 3 units.
Prerequisite: Math 233 or equivalent. Credit 3 units.
Prerequisite: Basic knowledge of AI and probability theory, or permission of
the instructor. Credit 3 units.
Prerequisites: CS 306, 260M.
Credit 3 units.
Prerequisite: CS 422S. Credit 3 units.
Prerequisite: CS 423S or
CS 533S. Credit 3 units.
Prerequisites: CS 306 and CS 455,
or permission of instructor. Credit 3 units.
Prerequisite: graduate standing. Credit 3 units.
Prerequisite: CS 455. Credit 3 units.
Prerequisite: CS 431S or 455.
Credit 3 units.
Prerequisites: CS/EE 260M.
Credit 3 units.
Prerequisite: permission of instructor. Credit 3 units.
Prerequisite: CS 241. Credit 3 units.
Prerequisite: CS 541T. Credit 3 units.
Prerequisites: CS455 and CS 456.
Credit 3 units.
Prerequisites: mathematical maturity; CS 510A
or permission of instructor. Credit 3 units.
Prerequisites: CS 549A, CS 510A
or permission of instructor. Credit 3 units.
Prerequisites: CS 201, 453A,
455. Credit 3 units.
Prerequisites: CS 241 and SSM 317. Credit 3 units.
Prerequisite: CS 455 Credit 3 units.
Prerequisites: CS 136G or CS 102,
CS 260M and an
elementary knowledge of pulse excitation transmission line theory.
Credit 3 units.
Prerequisites: CS 102G or CS136G,
and 260M or their respective equivalents.
Credit 3 units.
Prerequisite: CS 201. Credit 3 units.
Prerequisite: CS 455. Credit 3 units.
Prerequisite: CS 455. Credit 3 units.
Prerequisites: CS 465A or permission of instructor.
Credit 3 units.
Prerequisites: SSM 326; FORTRAN, C, or equivalent. Credit 3 units.
Prerequisites: SSM 326. Credit 3 units.
Prerequisite: CS 455. Credit 3 units.
Prerequisites: CS 241 and 260M.
CS 577M is prerequisite for CS 578M.
Credit 3 units.
Prerequisite: graduate standing. Credit 3 units.
Prequisite: CS 579M.
Credit 3 units.
Prerequisites: CS 241, and familiarity with
NP-completeness reductions. Credit 3 units.
Prerequisite: CS 456 or permission of instructor. Credit 3 units.
Prerequisite: graduate standing. Credit 3 units.
Prerequisites: graduate standing and permission of instructor.
Credit 3 units.
This course is for students who are enrolled in the networking and
communications masters program. Students in this program are expected
to complete an individual or small group (up to three students) design
project under the supervision of a faculty sponsor. Students undertaking
a project are required to first prepare a short project proposal (3-5
pages) and give a short presentation (30 minutes) to which all students
and faculty in the networking and communications program are invited.
In the design phase of the project, students carry out a detailed design,
identify key implementation decisions and develop a plan for proceeding
through the implementation phase, including identification of major
steps and assignment of responsibilities to team members. The design phase
ends in a design report and a presentation on the design and implementation
plan. In the final phase of the project, students implement their design,
demonstrate the resulting system, evaluate it, document their results in
a final report (20-30 pages) and give a final presentation. Students
should plan to complete the first phase at least five months before their
intended graduate date and the second phase at least two months before
their intended graduation. Students can register for CS/EE 596 only after
completing the first phase and having a faculty sponsor agree to supervise
their project.
Prerequiste: permission of the program director. Credit 3 units.
This course is for students who have completed the first phase of a design
project in CS 595 and have a faculty sponsor who has agreed to supervise
their project.
In the final phase of the project, students implement their design,
demonstrate the resulting system, evaluate it, document their results in a
final report (20-30 pages) and give a final presentation. Students should
plan to complete this phase at least two months before their intended
graduation.
Prerequisites: CS 595 and permission of the program director.
Credit 3 units
Prerequisite: permission of adviser. Credit to be arranged.
In this research seminar we study some of the techniques that are used
in the performance evaluation of telecommunication networks. The
objectives of this research seminar are achieved through selective
readings from the literature of stochastic processes and broadband
telecommunication networks. The participants learn fundamental
concepts from the theory of Markov processes, Markov chains, renewal
theory and Markov renewal theory. The above topics and related
knowledge are utilized in the study of basic papers from the
literature of broadband networks.
CS 100 Introduction to Computing Tools
This course introduces the use of computer and network tools in support
of individual and collaborative undergraduate studies. Topics covered in
lectures and labs: structure of computing systems, electronic mail,
World Wide Web, text editing, spreadsheets, symbolic mathematics, and
document processing.
CS 101G-
102G
Computer Science I-II
An introduction to algorithms, algorithmic processes and their implementation
on computers. First semester: Concepts of functional programming. Computation
through direct substitution. Introduction to principles of abstraction for
data and procedures and the application of these principles to effectively
reduce the complexity of problems. The use of levels of description and
abstraction hierarchies to control the organizational complexity of software
systems. Introduction to the concept of von Neumann architecture. Debugging
and documentation. Implementation of several nontrivial algorithms and
procedures.
Second semester:
Concepts of procedural programming.
Use of invariants to reason about correctness of algorithms.
Abstraction and Software Engineering as mean of controlling complexity.
Introduction to Abstract Data Types.
Introduction to Object-Oriented design and programming concepts.
Concept of modularity.
Debugging and documentation.
Design and implementation of nontrivial algorithms and procedures.
Computation in a von Neumann machine.
CS 125 Introduction to Engineering Computing
Computing tools for engineers. Topics: basic computing concepts, operating
environments, engineering applications of spreadsheets, equation-solving
packages, introduction to programming. Emphasis on independent use of
documentation. Weekly laboratory exercises give students hands-on experience
using software tools to solve engineering problems.
CS 136G Introduction to Computing
A workshop course (lectures and supervised laboratory sessions) covering
the fundamental organization and operating principles of digital computers
and the systematic design and development of well-structured programs.
After an intensive exposure to algorithmic principles and
programming techniques and practices using the C++
language, students learn about a computer's internal structure through the
use of a simple Von Neumann machine simulator.
CS 142 Computers and Society
(Same as EP142)
This course is an introduction to social, legal, ethical, and economic
issues related to computing. As a lecture and discussion course,
a broad range of topics will be covered including the use of computers
in society, risks, privacy, computer crime, growth and
funding of the Internet and intellectual property laws.
Students will select a topic for
research throughout the semester.
CS 143 Introduction to Java Programming
This programming language course will cover some of the object-oriented
language features of Java, e.g., encapsulation, inheritance, and polymorphism.
Programming assignments will be used to explore the nature of Java and the
kinds of the applications for which it is useful. Although no specific
knowledge is necessary, some programming experience will be required.
CS151 Introduction to Computer Mediated Human Communication
This course is specially designed for non-CS majors from freshmen to seniors.
The goals of the course are: to study how humans communicate using computer
technologies such as the internet, databases, and digital TV in the future;
to learn how to use computers for daily communication needs;
to understand the future implications of computer technology on human
communication.
This course is a good introduction to more advanced computer application
courses. No prerequisites. No math or computer programming is
required. Weekly lab works are mandatory.
CS 201 Formal Foundations of Computer Science
Introduces elements of logic, mathematics, and
philosophy that allow reasoning about computational
structures and processes. Generally, the
areas of discrete structures, proof techniques, and
computational models are covered. Topics typically
include propositional and predicate logic; sets, relations,
functions, and graphs; proof by contradiction, induction,
and reduction; and finite state machines and regular languages.
CS 241 Algorithms and Data Structures
Study of fundamental algorithms and data structures. Emphasizes
importance of data structure choice and implementation for obtaining
the most efficient algorithm for solving a given problem. Covers
asymptotic notation and techniques for solving basic recurrence
relations. Attention will be given to analysis of asymptotic
performance. Algorithms presented include: sorting, hashing,
searching, basic graph algorithms, garbage collection, and string
matching. Data structures covered: basic search trees, balanced
search trees, heap data structure, B-trees, and graph representations.
CS 260M Digital Computers I: Organizational and Logical Design
(Same as EE 260M)
Digital computers and digital information-processing systems; Boolean
algebra, principles and methodology of logic design; machine language
programming; register transfer logic; microprocessor hardware, software, and
interfacing; fundamentals of digital circuits and systems; computer
organization and control; memory systems, arithmetic unit design. Occasional
laboratory exercises.CS 265 Introduction to Computing and Computer Applications
Basic architectural components of computers and networks and their functions;
development of computer-oriented problem solving and numerical methods;
program development and programming.
Using the FORTRAN language and software libraries,
students design and implement a variety of programs covering
a broad spectrum of nontrivial computer applications.
Use of high-level tools for calculus/algebraic analysis.
CS 300 The Art and Science of Computing
This course provides an introduction to the important ideas in computer
science, its history and development, and the future of computing
technology. It is intended for students who are interested in understanding
the core concepts and the potential of computing technology, rather than
developing professional expertise. Topics include data representation,
algorithms, historical developments, what computers can and cannot do,
the information superhighway, and the impact of computing/information
technology on business and society.
CS 306 Processing Systems and Structures
Analysis of function and organization of major subsystems of
information-processing complex. Fundamental algorithms for numerical
computation, extended precision arithmetic, address translation, storage
allocation, access methods, and the sequencing and control of peripheral
devices. Introduction to the real-time operating systems, with emphasis on
real-time signal-processing applications and resource management.
Weekly laboratories, exercises, and
a final laboratory project.CS 313A Artificial Intelligence Laboratory
Project course in artificial intelligence. Students learn standard approaches,
then alter existing code. Students integrate solutions to create an
intelligent agent in a simulated world faced with classic AI problems in
natural language processing, reasoning, vision, speech, organization of expert
knowledge, planning, and learning.
CS 333S Special Topics in Distributed Applications
A project-based course in which undergraduate students work alone and in
small groups to develop interactive distributed applications from modular
software building blocks. Several distributed application paradigms
are explored.
CS 342S Developing Object-Oriented Software with Patterns and Frameworks
CS 353T-354M Operations Analysis I-II
Introduction to the nature of operations research and some of its techniques.
Topics: modeling complex systems as linear programs, the simplex method,
duality, sensitivity analysis, and use of computer linear programming
packages; critical path analysis, network flow, assignment problems, and
dynamic programming; discounting, utility decisions under uncertainty, and
inventory models; continuous and discrete simulation languages. Monte Carlo
methods and queueing theory.
CS 362M Digital Computers: Architecture
(Same as EE 362M)
Study of interaction and design philosophy of hardware and software for
digital computer systems. Machine organization, data structures, I/O
considerations. Comparison of microcomputer architectures.
CS 400 Independent Work
Possible topics may be found in the
Undergraduate Research Opportunities
Program listing.
CS 422S Operating Systems Organization
Exploration of operating systems as resource managers. Using UNIX as a
conceptual framework, students study algorithms and data structures that
support essential operating systems services. Concepts are reinforced through
programming exercises and comparative studies. Topics include: process
scheduling, file systems organization, memory management, virtual memory,
device management, concurrent processes, and security.
CS 423S Computer Communications
An introduction to the principles and practice of communicating data. The
ISO-OSI layered model is introduced and used as a framework for examining
computer communication. Topics: physical aspects of reliable and efficient
transmission; protocol design and analysis; assessment of network performance;
datalink, routing and transport protocols. A small number of exercises
supplement lectures and provide experience with
computer communications programming.
CS 427A Special Topics in Real-Time Processing
(Same as EE 427A)
Microcontrollers and digital signal processors are often utilized in
applications such as communication systems, automotive control systems,
biomedical instrumentation, consumer appliances, and
industrial control systems. The purpose of this course is to examine a
variety of issues regarding the real-time application of embedded
microprocessor systems. Topics will include digital processing, the physics
of sensors and transducers, signal representation, system design and software
development. Classes will include lecture and laboratory sessions. Depending
on student interest, exemplary applications from the following list will be
studied: automotive control, biomedical instrumentation, communication
systems, speech processing, data compression, and audio and acoustic
processing.
CS 431S Translation of Computer Languages
The theory of language recognition and translation
is introduced in support of compiler construction for
modern programming languages. Topics include syntactic
and semantic analysis, symbol table management, code
generation, and runtime libraries. A variety of parsing
methods is covered, including Earley's algorithm, LL(k),
SLR(k), and LR(k). Machine problems
culminate in the course project, for which students
construct a working compiler.
CS 441T Advanced Algorithms
Provides a broad coverage of fundamental algorithms. The core set of
topics studied includes: median finding algorithms, dynamic
programming, greedy algorithms, computational geometry, linear
programming and basic duality theory, NP-completeness and
reducibility, approximation algorithms, parallel computation,
randomized algorithms, and an introduction to cryptography.
CS 447T/CS 547T Algorithms for Computational Biology
The computer scientist interacts increasingly with the biologist, as
computation plays an ever increasing role in how biologists view, formulate,and solve problems in molecular biology.
In this course we examine algorithms relevant to studies in
molecular biology. Topics include DNA sequence comparison,
protein modeling, DNA fragment assembly, and construction of evolutionary
trees. For each area of study, we first summarize
the relevant biological background;
we then study
algorithms in computer science that are appropriate for application
in the given area.
We study both the complexity of such algorithms as well as their effectiveness
in solving real problems in molecular biology.
While the course will not necessarily require programming,
an optional programming project will be allowed in lieu of other course work.
CS 453A Computer Graphics
Introduction to computer graphics. Input, representation, manipulation, and
display of geometric information. Two-dimensional display of three-dimensional
objects: perspective, hidden surface, shading, animation. Display and input
devices. Issues in designing interactive graphics systems. Issues in building
standard graphics packages. Students solve problems using interactive graphics
with a standard graphics package and using various graphics input and output
devices.
CS 455 Programming Systems and Languages
A comparative study of programming languages: von Neumann-type, functional,
and logical programming languages. Conceptual foundation, syntax, semantics
(e.g., denotational, axiomatic, and operational), and implementation. Run-time
structures required to support various language features such as data types,
operations, flow of control constructs, exception handling, visibility rules,
subprograms, concurrency, etc. Ada, LISP, and Prolog are used for illustration
purposes and in assigned problems.
CS 456 Software Engineering Workshop
State-of-the-art, industrially-tested, object-oriented techniques are
presented, illustrated on small example, and applied to realistic problems.
The objective of the course is to develop an understanding of the technical
and organizational complexities involved in system design and to teach
key concepts and techniques used to manage these complexities.
The students are required to design a complex computer-based system
through team effort.
The project makes use of a fictional customer problem and covers
the principal system life-cycle phases: requirements generation, system
design, and software design.
The target system is complex involving distributed processing, user interfaces,
and real-time constraints.
Issues such as human factors, performance, operation costs, and
maintainability are addressed and resolved in a reasonable manner.
Emphasis is placed on emulating the realities of an industrial organization.
CS 462M Digital Computers III: Computation Structures
(Same as EE 462M)
Introduction to ALU design: addition, subtraction, multiplication, and division.
Direct and iterative approaches for multiplication, including Wallace trees.
Synchronization. Introduction to modern design methodologies.
Students use a commercial CAE/CAD system for schematic capture and
simulation while designing a selected computation system.
CS 465A Numerical Methods
(Same as SSM 465A)
Introduces current numerical methods: iterative methods, roots of polynomials,
interpolation, numerical differentiation and integration, numerical solution
of ordinary differential equations, application to numerical solution of
physical and engineering problems.
CS 467A Management Information Systems I
Introduction to the use of computing and information systems in organizations
and to problems of analysis, design, implementation, and management of
information systems. The role of technology and the organizational forms and
processes needed to effectively apply technology in organizations is
contrasted with the role of management and staff in directing and guiding
information systems activities. The use of advanced systems development
technologies such as application generators complements material on systems
design, control, database methods, and systems organization.
CS 468A Management Information Systems II
The design and implementation of computer-based information systems with
emphasis on database and transaction aspects of large-scale information
systems. The basics of database management, including data storage structures
and large-file manipulations. Architecture of relevant database management
systems. Database administration; data administration. A familiarization with
COBOL is used to introduce information systems, implementation strategies, and
transaction processing. Fourth-generation transaction processing systems are
used to illustrate current directions in large corporate computer
organizations. Data analysis; data models, database design, transaction
systems design; design and implementation strategies.
CS 493-494 Senior Project
Implementation of a substantive project on an individual basis, involving one
or more major areas in computer science. Problems pursued under this framework
may be predominantly analytical, involving exploration and extension of
theoretical structures, or may pivot around the design/development of
solutions for particular applications drawn from areas throughout the
University and/or community. In either case, project serves as a focal point
for crystallizing the concepts, techniques, and methodologies encountered
throughout the curriculum. Students intending to take CS 493-494 must submit a
project proposal for approval by the Department during the spring semester of
the junior year.
CS 499 Undergraduate Honors Thesis
Working closely with a faculty member, the student investigates an original
idea (algorithm, model technique, etc.), including a study of its possible
implications, its potential application, and its relationship to previous
related work reported in the literature. Contributions and results from this
investigation are synthesized and compiled into a publication-quality research
paper presenting the new idea.
CS 500 Independent Study
CS 501S Advanced User Interface
CS 505 Introduction to Computing Tools for Research
Introduces the use of computer and network tools in support of individual
and collaborative graduate studies. Topics covered in lectures and labs:
structure of computing systems, electronic mail, World-Wide Web, text
editing, spreadsheets, symbolic mathematics, statistical analysis,
simulation, package libraries, scripting languages, and document
processing.
CS 506T Introduction to Computational Geometry
This course provides an introduction to the key concepts, problems,
and methods of Computational Geometry. The fundamental geometric
structures including Convex Hull, Voronoi Diagram, Delaunay
Triangulation and Arrangement are covered. The elements
of geometric searching are introduced through range searching
and the point location problem. Geometric data structures
such as Kd-Trees, segment trees, along with
some of their applications are presented. Other topics may
include polygon triangulation, geometric duality, shortest paths,
ray tracing, and matrix searching.
CS 507T Introduction to Formal Languages and Automata
An introduction to the mathematical theory of languages and
grammars. Topics include deterministic and nondeterministic
finite state machines, push-down automata, and Turing
machines; regular, context-free, context-sensitive and recursive
languages; closure properties of languages; the concepts of
computability and undecidability.CS 510A Artificial Intelligence Concepts
An introduction to the field of artificial intelligence
and the basic computational tools utilized.
Fundamental issues and concepts along with
historical and current trends in the field.
Skills in programming languages and methodologies
(e.g., logic, lisp, and prolog)
that support work in artificial intelligence are developed.
Topical surveys of knowledge engineering, cognitive science,
and other advanced topics in artificial intelligence
complete the course.
CS
511A
-512A Artificial Intelligence I, II
A study of what is required to produce
intelligent, human-like behavior in a computer system.
Topics include search algorithms, logical reasoning, knowledge representation,
strategy selection and the use of heuristic knowledge.
These basic methods are used to accomplish
fundamental tasks performed intelligently by humans such as
problem solving, game playing, natural language understanding,
vision, planning, and learning.
A variety of programming languages and paradigms are
discussed and illustrated.
Examples include rule-based programming, functional programming,
logic programming, and object-oriented programming.
CS 513A Applied Knowledge Engineering
Application of artificial intelligence techniques in a
significant prototype system. Techniques of knowledge acquisition,
knowledge codification, and
the general function of tools and shells in enhancing the work of
knowledge engineering are discussed.
Practical issues of knowledge representation
and of building expert systems
using various commercially available and other tools and shells
are addressed.
System prototyping methodologies and delivery vehicles are also presented.
This course requires a major student project for completion.
CS 514 Fundamentals of Computer Science
CS 515A Natural Language Processing
Study of techniques for computer processing of natural language.
Emphasis will be placed on syntactic processing, semantic
interpretation, and the study of discourse structure. Linguistic
models and formalisms relevant to this task will be discussed.
Additional topics will be selected from mechanical translation,
natural language queries to a database, response generation,
question-answering systems, story understanding, representation,
and connectionist natural language processing. Students are
expected to prepare and present research papers chosen from the
literature.
CS 516A Multiagent Systems
Multiagent systems research, a subfield of artificial intelligence,
studies the interactions of computational agents. These agents can
represent real world parties, and they can have different preference
structures. A key research goal is to design open distributed systems
in a principled way that leads to globally desirable outcomes even
though every participating agent only considers its own good and may
act insincerely. The course covers relevant results in AI, game
theory, market mechanisms, voting, auctions, coalition formation, and
contracting. Effects of different computational limitations of the
agents are discussed. Software tools for multiagent systems are
presented. The course is targeted to graduate students and
senior-level undergraduates. Non-AI students are also highly welcome.
Application examples are presented in networks, operating systems,
manufacturing, and logistics. Evaluation is based on presentations,
written and programming assignments, and a final project of each
student's choice.
CS 517T Mathematics of Algorithm Analysis
Mathematical tools and techniques used in analyzing algorithms
and data structures. Topics covered include general
combinatorics, generating functions, recurrence relations, rook
polynomials, and convergence of sequences. Concepts developed
include Catalan Numbers, Bernoulli Numbers, and Stirling Numbers
of the First and Second kind. The course will emphasize the
development of these tools and their application to the analysis
of algorithms and data structures.
CS 520A Intelligent Real-Time Systems
In many computer systems, it is not feasible (computationally) or
desirable (economically) to compute the "optimal" answer. This course
examines a variety of techniques that allow small quantities of
computational commodities - such as time, memory, or information - to
be traded for gains in the value of computed results. It covers both
theory and applications in such areas as combinatorial optimization,
multiagent systems, automated diagnosis and treatment, and information
gathering. Topics include: models for representing computational
limitations and tradeoffs, decision theory and rational choice, the
value of information, the deliberative vs. reactive debate, principles
of meta-reasoning, real-time search, memory-bounded search,
utility-directed search, deliberation scheduling (control of
reasoning), soft real-time, anytime algorithms, design-to-time
algorithms, dynamic planning and execution, reinforcement learning,
and evaluation of resource-bounded reasoning techniques.
CS 521M Computer Systems Organization
(Same as EE 560)
An exploration of the central issues in computer architecture:
instruction set design, addressing and register set design,
control unit design, microprogramming,
memory hierarchies (cache and main memories, mass storage, virtual
memory), pipelining, bus organization, RISC (Reduced Instruction Set
Computers), and CISC (Complex Instruction Set Computers).
CS 523S Operating Systems
Review of the standard operating system concepts: process and storage
management, file systems, and input/output. Overview of distributed
operating system. Interprocess communication models: message passing,
remote procedure call, and shared memory. Process management and
synchronization. Naming. Distributed and networked file system.
Deadlock detection and avoidance. Case studies of distributed operating
systems, such as MACH, Amoeba, Locus, and others.
CS 524S Advanced Topics in Networking
The course begins with a systematic study of techniques for improving
network performance. The prevalence of video and audio will require
the network to provide delay bounds and traffic isolation. We will
study current approaches to fair queuing and traffic reservation. We
will study current proposals for changing routing protocols to be
scalable while supporting multicasting and mobility. We will also
study current proposals for scalable reliable multicast and
fault-tolerance techniques. If time permits, we will study security
and accounting techniques that become important as the Internet becomes
used for and funded by commercial applications.
CS 528A Introduction to Robotics
The programming and control of robot manipulators and robot
manufacturing systems. Introduction to system organizations,
kinematic models, mathematics of world models. Sensors and sensor
interactions. Programming techniques, with examples from current
robot system languages. Model based and task oriented
specification of programs. Laboratory work with real and
simulated robot systems.
CS 529 Readings in Computer Science
This is a reading course designed to expose students to
computer science literature and prepare them for graduate
research in the Department. The course is organized around a set
of reading lists dealing with research topics of current interest
to the computer science faculty; these include parallel
algorithms, software engineering image processing, computer-aided
instruction, logic simulation, program verification, analysis of
algorithms, database normalization, distributed computing,
compiler design, VLSI circuit complexity. Several lists are
selected during each semester that the course is taught. Each
student is responsible for all the papers on one of the lists and
presents lectures on selected papers. Students must also write
short critical reviews of papers on their reading lists and write
a term paper, which may be either a survey or a research proposal.
CS 530A Information Systems and Database Design
A study of many different data models and database management systems that
support these data models. The design theory for databases is
developed and various tools are utilized to apply the theory to
case studies. General query languages are studied and techniques
for query optimization are investigated. Integrity and security
requirements are studied in the context of concurrent operations
on a database, where the database may be distributed over one or
more locations. The unique requirements for engineering design
databases, image databases, and long transaction systems are
analyzed.
CS 531S The Theory of Compiling and Language Translation
Algorithms and intermediate representations for automatic program analysis
are examined, with an emphasis on practical methods and
efficient engineering of program optimization and transformations.
The course includes a thorough treatment of monotone data flow
frameworks: a mathematical model in which most optimization problems
can be specified and solved.
The course primarily covers optimizations that are applicable
to any target architecture; however, optimizations specific to parallel,
distributed, and storage-hierarchical systems are also discussed.
CS 533S Design and Analysis of Protocols
The course is concerned with the design, specification, performance
analysis, and implementation of protocols used in existing and
emerging computer networks. Local and wide area network access
protocols, such as Carrier Sense Multiple Access/Collision Detect
(CSMA/CD), token access, X.25, and Q.93B. Internetworking with
Internet Protocol (IP). Frame-relay and Switched Multimegabit Data
Service (SMDS) as proposed internetworking solutions. Transport
protocols such as User Datagram Protocol (UDP), Transmission Control
Protocol (TCP), and TP4. Proposed high speed transport protocols such
as eXpress Transport Protocol (XTP), Netblt, and Versatile Message
Transport Protocol (VMTP). Host-network interfacing. Hardware and
software protocol implementation models.
CS 540T Formal Concepts in Computer Science
An introduction to the mathematical, logical, and linguistic
concepts that underlie the formal aspects of computer science. An
overview of naive set theory, propositional calculus and graph
theory. Comparison of different formalizations of algorithms.
CS 541T Network Algorithms and Programs
This course is concerned with the design and analysis of
efficient algorithms, focusing principally on algorithms for
combinatorial optimization problems. A key element in the course
is the role of data structures in algorithm design and the use of
amortized complexity analysis to determine how data structures
affect performance. The course is organized around a set of core
problems and algorithms, including the classical network
optimization algorithms, as well as newer and more efficient
algorithms. This core is supplemented by algorithms selected from
the recent technical literature.
CS 542T Analysis of Algorithms and Computational Complexity
Introduction to computational complexity, emphasizing the theory
of NP-completeness, Cook's theorem, polynomial time
reducibility, approximation algorithms, PSPACE and the polynomial
time hierarchy.
CS 545S Modular Programming
Modular programming and object-oriented programming in C++,
Modula-2, Smalltalk and Ada: Packages, modules, tasking, exception handling,
messages, classes, inheritance, and generic objects.
CS 549A Neural Networks I: Foundations
Introduction to neural computation. Fundamental concepts behind
various models of neural networks. Back-Propagation, Hopfield
Nets, and Boltzmann machines models will be covered in detail. We
will study neural networks as intelligent digital systems with
fine-grained parallelism. Potentials and limitations of neural
networks will be reviewed.
CS 550A Neural Networks II: Applications
A continuation of the foundations course, this course examines
current neural network research in several areas, for example,
memory, pattern recognition, reading, speech, and language.
Selected current papers are reviewed and tools for conducting
neural network experiments are presented and discussed. Issues of
parallel versus sequential processing, symbolic versus subsymbolic
systems, and distributed versus local representation are highlighted
and discussed.
CS 552A Advanced Computer Graphics
A survey of the current state of the art in computer graphics.
The emphasis will be on techniques used in the generation and
display of raster images. The fundamentals of raster graphics
will be discussed, including algorithms for scan-line generation,
hidden line and surface removal, shading and texturing, and
antialiasing. Advanced topics include: image synthesis (the
generation of graphical images with a realistic appearance),
real-time image generation, the development of new architectures
and implementations for graphics engines, and the use of human
factors analysis in designing graphical interfaces.
CS 554A Digital Image Processing
An introduction to the use of computers in the processing of
digital images. Topics to be discussed include: acquisition of
digital images, hardware and software for the display of digital
images, the role of visual psychophysics in image processing,
transform analysis and filtering, image restoration and
reconstruction, and pattern recognition. Frequent laboratory
exercises will be used to implement processing algorithms and
build intuition in evaluating image quality.
CS 555T Programming Language Theory
A formal treatment of programming languages-mathematical models
and practical implications. Formal definition of programming
languages: axiomatic, operational and denotational semantic
models. Models of concurrency and communication. Logical
verification of sequential and parallel programs. Proving
properties of recursive programs: fixpoint theory. Program
schemata.
CS 556M Principles of Digital System Interconnections
(Same as EE 556)
Characterization of computer links and networks used for inter-
and intra-digital system communication. Development of
functional, logical, and electrical parameters useful in both
application and design tasks. Generation of link models. Example
systems D including the PDP-11 Unibus, SUE bus, CAMAC Highway,
Macro-modules, Synchronous Data Link Control, IEEE Standard Bus,
and the ARPA net D will be employed for purposes of parameter
extraction, system comparison, and performance evaluation.
CS 557M Computer Systems Analysis
(Same as EE 557A)
Introduction to the basic tools of computer and communications
systems analysis and evaluation. Deterministic and stochastic
modeling concepts are presented. Queueing theory and discrete
event simulation methods are studied with application to a
variety of examples drawn from the computer and communications
performance evaluation literature. Topics of current interest
such as computer input/output models, mass memory, bus models,
and communications network models are discussed. A modeling project
is typically required.
CS 561T Graphs and Networks
Graphs, properties of graphs, and algorithms for extracting
information about graphs are studied. Graphs studied include:
simple graphs, directed and undirected graphs, tree, planar
graphs, bipartite graphs, Euler and Hamiltonian graphs; networks
and flow. Algorithms studied include: shortest path, minimal
spanning trees, min cut/max flow, and depth first and breath
first search. Concepts studied include: connectivity, edge and
vertex colorings, chromatic number, dual graphs, isomorphisms,
cut edges and vertices, and the use of graphs for solving
problems.
CS 563T Concurrent Algorithms: Shared Data
Concurrency presents programmers with unprecedented complexity
further exacerbated by our limited ability to reason about concurrent
computations. Yet, concurrent algorithms are central to the development
of software executing on modern multiprocessors or across computer networks.
This course reviews several important classes of concurrent
algorithms and presents a formal method for specifying, reasoning about,
verifying, deriving, and visualizing concurrent algorithms.
The selected algorithms are judged to have made significant
contributions to our understanding of concurrency.
Rigorous treatment of the design and programming process is emphasized.
A new feature of the course is the use of visualization tools to explore
and present concurrent programs.
Students entering this course must be familiar with predicate
calculus and sequential algorithms.
Upon completion of this course students will be able to reason
completely formally about small concurrent programs and to apply
systematically and correctly their formal skills to larger problems.
CS 564T Concurrent Algorithms: Message Passing
Distributed algorithms are the protocols by which computers in
a distributed system cooperate towards the solution of a problem.
Such algorithms must cope with unpredictable communication delays
and failures of network components. The first half of the course
will cover the theory of message passing distributed algorithms.
We will cover proof techniques, key concepts, useful building blocks,
and impossibility results. The second half of the course will use this
conceptual foundation to understand and design algorithms for real
systems. Examples from real systems will be used as case studies.
Upon completion of this course, students will have a deeper insight
into both distributed algorithms and distributed systems; they
should be able to translate this insight into designing real world
solutions to problems in distributed computing.
CS 565A Parallel Numerical Methods
A review of numerical methods on parallel computers. Synchronous
parallel algorithms for the solution of linear algebraic
equations, eigenvalue problems, and linear least-squares problems.
Asynchronous iterative methods for the solution of nonlinear
equations. Some applications of parallel computation in signal
processing and other areas of engineering.
CS 566M Systems Simulation: Continuous and Discrete Systems
(Same as EE 566)
Computer Modeling and simulation of continuous and discrete event systems.
Topics include the architecture of sequential and parallel simulators,
Monte Carlo methods and solving queueing and discrete event systems,
analysis of simulation output, and numerical integration techniques for
solving differential equations.
CS 567T Queueing Systems and Discrete Stochastic Processes
(Same as EE 536 and SSM 576)
This course corresponds to a comprehensive, self-contained introduction
to discrete stochastic processes.
A brief coverage is first given on Markov chain, Markov process, and
Poisson process.
Various single-server queueing systems are investigated with their
waiting time, occupancy, and other performance characteristics
fully investigated.
Multi-server queueing systems in the form of networks are addressed and their
behaviors in product forms and in non product forms are studied.
Some approximation and equivalence techniques are introduced such
as Norton Theorem, reversibility, and truncation method.
Applications to communication, manufacturing and computer systems are shown.
Depending on the instructor, students in this class may be
required to do a project.
CS 576S Distributed System Design: Models and Languages
The goal of the course is to familiarize students with basic concepts,
associated models, and current trends in distributed computing.
The design of concurrent and distributed systems is an area that
is still in its formative stage.
A multitude of models, languages, and methodologies have been put
forth by both researchers and practitioners but no dominant approach
has emerged so far.
The course starts with a review of a broad range of models of concurrent
computation and communication including:
shared variables, data flow, object-oriented systems, indeterminate
applicative systems, models using synchronous message exchanges,
and shared dataspace.
The objective of the survey is to identify fundamental issues and
alternate treatments of these issues both from the theoretical
and practical perspective.
The second part of the course focuses on specialized areas of
growing import to the field.
They include well-established ones such as real-time processing
and security as well as newly emerging concerns such as mobile computing
and multimedia.
CS 577M - 578M Design and Analysis of Switching Systems I, II
(Same as EE 577-578M)
Switching systems are central components in large communication
systems. This course is concerned with the design of practical
switching systems and analysis of their performance and
complexity.
CS 577M focuses on Asynchronous Transfer Mode (ATM) switching systems,
surveying a variety of architectural alternatives and comparing them
on the basis of performance and complexity.
It also covers engineering considerations in classical space division
and time division switching systems.
CS 578M concentrates on analytical methods for switching systems
for both point-to-point and multipoint switching analysis of blocking
and queueing in switching systems and congestion control issues
in ATM networks.
CS 579M Parallel Architectures and Algorithms
(Same as EE 579)
A number of contemporary parallel computer architectures are
reviewed and compared.
The problems of process synchronization and load
balancing in parallel systems are studied. Several selected
applications problems are investigated and parallel algorithms
for their solution are considered. These will include solution of
sets of algebraic and ordinary differential equations, selected
types of partial differential equations, problems in linear
algebra, Monte Carlo problems and problems in discrete event
simulation.
Some parallel algorithms will be implemented using a real
parallel programming environment.
CS 580S Special Topics in Tools for Parallel Programming
This course focuses on research issues in tool development and will
emphasize the role of visualization in the development and use of
these tools.
Topics will include overviews of message passing and shared variable
programming paradigms, commercial and research tools and issues in
the development of tools for design and specification, performance
evaluation, debugging, and program understanding.
CS 582T Computational Learning Theory
Building machines that learn from experience is an important research
goal of artificial intelligence. The area of computational
learning theory strives to define formal mathematical models of
machine learning that enable rigorous analysis of the performance and
efficiency of learning algorithms.
In this course we study the most prominent learning models used
in computational learning theory with a focus on the PAC model.
Within these models we will study the commonly used algorithm design
and analysis techniques. The primary goal of the field is to
determine what is efficiently learnable. For some problems we
present learning algorithms that are efficient in their use of both
time and data. Contrasting these positive results, for some problems
we present hardness results indicating that no efficient learning
algorithm exists. We also explore how the difficulty of the
learning task changes as the learner is provided with the ability to
perform experimentation. We also look at the situation in
which the data are noisy.
CS 585S Software Project Management
An introduction to the issues and basic methods used in managing software
development projects. The course will include factors affecting software
projects, life-cycle models, project scheduling, size and staffing,
progress tracking, software metrics, managing people, and crisis
management. The course will include lectures, hands-on training in selected
project managment tools, and case studies. In addition, each student will
plan and manage a simulated software project. The course is designed to
familiarize software engineers and computer scientists to the issues and
problems involved in managing software projects.
CS 592A Digital Representation of Signals
(Same as EE 592)
This course addresses the representation of real-world analog
signals in digital forms,
describes network interfaces for the digital transmission of such signals,
and is intended to give students a broad
introduction to the subject followed by practical illustration of
the basic concepts. Analog signals of differing characteristics,
such as the electrocardiogram, voice, audio, images, and video
are considered, and appropriate digitizing and coding techniques
for network transmission
are described. Both lossless and lossy coding for data
compression are covered as is the reconstruction of analog
signals that approximate the original signal. Existing standards
for data compression and transmission will be studied,
with emphasis on the basic concepts leading to such standards.
CS 593A Signalling and Control in Communication Networks
(Same as EE 593)
The operation of modern communications networks is highly
dependent on sophisticated control mechanisms that direct the
flow of information through the network and oversee the
allocation of resources to meet the communication demands of end
users. This course covers the structure and operation of modern
signaling systems and addresses the major design trade-offs that
center on the competing demands of performance and service
flexibility. Specific topics covered include protocols and
algorithms for connection establishment and transformation,
routing algorithms, overload and failure recovery and networking
dimensioning. Case studies provide concrete examples and reveal
the key design issues.
CS 595 Networking and Communications Design Project I
CS 596 Networking and Communications Design Project II
CS 598 Master's Project
Students electing the project option for their master's degree
perform their project work under this course.
CS 599 Master's Thesis Research
Prerequisite: permission of adviser. Credit to be arranged.
CS 600 Independent Study
CS 670 Research Seminar on Algorithms and
Computational Complexity
This seminar is intended for students interested in research in
analysis of algorithms and computational complexity. Of particular
interest are the design and analysis of efficient algorithms to
effectively solve NP-complete problems. Examples of such problems are
the matrix bandwidth minimization problem, the graph coloring problem,
the shortest common matching string problem, and the Steiner tree
problem.
CS 672 Research Seminar on Visual Programming
This seminar investigates the possibilities and limitations of visual
icon-driven programming languages. Specific topics are (1) formal
specification of two-dimensional languages, their grammar, parsing
algorithms, and semantics, (2) visual representation of programming
concepts such as recursion, concurrency, iteration, abstract data
types, and exceptions, (3) declarative programming in visual
programming languages, i.e., visualization of functional programming
(Picture LISP) and logic programming (Picture Prolog).
CS 673 Research Seminar on Distributed System Design
The theme of this seminar is the ability to factor into the modelling
analysis and verification of distributed systems, the impact of the
operating system and hardware organization on the distributed
application software. The focus is on the formal treatment of
methodological issues relating to distributed systems design.
CS 674 Research Seminar on Artificial Intelligence
This seminar is intended for students interested in conducting
research in the field of artificial intelligence. Each semester is
devoted to an in-depth study of one topic, primarily by detailed
reading of current research papers.
CS 678 Research Seminar on Programming Languages
In this seminar we will examine the design, use, and support of the Java
programming language, both as a vehicle for delivering applications over
networks and as a stand-alone programming language. While covering the
basic aspects of the Java programming language, and including labs that
exercise such knowledge, the class will emphasize Java in the evolution
of object-oriented languages. Support issues such as separate compilation,
bytecode verification, and run-time support of objects will be discussed.
CS 679 Research Seminar on Multimedia Networking
(formerly
CS 675 High Speed Communications)