Stanford University Computer Science
Courses by Category
Area 1 Introduction to Computer
Science
Area 3 Artificial Intelligence
Area 6 Mathematical Foundations of
Computing
Area 8 Typography and Computational
Models of Language
The Courses
103A. Discrete Mathematics for Computer Science-Covers the fundamental mathematical foundations required for serious study of computer science. Topics include logic, relations, functions, basic set theory, proof techniques, combinatorics, recursion, and recurrence relations.
103B. Discrete Structures-Continuation of 103A. Topics include analysis of algorithms, mathematical formulations of basic data models (linear models, trees, graphs, and sets), regular expressions, grammars. Corequisite: 106B or 106X.
106A. Programming Methodology-For students in technical disciplines; no prior experience is assumed. Broad introduction to the engineering of computer applications, emphasizing software engineering principles: design, decomposition, information hiding, procedural abstraction, testing, and reusable software components. Uses the programming language C and concentrates on the development of good programming style and on understanding the basic facilities provided by the language. Alternatives: 105, 106X. GER:2b (DR:6)
106B. Programming Abstractions-Abstraction and its relation to programming. The software engineering principles of data abstraction, modules, certain fundamental data structures (e.g., stacks and queues), and data-directed design. Recursion and recursive data structures (linked lists and binary trees). Brief introduction to time and space complexity analysis. Prerequisite: 106A or consent of the instructor, based on prior exposure to ANSI C. GER:2b (DR:6)
107. Programming Paradigms-Introduces a variety of programming language paradigms and their implementations. Topics: structure and implementation of compiled languages, basic concurrent programming, the functional paradigm, and the object-oriented paradigm. Substantial programming projects. Prerequisite: 106B or 106X.
108. Object-Oriented Systems Design- Software design and construction in the context of large OOP libraries. May be taught in C++ or Java. Topics: review of OOP, the structure of Graphical User Interface (GUI) OOP libraries, GUI application design and construction, OOP software engineering strategies, approaches to programming in teams. Prerequisite: 107.
109. Introduction to Computer Science-The mathematical and theoretical foundations of computer science. Topics: logic, proof techniques, recursion and recurrence relations, analysis of algorithms, combinatorics, basic data models (sets, relations, linear models, trees and graphs), and introductory computer theory. Prerequisite: 106B or 106X. GER:2b (DR:6)
110. Introduction to Computer Systems and Assembly Language Programming-Organization of digital computers, buses, registers, processors, I/O, memory systems, and paged memory. Data representation, data structures, and computer arithmetic. Instruction sets and execution; addressing modes. Assembly language programming, including subroutines, co-routines, interrupts, and traps. Operating systems issues and principles of storage management; combines general principles and practice in implementations.
112. Computer Organization and Design-(Enroll in Electrical Engineering 182.)
Electrical Engineering 182 Computer Organization and Design-Basic computer organization. Computer components: memory systems including caches, computer arithmetic, processors, controllers, input/output, buses, DMA. Data formats, addressing modes, instruction sets, and microcode. Study of the design of a small computer.
211. Logic Design-(Enroll in Electrical Engineering 275.)
Electrical Engineering 275 Logic Design-Principles and techniques of logic design. Combinational analysis (hazard detection); combinational circuit design including PLA, VLSI, and MSI techniques and testing techniques; IC logic families, flipflop properties, sequential circuit analysis and synthesis for fundamental and pulse mode circuits, design for testability techn9iques.
212. Computer Architecture and Organization-(Enroll in Electrical Engineering 282.)
Electrical Engineering 282 Computer Architecture and Organization-The structure of systems using processors, memories, input/output devices, and I/O interfaces as building blocks. Computer system instruction set design and implementation, including memory hierarchies and pipelining. Issues and tradeoffs involved in the design of computer system architectures with respect to the design of computer system architecture with respect to the design of instruction sets.
312. Processor Design-(Enroll in Electrical Engineering 382.)
Electrical Engineering 382 Processor Design-Cycle time, area tradeoffs, AT measures of arithmetic units, multiple issue processors, vector and multimedia extensions, shared memory multiprocessors, I/O systems. Design using queuing analysis.
315A. Parallel Computer Architecture and Programming-The principles and tradeoffs in the design of parallel architectures. Emphasis is on naming, latency, bandwidth, and synchronization in parallel machines. Case studies on shared-memory, message-passing, dataflow, and data-parallel machines illustrate techniques. Architectural studies and lectures on techniques for programming parallel computers. Programming assignments on one or more commercial multiprocessors. Prerequisites: Electrical Engineering 282, and reasonable programming experience.
315B. Parallel Programming Project-Continuation of 315A. A significant parallel programming project is required using shared-memory, message-passing, or data-parallel machines. Lectures on parallel programming languages and their implementation, performance debugging of parallel programs, parallel data structures and algorithms. Prerequisite: 315A or consent of instructor.
316A. Logic Synthesis of VLSI Circuits-(Enroll in Electrical Engineering 318.)
Electrical Engineering 318 Logic Synthesis of VLSI Circuits-Solving logic design problems with CAD tools for VLSI circuits. Analysis an design of exact and heuristic algorithms for logic synthesis. Topics: representation and optimization of combinational logic functions (encoding problems, binary decision diagrams), representation and optimization of multiple level networks (algebraic and Boolean methods, "don't care" set computation, timing verification, and optimization), modeling and optimization of sequential functions and networks (retiming), semicustom libraries and library binding.
316B. Computer-Aided System Design Laboratory-(Enroll in Electrical Engineering 319.)
Electrical Engineering 319 Computer-Aided System Design Laboratory-Computer-aided design of VLSI systems: theory and practice. Topics: modeling languages (e.g. Verilog), high-level synthesis and optimization methods (scheduling, binding, data-path, and control synthesis), design of systems with low-power consumption, and hardware/ software co-design. Individual/group projects involve the use of CAD tools.
317. Fault Tolerant Computing Systems-(Enroll in Electrical Engineering 489.)
Electrical Engineering 489 Fault Tolerant Computing Systems-Basic considerations in the design of reliable computing systems. Concurrent checking techniques. Redundancy and evaluation methods. System considerations. Examples of specific system designs.
318. Testing Aspects of Computer Systems-(Enroll in Electrical Engineering 488.)
Electrical Engineering 488 Testing Aspects of Computer Systems-The fundamental principles of testing computer systems and designing for testability. Failure and fault models. Deterministic and probabilistic techniques of test generation and testing. Techniques for testing memories and microprocessors. Design for testability.
319. Topics in Digital Systems-Advanced material is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. See Time Schedule for topics currently being offered.
510. Digital Systems Reliability Seminar-(Enroll in Electrical Engineering 385A.)
Electrical Engineering 385A Digital Systems Reliability Seminar-Student/faculty discussion of research problems in the design of reliable digital systems. Areas: fault-tolerant systems, design for testability, and system reliability. Emphasis on student presentations and Ph.D. thesis research.
121. Introduction to Artificial Intelligence-Introduction to the history, literature, and fundamental concepts of artificial intelligence (AI), from elementary reactive systems to increasingly complex artificial "agents." Topics: production systems, neural networks, genetic programming, computer vision, heuristic search, logic, knowledge representation and reasoning, Bayes networks, automatic planning and multi-agent communication. Focuses on ideas rather than applications. Prerequisite: fundamental knowledge of computer science as covered in 103 or 109. Recommended: facility with differential calculus, vector algebra and probability theory. Only one of 121 or 221 counts towards CS degree requirements. Students intending further work in AI should take 221.
221. Artificial Intelligence: Principles and Techniques-Broad technical introduction to core concepts and techniques in artificial intelligence. Topics: search, planning, knowledge representation, managing uncertainty, machine learning, neural networks, vision, robotics, natural language understanding, and intelligent architectures. Prerequisites: 103 or 109, 157 or Philosophy 160A, and exposure to basic concepts in probability. Only one of 121 or 221 counts towards CS degree requirements.
222. Knowledge Representation-Declarative knowledge representation methods in artificial intelligence. Topics: time and action, nonmonotonic logics, causality, inheritance and description logics, ontologies, contexts, knowledge reformulation, multiple views, abstraction, deduction vs. abduction, knowledge and other mental attitudes. Prerequisites: basic familiarity with logic. Recommended: prior exposure to artificial intelligence as in 121/221.
223A. Introduction to Robotics-Topics: manipulator kinematics and inverse kinematics; manipulator dynamics, motion, and force control; motion planning and robot programming. Recommended: knowledge of matrix algebra.
223B. Introduction to Computer Vision-Fundamental issues and techniques of computer vision. Image formation, edge detection and image segmentation, stereo, motion, shape representation, recognition. Project or final. Prerequisite: 205 or equivalent.
224M. Multi-Agent Systems - Covers various aspects of extending AI theories and techniques from the single-agent case to the multi-agent (MA) case. Topics: MA knowledge representation, MA planning, MA reasoning under uncertainty, MA learning, coordination mechanisms, and automated negotiation. Aimed at advanced undergraduate and masters levels, though PhD students interested in the area will find it relevant as well. Emphasis on representation techniques and algorithms, the former drawn from logic, decision theory, and game theory. There will be no programming assignments. Students should be prepared that there exists no textbook on the topic, and that this is the first time the course is being taught. Prerequisites: Knowledge of basic probability theory, first-order logic, and algorithms.
224N. Natural Language Processing --- Develops in-depth understanding of both the algorithms available for the processing of linguistic information and the underlying computational properties of natural languages. Morphological, syntactic, and semantic processing from both a linguistic and an algorithmic perspective. Focus on modern quantitative techniques in NLP: using large corpora, statistical models for acquisition, disambiguation, and parsing. Examination and construction of representative systems. Prerequisites: 121/221 or Ling 138/238, and programming experience. Recommended: basic familiarity with logic and probability. 3 units, Spr (Manning)
225A. Experimental Robotics-(Formerly 225.) Hands-on experience with robotic manipulation and navigation systems. Topics: kinematic and dynamic control of motion, compliant motion and force control, sensor-based collision avoidance, motion planning, assembly planning, task specifications, and robot-human interfaces. Limited enrollment. Prerequisite: 223A.
225B. Robot Programming Laboratory-(Formerly 224.) Hands-on introduction to the techniques of robot programming for robotics and non-robotics students. Series of guided exercises in which students program mobile robots to exhibit increasingly complex behavior (simple dead reckoning and reactivity, planning and map building, communication and cooperation). Topics: basics of motor control and sensor characteristics; sensor fusion, model construction, and robust estimation; control regimes (fuzzy control and potential fields); active perception; reactive planning architectures; various topics in sensor-based control, including vision-guided navigation. Student programmed robot contest. Programming is in C on Unix or Windows machines; course work done in teams. Prerequisites: 205 or equivalent, C programming ability.
226. Knowledge-Based Systems and Applications-Knowledge-based (expert) system technology is the most widely-used application technology to emerge from AI. Topics: basics of KBS and ES; tech transfer from research to industry; knowledge engineering, KB programming, knowledge acquisition methodology; evolution of the technology as applied to business and government problems, current and future impact. Case studies, readings. System building project possible. Some guest lectures.
227. Reasoning Methods in AI-Technical presentation of algorithmic techniques for problem solving in AI. Combines formal algorithmic analysis with description of recent applications. Topics: search and real-time search, constraint satisfaction, planning, robot motion planning, logical deduction, abstraction and approximation. Focus is on recent results. Prerequisites: familiarity with the basic notions in data structures and design and with techniques in design and analysis of algorithms. Recommended: previous or concurrent course in AI.
228. Reasoning under Uncertainty-Modeling (knowledge representation) languages suitable for dealing with an uncertain world, algorithms for reasoning and decision making using these representations, and learning these representations from data. Focus is on graphical modeling languages such as Bayesian belief networks, extensions to temporal modeling using hidden Markov models and dynamic Bayesian networks, and extensions to decision making using influence diagrams and Markov decision processes. Recent applications to domains (speech recognition, medical diagnosis, data mining, statistical text modeling, and robot motion planning). Prerequisites: understanding of basic concepts in probability theory and in design and analysis.
229. Machine Learning-Survey of major research areas in pattern recognition and machine learning. Topics: the foundations of statistical pattern recognition, parametric and non-parametric learning, decision trees, Bayesian and neural networks, reinforcement learning, genetic algorithms, computational learning theory. Focus on the underlying concepts and the role of machine learning in AI and other disciplines. Representative systems. Prerequisites: 221 or consent of instructor, and ability to write computer programs in one or more commonly used languages.
320. Interactivity, Narrative, and Artificial Intelligence-Theory of and approaches to interactive narrative systems, especially those that incorporate artificial intelligence techniques. Invited lecturers, discussion readings, critical review of CD ROM titles and other implemented systems. Students create prototypes of AI-based interactive story systems.
323. Common Sense Reasoning in Logic-Formalizing common sense knowledge and reasoning using situation calculus with nonmonotonic logics, especially circumscription. Variations of situation calculus. Formalizing context. Formalizing facts about knowledge. Prerequisite: basic knowledge of logic such as 157, or Philosophy 160A.
326A. Motion Planning-For students interested in computer graphics, geometrical computing, robotics, and/or artificial intelligence. Computing object motions is central to many application domains (e.g., design, manufacturing, robotics, animated graphics, medical surgery, drug design). Basic path planning methods generate collision-free paths among static obstacles. Extensions include uncertainty, mobile obstacles, manipulating movable objects, and maneuvering with kinematic constraints. Configuration space is a unifying concept, geometric arrangements are a basic combinatorial structure. Theoretical methods with applications in various domains: assembly planning, radiosurgery, graphic animation of human figures.
327A. Advanced Robotic Manipulation-Topics: redundant manipulators, robot motion/force control; kinematic singularities; inertial properties, dynamic performance, and robot design; macro/mini manipulator systems; mobile manipulator platforms; cooperative robots; sensor-based primitives, artificial potential field and force strategies. Prerequisites: 223A, consent of instructor.
328. Topics in Computer Vision-Fundamental issues of, and mathematical models for, computer vision. Sample topics: camera calibration, texture, stereo, motion, shape representation, image retrieval, experimental techniques. Student papers and project. Prerequisites: 205, 223B, or equivalents.
329. Topics in Artificial Intelligence-Advanced material is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. For spring quarter 1999-2000, students should enroll in Psychology 224 "Learning and Inference in Humans and Machines".
426. Genetic Algorithms and Genetic Programming-The genetic algorithm is a domain-independent algorithm for search, optimization, and machine learning patterned after Darwinian natural selection and naturally occurring genetic operators such as recombination, mutation, gene duplication, gene deletion, gene regulation, and embryonic development. Genetic programming is a domain-independent automatic programming technique that extends the genetic algorithm to the breeding of populations of computer programs. Topics: introduction to genetic algorithms and genetic programming; mathematical basis for genetic algorithms; implementation on parallel computers and field-programmable gate arrays; evolution of machine language programs; applications to problems of system identification, control, classification, analysis of genome and protein sequences, and automatic synthesis of the design of topology, sizing, placement, and routing of analog electrical circuits.
523. Readings in Artificial Intelligence-Primarily for students planning to take the AI qualifying exam. A series of lectures and discussions on readings in all areas of artificial intelligence research. Prerequisite: 221.
525. Seminar on Knowledge Acquisition for Expert Systems-(Enroll in Medical Information Sciences 230.)
528. Graphics/Geometry/Vision/Robotics Seminar-Weekly series of informal research talks on topics related to perceiving, modeling, manipulating, and displaying the physical world. The computational models and numerical methods underlying these topics. Brings together faculty and students in these five closely related areas. (AU)
137. Introduction to Scientific Computing-The fundamental issues of numerical computation for the mathematical, computational, and physical sciences, and engineering. Emphasis is from the perspective of the computer scientist. Use of numerical algorithms in engineering practice. Problems of accurately computing solutions in the presence of rounding errors and of computing discrete approximations of solutions which are defined on the continuum. The taxonomy of problem classes with methods for their solution and principles useful for analysis of performance and algorithmic development. Topics: error analysis, the solution of linear and nonlinear equations, interpolation and numerical differentiation, the approximation of integrals, and the solution of differential equations. Prerequisites: 106A; Math. 103 or 113 or equivalents.
138. Matlab and Maple for Science and Engineering Applications-Introduction to use of Matlab and Maple in engineering applications. Emphasis is on the use of software to solve real problems; limited background on how the algorithms work, primarily so user may understand their possible limitations. How to use packages to solve a variety of introductory but important problems in: linear systems, eigenvalue problems, ordinary differential equations, elementary statistics, elementary signal processing (Fourier transforms, wavelets), computer algebra, graphical interfaces. Applications for the engineering and physical sciences. Prerequisites: undergraduate linear algebra and a willingness to program.
237A. Numerical Linear Algebra-This course is the first in a three-quarter graduate sequence designed to acquaint students in mathematical and physical sciences and engineering with the fundamental theory of numerical analysis. Solution of systems of linear equations: direct methods, error analysis, structured matrices; iterative methods and least squares. Parallel techniques. Prerequisites: 106A, 137, Math. 103 or 113.
237B. Numerical Solution of Initial Value Problems-Linear multistep methods and Runge-Kutta methods for ordinary differential equations: zero-stability, A-stability, and convergence. Differential algebraic equations. Parabolic partial differential equations: stability, convergence and qualitative properties. Hyperbolic partial differential equations: stability convergence and qualitative properties. Prerequisites: Math. 130, 131.
237C. Numerical Solution of Boundary Value Problems-Elliptic partial differential equations: finite difference, finite element and spectral methods. Iterative methods for solution of resulting algebraic equations: SOR, fast Poisson solvers, domain decomposition, multigrid methods, and Newton iteration. Prerequisites: Math. 130, 131.
238. Parallel Methods in Numerical Analysis-Recent developments in parallel computer technology have made it necessary to reformulate numerical algorithms to exploit the full potential of this technology. Emphasis is on the different techniques for obtaining maximum parallelism in various numerical algorithms, especially those occurring when solving matrix problems and partial differential equations, and the subsequent mapping onto the computer. Implementation issues on parallel computers. Topics: parallel architecture, programming models, matrix computations, FFT, fast multiple methods, domain decomposition, graph partitioning. Prerequisite: 237A or Mechanical Engineering 200A, or consent of instructor. Recommended: familarity with differential equations, and experience in advanced programming language such as F90, C, C++.
336. Advanced Methods in Matrix Computation-Eigenvalue problems: perturbation theory, Lanczos method, Jacobi method. Parallel implementation. Singular value problems. Generalized eigenvalue problems. Polynomial equations. Prerequisite: 237A.
337. Numerical Methods for Initial Boundary Value Problems-Initial boundary value problems are solved in different areas of engineering and science modeling phenomena, e.g., wave propagation and vibration, fluid flow, etc. Numerical techniques for such simulations are discussed in the context of applications. Emphasis is on stability and convergence theory for methods for hyperbolic and parabolic initial boundary value problems, and the development of efficient methods for these problems.
339. Topics in Numerical Analysis-Advanced material is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. See Time Schedule for current topics.
530. Applied Mathematics/Scientific Computing Seminar
531. Numerical Analysis/Scientific Computing Seminar-(AU)
140. Operating Systems and Systems Programming-The fundamentals of operating systems design and implementation. Basic structure; synchronization and communication mechanisms; implementation of processes, process management, scheduling, and protection; memory organization and management, including virtual memory; I/O device management, secondary storage, and file systems. Prerequisite: 108. Recommended: Electrical Engineering 182.
143. Compilers-Principles and practices in the design of programming language compilers. Topics: lexical analysis, parsing theory (LL, LR, and LALR parsing), symbol tables, type checking, common representations for records, arrays, and pointers, runtime conventions for procedure calls, storage allocation for variables, and generation of unoptimized code. Students construct simple compiler as programming project. Prerequisites: 103 (or 109), 107.
145. Introduction to Databases-Object-oriented, entity-relationship, relational data models, and approaches to database design. Relational, object-relational, and object-oriented query languages. SQL and ODMG standards. Algebraic query languages and some database theory. Integrity constraints and triggers; functional dependencies and normal forms. Database transactions and security from the application perspective. Designing a database for an application. Interactive and programmatic interfaces to database systems. Individual database application programming project with extensive use of SQL. Prerequisites: 103 (or 109), 107.
147. Introduction to Human-Computer Interaction Design-Introduction to the concepts underlying the design of human-computer interaction: usability and affordances, direct manipulation, systematic design methods, user conceptual models and interface metaphors, design languages and genres, human cognitive and physical ergonomics, information and interactivity structures, design tools and environments. Structured around a set of case studies in which notable interface designs and/or projects are analyzed as illustrative of underlying principles. Students participate in discussions of cases and do weekly interface analysis and design exercises which do not require programming.
148. Introductory Computer Graphics-Introduction to two- and three-dimensional computer graphics. Topics: fundamentals of input and display devices, scan conversion of geometric primitives, two- and three-dimensional transformations and clipping, windowing techniques, curves and curved surfaces, three-dimensional viewing and perspective, hidden surface removal, illumination and color models, OpenGL, VRML, and 3-D modeling tools. Emphasis is on the development of practical skills in using graphics libraries and tools. Programming on Macintosh using C, OpenGL, and VRML, with demos in SoftImage. Prerequisites: 107, Math. 103. For undergraduates; M.S. students or students with a strong interest in continuing in graphics should take 248. Only one of 148 or 248 counts towords CS degree requirements.
240. Advanced Topics in Operating Systems-Advanced study in OS topics and exposure to recent developments in OS research. Readings/lectures on classic and new papers. Topics: virtual memory management, synchronization and communication, file systems, protection and security, operating system extension techniques, fault tolerance, and the history and experience of systems programming. Prerequisite: 140 or equivalent.
242. Programming Languages-The basic elements of programming languages and programming paradigms: functional, imperative, and object-oriented. Introduction to formal semantic methods. Modern type systems, higher-order functions and closure, exceptions and continuations. Runtime support for different language features. Emphasis is on separating the different elements of programming languages and styles. First half uses Lisp and ML to illustrate concepts; second half a selection of object-oriented languages. Prerequisite: 107, or experience with Lisp, C and some object-oriented language.
243. Advanced Compiling Techniques-The theoretical and practical aspects of building modern compilers. Topics: intermediate representations, basic blocks and flow-graphs, dataflow analysis, register allocation, global code optimizations, and interprocedural analysis. Prerequisite: 143 or equivalent.
244A. Introduction to Computer Networks-The structure and components of computer networks; functions and services; packet switching; layered architectures; ISO's Open Systems Interconnections (OSI) reference model; physical layer; data link layer; error checking; window flow control; media access control protocols used in local area networks (Ethernet, Token Ring, FDDI) and satellite networks; network layer (datagram service, virtual circuit service, routing, congestion control, IP); transport layer (UDP, TCP); session layer; applications.
244B. Distributed Systems-Distributed operating systems and applications issues, emphasizing high-level protocols and distributed state sharing as the key technologies. Topics: distributed shared memory, object-oriented distributed system design, distributed directory services, atomic transactions and time synchronization, file access, process scheduling, process migration and remote procedure call, focusing on distribution, scale, robustness in the face of failure, and security. Prerequisites: 240, 244A.
244C. Distributed Systems Project-Companion project option for students taking 244B. Corequisite: 244B.
245. Database System Principles-File organization and access, buffer management, performance analysis, and storage management. Database system architecture, query optimization, transaction management, recovery, concurrency control. Reliability, protection, and integrity. Design and management issues. Prerequisites: 145, 161.
247A. Human-Computer Interaction: Interaction Design Studio-Systematic presentation and experience with the methods used in interaction design, including needs analysis, user observation, idea sketching, concept generation, scenario-building, storyboards, user character stereotypes, usability analysis, and market strategies. Intended as preparation for project-based courses, such as 377 and 447/Mechanical Engineering 293. Prerequisite: 147 or Mechanical Engineering 101.
247B. Contextual and Organizational Issues in Human-Computer Interaction-(For 1999-2000 only, enroll in Industrial Engineering 205.) For students interested in the design of interaction between people and computers; all designers should benefit. Focus is on the contextual issues associated with designing and using computer interfaces and technology, providing insights into, experience with, and ways of understanding issues in work and consumer settings that influence the design of computer interfaces. Student teams work on projects to develop skills in: observing individuals and groups of people in context, using models of work and other activity to extend their design capabilities, identifying constraints and tradeoffs on designs within the context of use, and observing and working with people in interdisciplinary design groups. Prerequisite: 147 or Industrial Engineering 203, or consent of instructor.
248. Introduction to Computer Graphics-The fundamentals of input, display, and hardcopy devices, scan conversion of geometric primitives, 2D and 3D geometric transformations, clipping and windowing, scene modeling and animation, algorithms for visible surface determination, introduction to local and global shading models, color, and photorealistic image synthesis. Written assignments and programming projects. Prerequisites: 108, Math. 103. Only one of 148 or 248 counts towards CS degree requirements.
249. Object-Oriented Programming from a Modeling and Simulation Perspective-Object-oriented programming techniques and issues, emphasizing programming as modeling and simulation. Topics: large-scale software development approaches, encapsulation, use of inheritance and dynamic dispatch, design of interfaces and interface/implementation separation, exception handling, design patterns, minimalizing dependencies and value-oriented programming. The role of programming conventions/style/restrictions in surviving object-oriented programming for class libraries, frameworks, and programming-in-the-large; general techniques for object-oriented programming. Prerequisites: knowledge of C and basic programming methodology as developed in 106B or 106X; 107; basic knowledge of C++ (may be taken concurrently). Recommended: 193D.
341. Advanced Topics in Data Communication-Readings/discussion are combined with topical lectures to familiarize students with a core of classic and new papers in the field of data networking. Emphasis is on understanding and applying existing work to new problems in the field, especially high-speed networking. Classes alternate between discussion sections and lectures. Topics: network theory (the end-to-end argument), transport protocol performance (header prediction, checksum efficiency), cell relay (e.g., ATM and SONET), congestion control (Parekh's thesis, leaky bucket, fair queueing) and high-speed switching (input vs. output queueing, crossbars and banyans). Prerequisite: 244A.
342. Programming Language Design-Problems of programming language design and comparison of traditional solutions. Possible topics: formal semantics, implementation considerations, extensibility, very high level languages, evaluation of language designs, the innovative features of a variety of modern programming languages. Prerequisites: 242, 243.
343. Topics in Compilers-Advanced topics in compilers. Topics change every quarter; course may be taken repeatedly for credit. Prerequisite: 243.
344. Projects in Computer Networks-For students with a strong interest in computer networks from novel applications to physical layer coding schemes; software to hardware; theory to design-and-build. Teams of two complete a small research project of sufficient quality and interest to merit presentation at a conference, or to form the basis of a new business, e.g., studies of network traces, network traffic visualization tools, home-networking, analysis of performance of cable-modems, novel web applications, or novel router architecture. Enrollment limited to 30. Prerequisites: 244A; or Electrical Engineering 284 and 384. Recommended: 244B; and Electrical Engineering 384B or 384C.
345. Advanced Topics in Database System-Advanced topics in the area of database and information systems. Content differs in each offering; may be taken multiple times for credit. Prerequisite: 145.
346. Database System Implementation-A major database system implementation project realizes the principles and techniques covered in earlier courses. Students independently build a complete database management system, from file structures through query processing, with a personally designed feature or extension. Lectures on project details and advanced techniques in database system implementation, focusing on query processing and optimization. Guest speakers from industry on commercial DBMS implementation techniques. Prerequisites: 145, 245. Recommended: programming experience in C++.
347. Transaction Processing and Distributed Databases-The principles and system organization of distributed databases. Data fragmentation and distribution, distributed database design, query processing and optimization, distributed concurrency control, reliability and commit protocols, and replicated data management. Distributed algorithms for data management: clocks, deadlock detection, and mutual exclusion. Heterogeneous and federated distributed database systems. Overview of commercial systems and research prototypes. Prerequisites: 145, 245.
348A. Computer Graphics: Mathematical Foundations-The mathematical tools needed for the geometrical aspects of computer graphics. Fundamentals: homogeneous coordinates, transformations and perspective. Theory of parametric and implicit curve and surface models: polar forms, Bezier arcs and de Casteljau subdivision, continuity constraints, B-splines, tensor product, and triangular patch surfaces. Representations of solids and conversions among them. Geometric algorithms for graphics problems, with applications to ray tracing, hidden surface elimination, etc. Rudiments of wavelet theory and multi-resolution shape representations. Prerequisites: linear algebra and discrete algorithms.
348B. Computer Graphics: Image Synthesis Techniques-Intermediate level, emphasizing sampling, shading, and display aspects of computer graphics. Topics: local and global illumination methods including radiosity and distributed ray tracing, texture generation and rendering, volume rendering, strategies for anti-aliasing and photo-realism, human vision and color science as they relate to computer displays, and high-performance architectures for graphics. Written assignments and programming projects. Prerequisite: 248 or equivalent. Recommended: exposure to Fourier analysis or digital signal processing.
348D. Vision and Image Processing-(Enroll in Psychology 267.)
349. Topics in Programming Systems-Advanced material is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. See Time Schedule for topics currently being offered.
444A. Software Development for Critical Applications-Introduction to current methods for developing safety-critical software (e.g., fly-by-wire avionics); and mission-critical software (e.g., Internet commerce). Topics: basic terminology, failure and fault taxonomies, hazard analysis techniques, failure mode analysis, fault tree analysis, software standards, formal methods, testing requirements, fault tolerance, probabilisitic models, and engineering techniques for critical systems from embedded systems to large-scale Internet applications. Students apply analysis techniques to example systems, use tools for specification, and implement example algorithms and applications.
446. Tools and Processes for Software-The fundamental concepts of software engineering: life-cycle models (waterfall, spiral, etc.), project and software metrics, quality assurance, software reuse. The development process: business process modeling, requirements engineering, analysis, design, implementation, testing, maintenance. Introduction to modeling techniques (UML and design patterns). Research challenges, with reviews of ongoing research by faculty and outside speakers on such topics as specification validation and software composition. Readings and modeling exercises. Focus throughout is on large-scale software development as seen in industry. Part of class (UML, software development process) may be taken for one unit. Prerequisites: prior software experience; graduate standing or consent of instructor.
447. Interdisciplinary Interaction Design-(Same as Mechanical Engineering 293.) Small teams develop innovative technology prototypes that combine product and interaction design. Focus is on software and hardware interfaces, interaction, design aesthetics, and some underpinnings of successful design: a reflective, interactive design process, group dynamics of effective interdisciplinary teamwork, and working with users. Prerequisite: 247A.
448. Topics in Computer Graphics-In-depth study of an active research topic in computer graphics. Topic changes each quarter. Previous topics: exotic input and display technologies, modeling of natural phenomena, digital film making, media technologies for graphics and graphics architectures. Readings from literature and a project. May be taken repeatedly for credit. Prerequisite: 248 or consent of instructor.
448A. Interactive Workplaces -
448B. Motion Study: An Introduction to Animation, Cartoon Physics and Funny Walks -Hands-on animation course providing foundation for future work in Computer Graphics, Animation and Robotics. Students explore techniques, tools and methods used by traditional animators. These skills were developed by animation masters over nearly one hundred years of experimentation, artistry, research, and trial and error. Students complete five short exercises that allow them to develop their skills and play with the animation medium. Through lectures, hands-on exercises, motion analysis and screenings, students will learn about a variety of animation techniques and gain a basic control of timing, spacing, weight, lip-synch and visual design. One set of lectures and exercises, for example, will focus on the differences between physics and cartoon physics. Attention will be given to walks and what makes a walk believable. Students are given a method for looking at walks, analyzing them and creating an effective and expressive animated walk. No previous animation experience or drawing skills are needed. Preference to CS students with a graphics or animation specialization, and Art students from the Digital Arts program. Enrollment limited to 15.
540. Seminar on Computer Systems-(Enroll in Electrical Engineering 380.)
Electrical Engineering 380 Seminar on Computer Systems-Current research in the design, implementation, analysis and use of computer systems ranging from integrated circuits to operation systems and programming languages.
544. Mobile Computing Seminar-Weekly readings, discussions, and presentations on current research in mobile and wireless computing. Invited speakers from Stanford and elsewhere lecture on topics of current interest. Prerequisites: 240, 244B. (AU)
545. Database Research Seminar-Presentations of current research and industrial innovation in information systems, sponsored by Infolab faculty. Topics: fundamental database technology, digital libraries, knowledge-based processing and advanced applications. Interaction with speakers. (AU)
545I. Advanced Image Databases Seminar-Reading/demonstrations/analysis devoted to image and video databases as created by photographic, medical, and commercial sources. Emphasis is on combining image-derived and textual descriptors to retrieve on-line images. Issues: data structures and indexing schemes for real-time interaction, high-dimensional feature vectors for fast retrieval, metrics of closeness between query and stored vectors. Presentations by commercial and research image retrieval organizations illustrate the strengths and weaknesses of specific techniques. May be combined with a 395 project. (AU)
547. Human-Computer Interaction Seminar-Weekly speakers on topics related to human-computer interaction design. (AU)
548. Distributed Systems Research Seminar-Recent research in distributed operating systems, computer communications, parallel machines, parallel programming, and distributed applications. Invited speakers from Stanford and elsewhere present topics and results of current interest. (AU)
150. Introduction to Computer Theory for non-CS Majors-Continuation of 109 for non-CS majors. Introduction to the material covered in 154 and 161. Topics: computer theory, computability, data structures, analysis of algorithms and NP-completeness. Prerequisite: 109.
154. Introduction to Automata and Complexity Theory-Regular sets: finite automata, regular expressions, equivalences among notations, methods of proving a language not to be regular. Context free languages: grammars, pushdown automata, normal forms for grammars, proving languages non-context free. Turing machines; equivalent forms, undecidability. Nondeterministic Turing machines: properties, the class NP, complete problems for NP, Cook's theorem, reducibilities among problems. Prerequisite: 103 or 109.
154N. Introduction to NP Completeness-Turing machines: equivalent forms, undecidability. Nondeterministic Turing machines: properties, the class NP, complete problems for NP, Cook's theorem, reducibilities among problems. Students participate in approximately the last half of 154. Prerequisite: a knowledge of formal languages and automata as in the first part of 154.
156. Introduction to Verification and Concurrency-A taste of logic: propositional, predicate, temporal. Specification and verification of sequential programs: correctness and termination. Concurrent programming: communication and synchronization, principles and algorithms. Specification of concurrent programs: safety and progress. Verification of safety properties: invariants. Prerequisite: 103 or 109.
157. Logic and Automated Reasoning-Introduction to logic for computer scientists. An elementary exposition, from a computational point of view, of propositional logic, predicate logic, axiomatic theories, and theories with equality and induction. Interpretations, models, validity, proof. Automated deduction: polarity, skolemization, unification, resolution, equality. Strategies. Applications. Prerequisite: 103 or 109.
157L. Logic and Automated Reasoning Laboratory
255. Introduction to Cryptography and Computer Security-Intended for advanced undergraduates and graduate students. Introduction to the basic theory and practice of cryptographic techniques used in computer security. Topics: encryption (single-key and double-key), digital signatures, pseudo-random bit generation, authentication, electronic commerce (anonymous cash, micropayments), key management, zero-knowledge protocols. Prerequisite: basic understanding of probability theory.
256. Formal Methods for Concurrent and Reactive Systems-Formal methods for specification, verification, and development of concurrent and reactive programs. Reactive systems: syntax and semantics, fairness requirements. Specification language-temporal logic; state, future, and past formulas; deductive system. Hierarchy of program properties: safety, guarantee, obligation, response, persistence, and reactivity. Verification of programs: verification diagrams and rules, completeness. Modularity. Parameterized programs. Algorithmic verification of finite-state programs. Prerequisite: 157 or Philosophy 160A, or equivalent.
256L. Formal Methods for Concurrent and Reactive Systems Laboratory
257. Automated Deduction and its Applications-Proving theorems and extracting information from proofs. Uses in software engineering (program specification, synthesis, and verification) and artificial intelligence (commonsense and robotic planning, natural-language understanding). The foundations of logic programming. Deductive tableaux, nonclausal resolution, skolemization, building theories into unification and inference rules, term rewriting, inductive theorem proving. The design of theorem provers. Prerequisite: 157.
258. Introduction to Programming Language Theory-Syntactic, operational, and semantic issues in the mathematical analysis of programming languages. Type systems and non-context-free syntax. Universal algebra and algebraic data types. Operational semantics given by rewrite rules; confluence and termination. Scott-semantics for languages with higher-type functions and recursion. Treatment of side-effects. Prerequisites: 154, 157 or Philosophy 160A.
351. Topics in Complexity Theory and Lower Bounds-Focus is on one of: basic machine models and complexity measures-their properties and relationships, complexity classes and their properties, reductions and complete problems, concrete representative problems from important complexity classes. Techniques for establishing limits on the possible efficiency of algorithms, and concrete lower bounds based on the following models of computation: decision trees, straight line programs, communication games, branching programs, PRAMs, boolean circuits. Approximation algorithms and the complexity of approximations. Pseudo-randomness and cryptography. Prerequisite: 154, or equivalent.
352. Foundations of Control Structures-Theory of constructs for controlling program execution. Theories of serial control: verification conditions, partial correctness assertions, weakest preconditions, dynamic logic. Models of serial control: state functions and relations, regular expressions, dynamic algebras. Theories of parallel control: temporal logic, process algebra, CCS, CSP. Models of parallel control: state trajectories, synchronization trees, execution traces, partial orders, Petri nets, event structures, metric spaces, non-well-founded sets. Notions of time: ordered, real, probabilistic, linear, branching. Semantic equivalences. Structural operational semantics. Related soundness, completeness, and complexity issues. Prerequisite: 258 or consent of instructor.
353. Algebraic Logic-Algebraic methods relevant to computer science. Lattice theory: partial orders, monoids, closure systems, topologies, fixpoint theorems. Universal algebra: HSP, free algebras, equational theories, Birkhoff's theorem, completeness of equational logic. Algebras for logic: Boolean, Heyting, cylindric. Categories: limits, adjunctions, algebraic theories, enriched categories. Prerequisites: 157 or Philosophy 160A, 161, or equivalents.
354. Probabilistic Reasoning in Computing-The basics of (Bayesian) probability theory as applied to computing and intelligence systems. Emphasis is on working through applications and understanding relevant theory. Relevant probability theory and techniques: interpretations, graphical and network models, information theory, decision theory, inference, and "alternative" approaches. Probabilistic aspects of computational problems in learning, search, data analysis, neural, and dynamic systems. Some topics by guest lecturers. Prerequisites: 106B or X, 221, a knowledge of basic statistical measures as in Psychology 60, and basic math.
355. Advanced Topics in Cryptography-For graduate students. Topics: pseudo-random generation, zero knowledge protocols, elliptic curve systems, threshold cryptography, security analysis using random oracles, lower and upper bounds on factoring and discrete log. Prerequisite: 255.
356. Automatic Formal Verification Techniques-Automatic methods for formally verifying hardware, protocol, and software system designs. Topics: state graph and automata models of system behavior. Automata on infinite strings. Linear and branching-time temporal logic. Model-checking. Modeling real-time systems. Analysis methods based on Boolean formulas, and other ways of coping with the "state explosion problem." Exploiting abstractions. Applications to circuits, algorithms, and protocols. Case studies use a variety of verification tools. Prerequisite: 154 or 254. Recommended: good understanding of basic automata and complexity theory, and undergraduate-level background in computer science.
357. Topics in Formal Methods-Formal methods for the specification, verification, analysis, and systematic development of real-time and hybrid systems. Hybrid systems involve continuous changes and discrete transitions. Computational models: timed and phase transition systems, timed and hybrid automata. Specification: timed and hybrid statecharts, metric and hybrid temporal logics, duration calculus. Statecharts. Structured specification. Verification rules and diagrams. Refinement techniques. Algorithmic verification of finite-state systems. Advanced research topics. Prerequisite: 256 or equivalent.
358. Topics in Programming Language Theory-Possible topics of current research interest in the mathematical analysis of programming languages: structured operational semantics, domain theory, semantics of concurrency, rich type disciplines, problems of representation independence, and full abstraction. May be repeated for credit. Prerequisites: 154, 157, 258, or equivalents.
359. Topics in Theory of Computation-Advanced material is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. See Time Schedule for topics currently being offered.
559. Seminar on Mathematical Theory of Computation-Possible topics (vary each year): logic and its relation to computation, programming language analysis and design, specification and verification of software and hardware systems, theories of concurrency, approaches to static analysis and program state. Invited speakers present recent results and summaries of articles from the current literature. (AU)
161. Design and Analysis of Algorithms-Efficient algorithms for sorting, searching, and selection. Algorithm analysis: worst and average case analysis. Recurrences and asymptotics. Data structures: balanced trees, heaps, etc. Algorithm design techniques: divide-and-conquer, dynamic programming, greedy algorithms, amortized analysis. Algorithms for fundamental graph problems, e.g., depth-first search, connected components, topological sort, shortest paths. Possible topics: network flow, string searching, parallel computation. Prerequisite: 103 or 109, Statistics 116.
260. Concrete Mathematics-Mathematics for the analysis of algorithms: recurrences, summations, generating functions, asymptotics. Elementary combinatorics, discrete probability, and number theory. Prerequisites: 103 or 109, Math. 42, or equivalents
261. Optimization and Algorithmic Paradigms-Algorithms for network optimization: max-flow, min-cost flow, matching, assignment, and min-cut problems. Introduction to linear programming. Use of LP duality for design and analysis of algorithms. Approximation algorithms for NP-complete problems such as Steiner Trees, Traveling Salesman, and scheduling problems. Randomized algorithms. Introduction to on-line algorithms.
361A. Advanced Algorithms-Advanced data structures: union-find, self-adjusting data structures and amortized analysis, dynamic trees, Fibonacci heaps, universal hash function and sparse hash tables, persistent data structures. Advanced combinatorial algorithms: algebraic (matrix and polynomial) algorithms, number theoretic algorithms, group theoretic algorithms and graph isomorphism, on-line algorithms and competitive analysis, strings and pattern matching, heuristic and probabilistic analysis (TSP, satisfiability, cliques, colorings), local search algorithms. Prerequisite: 161 or 261, or equivalents.
361B. Advanced Algorithms-Topics: exact and approximate algorithms for various combinational optimization problems, e.g., generalized and multicommodity flow, constrained forest problems, scheduling, and the max-cut problem multidimensional search. Linear programming; LP duality, ellipsoid dimension. Lattice reduction and strongly-polynomial algorithms.
365. Randomized Algorithms-Design and analysis of algorithms that use randomness to guide their computations. Basic tools, from probability theory and probabilistic analysis, that are recurrent in algorithmic applications. Randomized complexity theory and game-theoretic techniques. Algebraic techniques. Probability amplification and derandomization. Applications: sorting and searching, data structures, combinatorial optimization and graph algorithms, geometric algorithms and linear programming, approximation and counting problems, parallel and distributed algorithms, on-line algorithms, number-theoretic algorithms. Prerequisites: 161 or 261, Statistics 116, or equivalents.
367A. Parallel Computation-Introduction to theoretical issues in parallel computation. Properties of parallel computation models and algorithm design techniques specific to each model, including systolic arrays, mesh-connected computers, hypercube-related networks, and PRAM. Topics: algorithms for sorting, connected components, shortest paths, and other basic problems. Upper and lower bounds for randomized and deterministic routing on hypercube and related networks. Techniques for reducing the processor-time product for PRAM algorithms.
367B. Parallel Computation-Advanced parallel algorithms. Focus is on developing techniques for the design of parallel algorithms on the PRAM model of computation and its derivatives. Possible topics: efficient randomized parallel algorithms for symmetry-breaking and related problems. Derandomization techniques. Parallel sorting. Deterministic and randomized parallel algorithms for flows and related problems; assignment problem, matching in general graphs. Evaluation of straight-line code, P-complete problems.
368. Geometric Algorithms-Graduate-level introduction to the basic techniques used in the design and analysis of efficient geometric algorithms including: convexity, triangulation, sweeping, partitioning, and point location. Voroni and Delaunay diagrams. Intersection and visibility problems. Recent developments using random sampling methods. Emphasizes data structures of general usefulness in geometric computing and the conceptual primitives appropriate for manipulating them. Impact of numerical issues in geometric computation. Applications to motion planning, visibility preprocessing, model-based recognition, and GIS. Prerequisite: 161.
369. Topics in Analysis of Algorithms-Advanced material is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. See Time Schedule for topics currently being offered.
468. Topics in Geometric Algorithms-Advanced seminar covering different topics related to geometric computing. Recent offerings: shape matching, proximity and nearest-neighbor problems, visibility and motion planning, and collision detection. Readings from the literature and a presentation or a project required. May be taken multiple times for credit. Prerequisite: 368, or consent of instructor.
270A. Introduction to Medical Informatics: Fundamental Methods-(Same as Medical Information Sciences 210A.) Issues in the modeling, design, and implementation of computational systems for use in biomedicine. Topics: controlled terminologies in medicine and biological science,ontologies, fundamental algorithms, basic knowledge representation, information dissemination and retrieval. Emphasis is on the principles of modeling data and knowledge in biomedicine and on the translation of resulting models into useful automated systems.
270B. Introduction to Medical Informatics: Systems and Requirements-(Same as Medical Information Sciences 210B.) Survey of the major application areas in medical informatics, including clinical information systems, imaging systems, bioinformatics, public policy, decision support, and signal processing. Emphasis is on the system requirements, relevant data, algorithms, and implementation issues in each area. Prerequisite: 270A.
271. Decision-Making Methods for Biomedicine-(Same as Medical Information Sciences 211.) For undergraduates or graduate students, building on concepts introduced in 270B. Intermediate biomedical decision making and survey of the methods for the implementation of such concepts in computer-based decision-support tools. Emphasis is on Bayesian statistics, decision analysis, cost-benefit analysis, neural networks, artificial intelligence/expert systems, belief networks, influence diagrams, and the synergies among such approaches. Prerequisites: 270B and at least one programming course.
272. Medical Informatics Project Course-(Same as Medical Information Sciences 212.) For students who have completed 270A, 270B, 271 or 274, and who wish to implement those ideas in a computer program. Students may take 274 concurrently and complete a project that is coordinated between the two courses. Prerequisites: programming experience, 270B.
274. Representations and Algorithms for Computational Molecular Biology-(Same as Medical Information Sciences 214.) Introduction to basic computational issues and methods used in the field of bioinformatics, including access and use of biological data sources on the Internet. Topics: basic algorithms for alignment of biological sequences and structures, computing with strings, phylogenetic tree construction, hidden Markov models, computing with networks of genes, basic structural computations on proteins, protein structure prediction, protein threading techniques, homology modeling, molecular dynamics and energy minimization, statistical analysis of 3D biological data, integration of diverse data sources, knowledge representation and controlled terminologies for molecular biology, graphical display of biological data, genetic algorithms and genetic programming applied to biological problems. See instructor for unit options. Prerequisites: programming skills and understanding of matrix algebra.
275A. Music Information -- (Enroll in Music 253.) 1-4 units, Win (Selfridge-Field) 275B. Music Representation -- (Enroll in Music 254.) 1-4 units, Spr (Selfridge-Field)
377. Topics in Human-Computer Interaction-Topics of current research interest in human-computer interaction. Contents change each quarter. May be repeated for credit.
378. Phenomenological Foundations of Cognition, Language, and Computation-Critical analysis of theoretical foundations of the cognitive approach to language, thought, and computation. Contrast of the rationalistic assumptions of current linguistics and artificial intelligence with alternatives drawn from phenomenology, theoretical biology, critical literary theory, and socially-oriented speech act theory. Emphasizes relevance of theoretical orientation to the design, implementation, and impact of computer systems as it affects human-computer interaction.
379. Interdisciplinary Topics-Advanced material that relates computer science to other disciplines is often taught for the first time as a "topics" course, perhaps by a faculty member visiting from another institution. Students may therefore enroll repeatedly in a course with this number. See Time Schedule for topics being currently offered.
50. Problem Solving with Mathematica-For engineers, physicists, mathematicians, and others who need to solve mathematical or quantitative problems. Comprehensive introduction to Mathematica, an interactive mathematical software package that includes a high-level programming language. Symbolic, numerical, graphical, animation, and programming capabilities, including use of Mathematica to manipulate expressions, find roots, solve differential equations, visualize functions and data, import and export data in arbitrary formats, work with expressions in standard mathematical notation, and perform statistical analyses.
51. Introduction to Quantum Computing and Quantum Information Theory-For computer scientists, physicists, mathematicians, engineers, and others who want to learn the capabilities of quantum computers and the necessary quantum mechanics and complexity theory. Topics: quantum algorithms (including Shor's polynomial time algorithm for integer factorization, Grover's database search algorithm, quantum tree search, quantum wavelets), quantum information theory, quantum cryptography, breaking the RSA cryptosystem, quantum teleportation, circuit design, quantum error correction, and examples of prototype quantum computers. Prerequisites: familiarity with elementary matrix algebra and complex numbers.
The first digit of a CS course number indicates its general level of sophistication:
0-99 service courses for nontechnical majors
100-199 other service courses, basic undergraduate
200-299 advanced undergraduate/ beginning graduate
300-399 advanced graduate
400-499 experimental
500-599 graduate seminars