Postbaccalaureate Studies
The Department of Computer Science offers courses in computer science, Java programming, MATLAB programming, object-oriented programming, data structures and algorithms, software engineering, artificial intelligence, operating systems, database systems, cryptography, biometrics, networks, and graphics.
Departmental Chair: Shree Nayar, 450 Computer Science
212-939-7000
nayar@cs.columbia.edu
Assistant Director of Academic Programs: Remi Moss, 450 Computer Science
212-939-7002
remimoss@cs.columbia.edu
Departmental Office: 450 Computer Science
212-939-7000
Office Hours:
see Web site
Web: www.cs.columbia.edu
Course scheduling is subject to change. Days, times, instructors, class locations, and call numbers are available on the Directory of Classes.
Fall course information begins posting to the Directory of Classes in February; Summer course information begins posting in March; Spring course information begins posting in June. For course information missing from the Directory of Classes after these general dates, please contact the department or program.
Click on course title to see course description and schedule.
Basic Introduction to concepts and skills in Information
Sciences: human-computer interfaces, representing information digitally,
organizing and searching information on the World Wide Web, principles of
algorithmic problem solving, introduction to database concepts,
introduction to programming in Python.
A general introduction to computer science concepts, algorithmic
problem-solving capabilities, and programming skills in C. Columbia
University students may receive credit for only one of the following three
courses: 1003, 1004, and 1005.
A general introduction to computer science for science and engineering
students interested in majoring in computer science or engineering. Covers
fundamental concepts of computer science, algorithmic problem-solving
capabilities, and introductory Java programming skills. Assumes no prior
programming background. Columbia University students may receive credit for
only one of the following three courses: 1003, 1004, and 1005.
A general introduction to computer science concepts, algorithmic
problem-solving capabilities, and programming skills in MATLAB. Assumes no
prior programming background. Columbia University students may receive
credit for only one of the following three courses: 1003, 1004, and 1005.
An interdisciplinary course in computing intended for first year SEAS
students. Introduces computational thinking, algorithmic problem solving
and Python programming with applications in science and engineering.
Assumes no prior programming background.
An honors-level introduction to computer science, intended primarily for
students considering a major in computer science. Computer science as a
science of abstraction. Creating models for reasoning about and solving
problems. The basic elements of computers and computer programs.
Implementing abstractions using data structures and algorithms. Taught in
java.
Peer led weekly seminar intended for first and second year undergraduates
considering a major in Computer Science. Pass/Fail only. May not be used
towards satisfying the major or SEAS credit requirements.
Introduction to a programming language. Each section is devoted to a
specific language. Intended only for those who are already fluent in at
least one programming language. Sections may meet for one hour per week for
the whole term, for three hours per week for the first third of the term,
or for two hours per week for the first six weeks. May be repeated for
credit if different languages are involved.
Not intended for computer science majors. Data types and structures:
arrays, stacks, singly and doubly linked lists, queues, trees, sets, and
graphs. Programming techniques for processing such structures: sorting and
searching, hashing, garbage collection. Storage management. Rudiments of
the analysis of algorithms. Taught in C. Note: Due to significant overlap,
students may receive credit for only one of the following four courses:
COMS W3133, W3134, W3137, and W3139.
Data types and structures: arrays, stacks, singly and doubly linked lists,
queues, trees, sets, and graphs. Programming techniques for processing such
structures: sorting and searching, hashing, garbage collection. Storage
management. Rudiments of the analysis of algorithms. Taught in Java. Note:
Due to significant overlap, students may receive credit for only one of the
following four courses: COMS W3134, COMS W3136, COMS W3137
An honors introduction to data types and structures: arrays, stacks, singly
and doubly linked lists, queues, trees, sets, and graphs. Programming
techniques for processing such structures: sorting and searching, hashing,
garbage collection. Storage management. Design and analysis of algorithms.
Taught in Java. Note: Due to significant overlap, students may receive
credit for only one of the following four courses: COMS W3133, W3134, W3137.
Practical, hands-on introduction to programming techniques and tools for professional software construction, including learning how to write code to given specifications as well as document the results. Provides introductory overview of C and C++ in a UNIX environment, for students with Java background. Also introduces scripting languages (perl) and basic web programming. UNIX programming utilities are also covered.
Lab Required.
Logic and formal proofs, sequences and summation, mathematical induction,
binomial coefficients, elements of finite probability, recurrence
relations, equivalence relations and partial orderings, and topics in graph
theory (including isomorphism, traversability, planarity, and colorings).
Computational linear algebra, solution of linear systems, sparse linear
systems, least squares, eigenvalue problems, and numerical solution of
other multivariate problems as time permits.
Regular languages: deterministic and non-deterministic finite automata,
regular expressions. Context-free languages: context-free grammars,
push-down automata. Turing machines, the Chomsky hierarchy, and the
Church-Turing thesis. Introduction to Complexity Theory and
NP-Completeness.
Fundamentals of computer organization and digital logic. Boolean algebra,
Karnaugh maps, basic gates and components, flipflops and latches, counters
and state machines, basics of combinational and sequential digital design.
Assembly language, instruction sets, ALU's, single-cycle and multi-cycle
processor design, introduction to pipelined processors, caches, and virtual
memory.
Consult the department for section assignment. Special topics arranged as
the need and availability arise. Topics are usually offered on a one-time
basis. Since the content of this course changes each time it is offered, it
may be repeated for credit.
Introduction to the information system paradigm of molecular biology.
Representation, organization, structure, function, and manipulation of the
biomolecular sequences of nucleic acids and proteins. The role of enzymes
and gene regulatory elements in natural biological functions as well as in
biotechnology and genetic engineering. Recombination and other
macromolecular processes viewed as mathematical operations with simulation
and visualization using simple computer programming. This course shares
lectures with ECBM E3060, but the work requirements differ
somewhat.
The fundamentals of database design and application development using
databases: entity-relationship modeling, logical design of relational
databases, relational data definition and manipulation languages, SQL, XML,
query processing, physical database tuning, transaction processing,
security. Programming projects are required.
Modern programming languages and compiler design. Imperative,
object-oriented, declarative, functional, and scripting languages. Language
syntax, control structures, data types, procedures and parameters, binding,
scope, run-time organization, and exception handling. Implementation of
language translation tools including compilers and interpreters. Lexical,
syntactic and semantic analysis; code generation; introduction to code
optimization. Teams implement a language and its compiler.
Continuation of COMS W4115, with broader and deeper investigation into
the design and implementation of contemporary language translators, be they
compilers or interpreters. Topics include: parsing, semantic analysis, code
generation and optimization, run-time environments, and compiler-compilers.
A programming project is required.
Design and implementation of operating systems. Topics include process
management, process synchronization and interprocess communication, memory
management, virtual memory, interrupt handling, processor scheduling,
device management, I/O, and file systems. Case study of the UNIX operating
system. A programming project is required.
Introduction to computer networks and the technical foundations of the
Internet, including applications, protocols, local area networks,
algorithms for routing and congestion control, security, elementary
performance evaluation. Several written and programming assignments
required.
Principles of parallel software design. Topics include task and data
decomposition, load-balancing, reasoning about correctness, determinacy,
safety, and deadlock-freedom. Application of techniques through
semester-long design project implementing performant, parallel application
in a modern parallel programming language.
In this course, students will learn how to put "principles into practice,"
in a hands-on-networking lab course. The course will cover the technologies
and proctocols of the internet using equipment currently available to large
internet service providers such as CISCO routers and end-systems. A set of
laboratory experiments will provide hands-on experience with engineering
wide-area networks and will familiarize students with the Internet Protocol
(IP), Address Resolution Protocal (ARP), Internet Control Message Protocol
(ICMP), User Datagram Protocol (UDP) and Transmission Control Protocol
(TCP), the Domain Name System (DNS), routing protocols (RIP, OSPF, BGP),
network management protocols (SNMP, and application-level protocols (FTP,
TELNET, SMTP).
Software lifecycle from the viewpoint of designing and implementing N-tier applications (typically utilizing web browser, web server, application server, database). Major emphasis on quality assurance (code inspection, unit and integration testing, security and stress testing). Centers on a student-designed team project that leverages component services (e.g., transactions, resource pooling, publish/subscribe) for an interactive multi-user application such as a simple game.
Introduction to computer graphics. Topics include 3D viewing and
projections, geometric modeling using spline curves, graphics systems such
as OpenGL, lighting and shading, and global illumination. Significant
implementation is required: the final project involves writing an
interactive 3D video game in OpenGL.
A second course in computer graphics covering more advanced topics
including image and signal processing, geometric modeling with meshes,
advanced image synthesis including ray tracing and global illumination, and
other topics as time permits. Emphasis will be placed both on
implementation of systems and important mathematical and geometric concepts
such as Fourier analysis, mesh algorithms and subdivision, and Monte Carlo
sampling for rendering. Note: Course will be taught every two years.
Introduction to the theory and practice of computer user interface design,
emphasizing the software design of graphical user interfaces. Topics
include basic interaction devices and techniques, human factors,
interaction styles, dialogue design, and software infrastructure. Design
and programming projects are required.
Introduction to network security concepts and mechanisms. Foundations of
network security and an in-depth review of commonly-used security
mechanisms and techniques, security threats and network-based attacks,
applications of cryptography, authentication, access control, intrusion
detection and response, security protocols (IPsec, SSL, Kerberos), denial
of service, viruses and worms, software vulnerabilities, web security,
wireless security, and privacy.
Secure programming. Cryptograhic engineering and key handling. Access
controls. Tradeoffs in security design. Design for security.
Sequences and recursions, calculus of finite differences and sums,
elementary number theory, permutation group structures, binomial
coefficients, Stilling numbers, harmonic numbers, generating functions.
Introduction to the design and analysis of efficient algorithms. Topics
include models of computation, efficient sorting and searching, algorithms
for algebraic problems, graph algorithms, dynamic programming,
probabilistic methods, approximation algorithms, and NP-completeness.
Possibilities and limitations of performing learning by computational
agents. Topics include computational models of learning, polynomial time
learnability, learning from examples and learning from queries to oracles.
Computational and statistical limitations of learning. Applications to
Boolean functions, geometric functions, automata.
An introduction to modern cryptography, focusing on the
complexity-theoretic foundations of secure computation and communication in
adversarial environments; a rigorous approach, based on precise definitions
and provably secure protocols. Topics include private and public key
encryption schemes, digital signatures, authentication, pseudorandom
generators and functions, one-way functions, trapdoor functions, number
theory and computational hardness, identification and zero knowledge
protocols.
Hands-on introduction to solving open-ended computational problems.
Emphasis on creativity, cooperation, and collaboration. Projects spanning a
variety of areas within computer science, typically requiring the
development of computer programs. Generalization of solutions to broader
problems, and specialization of complex problems to make them manageable.
Team-oriented projects, student presentations, and in-class participation
required.
An overview of the field of biomedical informatics, combining perspectives
from medicine, computer science and social science. Use of computers and
information in health care and the biomedical sciences, covering specific
applications and general methods, current issues, capabilities and
limitations of biomedical informatics. Biomedical Informatics studies the
organization of medical information, the effective management of
information using computer technology, and the impact of such technology on
medical research, education, and patient care. The field explores
techniques for assessing current information practices, determining the
information needs of health care providers and patients, developing
interventions using computer technology, and evaluating the impact of those
interventions.
Provides a broad understanding of the basic techniques for building
intelligent computer systems. Topics include state-space problem
representations, problem reduction and and-or graphs, game playing and
heuristic search, predicate calculus, and resolution theorem proving, AI
systems and languages for knowledge representation, machine learning and
concept formation and other topics such as natural language processing may
be included as time permits.
Computational approaches to natural language generation and understanding.
Recommended preparation: some previous or concurrent exposure to AI or
Machine Learning. Topics include information extraction, summarization,
machine translation, dialogue systems, and emotional speech. Particular
attention is given to robust techniques that can handle understanding and
generation for the large amounts of text on the Web or in other large
corpora. Programming exercises in several of these areas.
General aspects of knowledge representation (KR). The two fundamental
paradigms (semantic networks and frames) and illustrative systems. Topics
include hybrid systems, time, action/plans, defaults, abduction, and
case-based reasoning. Throughout the course particular attention will be
paid to design tradeoffs between language expressiveness and reasoning
complexity, and issues relating to the use of KR systems in larger
applications.
Introductory course in computer vision. Topics include image formation and
optics, image sensing, binary images, image processing and filtering, edge
extraction and boundary detection, region growing and segmentation, pattern
classification methods, brightness and reflectance, shape from shading and
photometric stereo, texture, binocular stereo, optical flow and motion, 2-D
and 3-D object representation, object recognition, vision systems and
applications.
Introduction to robotics from a computer science perspective. Topics
include coordinate frames and kinematics, computer architectures for
robotics, integration and use of sensors, world modeling systems, design
and use of robotic programming languages, and applications of artificial
intelligence for planning, assembly, and manipulation.
Visual input as data and for control of computer systems. Survey and
analysis of architecture, algorithms, and underlying assumptions of
commercial and research systems that recognize and interpret human
gestures, analyze imagery such as fingerprint or iris patterns, generate
natural language descriptions of medical or map imagery. Explores
foundations in human psychophysics, cognitive science, and artificial
intelligence.
In this course we will explore the latest advances in biometrics as well as
the machine learning techniques behind them. Students will learn how these
technologies work and how they are sometimes defeated. Grading will be
based on homework assignments and a final project. There will be no midterm
or final exam. This course shares lectures with COMS E6737. Students taking COMS E6737 are required to complete additional homework
problems and undertake a more rigorous final project. Students will only be
allowed to earn credit for COMS W4737 or COMS E6737 and not both.
Topics from generative and discriminative machine learning including least
squares methods, support vector machines, kernel methods, neural networks,
Gaussian distributions, linear classification, linear regression, maximum
likelihood, exponential family distributions, Bayesian networks, Bayesian
inference, mixture models, the EM algorithm, graphical models and hidden
Markov models. Algorithms implemented in Matlab.
An introduction to modern digital system design. Advanced topics in digital
logic: controller synthesis (Mealy and Moore machines); adders and
multipliers; structured logic blocks (PLDs, PALs, ROMs); iterative
circuits. Modern design methodology: register transfer level modelling
(RTL); algorithmic state machines (ASMs); introduction to hardware
description languages (VHDL or Verilog); system-level modelling and
simulation; design examples.
Focuses on advanced topics in computer architecture, illustrated by case
studies from classic and modern processors. Fundamentals of quantitative
analysis. Pipelining. Memory hierarchy design. Instruction-level and
thread-level parallelism. Data-level parallelism and graphics processing
units. Multiprocessors. Cache coherence. Interconnection networks.
Multi-core processors and systems-on-chip. Platform architectures for
embedded, mobile, and cloud computing.
Special topics arranged as the need and availability arises. Topics are
usually offered on a one-time basis. Since the content of this course
changes each time it is offered, it may be repeated for credit. Consult the
department for section assignment.
A continuation of COMS W4995 when the special topic extends over two terms.
Continuation of COMS W4111, covers latest trends in both database
research and industry: information retrieval, web search, data mining, data
warehousing, OLAP, decision support, multimedia databases, and XML and
databases. Programming projects required.
Concentration on the design and implementation of programming languages,
and tools focused on advanced applications in new areas in software
verification, distributed systems, programming in the large, and web
computing. A substantial project is typically required. May be repeated for
credit.
Software methodologies and technologies concerned with development and
operation of today's software systems. Reliability, security, systems
management and societal issues. Emerging software architectures such as
enterprise and grid computing. Term paper and programming project. Seminar
focus changes frequently to remain timely.
An advanced graduate course, involving study of an advanced research topic
in Computer Graphics. Content varies between offerings, and the course
may be repeated for credit. Recent offerings have included appearance
models in graphics, and high quality real-time rendering.
Introduction to queuing analysis and simulation techniques. Evaluation of
time-sharing and multiprocessor systems. Topics include priority queuing,
buffer storage, and disk access, interference and bus contention problems,
and modeling of program behaviors.
In-depth survey of protocols and algorithms needed to transport multimedia
information across the Internet, including audio and video encoding,
multicast, quality-of-service, voice-over-IP, streaming media and
peer-to-peer multimedia systems. Includes a semester-long programming
project.
Review the fundamental aspects of security, including authentication,
authorization, access control, confidentiality, privacy, integrity, and
availability. Review security techniques and tools, and their applications
in various problem areas. Study the state of the art in research. A
programming project is required.
Content varies from year to year. This course may be repeated for credit.
Concentration on some aspect of graph theory, such as topological graph
theory, algebraic graph theory, enumerative graph theory, graphical
optimization problems, or matroids.
Concentration on some aspect of combinatorial theory. Content varies form
year to year. This course may be repeated for credit.
Concentration on some theoretical aspect of computer science. Content
varies from year to year. May be repeated for credit.
Computational imaging uses a combination of novel imaging optics and a
computational module to produce new forms of visual information. Survey of
the state of art in computational imaging. Review of recent papers on: omni
directional and panoramic imaging, catadioptric imaging, high dynamic range
imaging, mosaicing and superresolution. Classes are seminars with the
instructor, guest speakers, and students presenting papers and discussing
them.
Programming proficiency in C, C++ or JAVA. 3D Photography - the process of
automatically creating 3D, texture-mapped models of objects in detail.
Applications include robotics, medicine, graphics, virtual reality,
entertainment and digital movies etc. Topics include 3D data acquisition
devices, 3D modeling systems and algorithms to acquire, create, augment,
manipulate, render, animate and physically build such models.
In this course we will explore the latest advances in biometrics as well as
the machine learning techniques behind them. Students will learn how these
technologies work and how they are sometimes defeated. Grading will be
based on homework assignments and a final project. There will be no midterm
or final exam. This course shares lectures with COMS W4737. Students taking COMS E6737 are required to complete additional homework
problems and undertake a more rigorous final project. Students will only be
allowed to earn credit for COMS W4737 or COMS E6737 and not both.
A list of topics for each offering of the course is available in the
department office one month before registration. May be taken more than
once if topics are different Iterative logic circuits applied to pattern
recognition. Finite state machines; alternative representations,
information loss, linear circuits, structure theory. Reliability and
testability of digital systems.
Theory and practice of contemporary automatic speech recognition. Gaussian
mixture distributions, hidden Markov models, pronunciation modeling,
decision trees, finite-state transducers, and language modeling. Selected
advanced topics will be covered in more depth.
Basic Introduction to concepts and skills in Information
Sciences: human-computer interfaces, representing information digitally,
organizing and searching information on the World Wide Web, principles of
algorithmic problem solving, introduction to database concepts,
introduction to programming in Python.
A general introduction to computer science concepts, algorithmic
problem-solving capabilities, and programming skills in C. Columbia
University students may receive credit for only one of the following three
courses: 1003, 1004, and 1005.
A general introduction to computer science for science and engineering
students interested in majoring in computer science or engineering. Covers
fundamental concepts of computer science, algorithmic problem-solving
capabilities, and introductory Java programming skills. Assumes no prior
programming background. Columbia University students may receive credit for
only one of the following three courses: 1003, 1004, and 1005.
A general introduction to computer science concepts, algorithmic
problem-solving capabilities, and programming skills in MATLAB. Assumes no
prior programming background. Columbia University students may receive
credit for only one of the following three courses: 1003, 1004, and 1005.
An interdisciplinary course in computing intended for first year SEAS
students. Introduces computational thinking, algorithmic problem solving
and Python programming with applications in science and engineering.
Assumes no prior programming background.
An honors-level introduction to computer science, intended primarily for
students considering a major in computer science. Computer science as a
science of abstraction. Creating models for reasoning about and solving
problems. The basic elements of computers and computer programs.
Implementing abstractions using data structures and algorithms. Taught in
java.
Peer led weekly seminar intended for first and second year undergraduates
considering a major in Computer Science. Pass/Fail only. May not be used
towards satisfying the major or SEAS credit requirements.
Introduction to a programming language. Each section is devoted to a
specific language. Intended only for those who are already fluent in at
least one programming language. Sections may meet for one hour per week for
the whole term, for three hours per week for the first third of the term,
or for two hours per week for the first six weeks. May be repeated for
credit if different languages are involved.
Not intended for computer science majors. Data types and structures:
arrays, stacks, singly and doubly linked lists, queues, trees, sets, and
graphs. Programming techniques for processing such structures: sorting and
searching, hashing, garbage collection. Storage management. Rudiments of
the analysis of algorithms. Taught in C. Note: Due to significant overlap,
students may receive credit for only one of the following four courses:
COMS W3133, W3134, W3137, and W3139.
Data types and structures: arrays, stacks, singly and doubly linked lists,
queues, trees, sets, and graphs. Programming techniques for processing such
structures: sorting and searching, hashing, garbage collection. Storage
management. Rudiments of the analysis of algorithms. Taught in Java. Note:
Due to significant overlap, students may receive credit for only one of the
following four courses: COMS W3134, COMS W3136, COMS W3137
A second programming course intended for non-majors with at least one
semester of introductory programming experience. Basic elements of
programming in C and C++, array-based data structures, heaps, linked lists,
C programming in UNIX environment, object-oriented programming in C++,
trees, graphs, generic programming, hash tables.
An honors introduction to data types and structures: arrays, stacks, singly
and doubly linked lists, queues, trees, sets, and graphs. Programming
techniques for processing such structures: sorting and searching, hashing,
garbage collection. Storage management. Design and analysis of algorithms.
Taught in Java. Note: Due to significant overlap, students may receive
credit for only one of the following four courses: COMS W3133, W3134, W3137.
Practical, hands-on introduction to programming techniques and tools for professional software construction, including learning how to write code to given specifications as well as document the results. Provides introductory overview of C and C++ in a UNIX environment, for students with Java background. Also introduces scripting languages (perl) and basic web programming. UNIX programming utilities are also covered.
Lab Required.
Logic and formal proofs, sequences and summation, mathematical induction,
binomial coefficients, elements of finite probability, recurrence
relations, equivalence relations and partial orderings, and topics in graph
theory (including isomorphism, traversability, planarity, and colorings).
Introduction to computation on digital computers. Design and analysis of
numerical algorithms. Numerical solution of equations, integration,
recurrences, chaos, differential equations. Introduction to Monte Carlo
methods. Properties of floating point arithmetic. Applications to weather
prediction, computational finance, computational science, and computational
engineering.
Regular languages: deterministic and non-deterministic finite automata,
regular expressions. Context-free languages: context-free grammars,
push-down automata. Turing machines, the Chomsky hierarchy, and the
Church-Turing thesis. Introduction to Complexity Theory and
NP-Completeness.
Fundamentals of computer organization and digital logic. Boolean algebra,
Karnaugh maps, basic gates and components, flipflops and latches, counters
and state machines, basics of combinational and sequential digital design.
Assembly language, instruction sets, ALU's, single-cycle and multi-cycle
processor design, introduction to pipelined processors, caches, and virtual
memory.
Consult the department for section assignment. Special topics arranged as
the need and availability arise. Topics are usually offered on a one-time
basis. Since the content of this course changes each time it is offered, it
may be repeated for credit.
The fundamentals of database design and application development using
databases: entity-relationship modeling, logical design of relational
databases, relational data definition and manipulation languages, SQL, XML,
query processing, physical database tuning, transaction processing,
security. Programming projects are required.
The principles and practice of building large-scale database management
systems. Storage methods and indexing, query processing and optimization,
materialized views, transaction processing and recovery, object-relational
databases, parallel and distributed databases, performance considerations.
Programming projects are required.
Modern programming languages and compiler design. Imperative,
object-oriented, declarative, functional, and scripting languages. Language
syntax, control structures, data types, procedures and parameters, binding,
scope, run-time organization, and exception handling. Implementation of
language translation tools including compilers and interpreters. Lexical,
syntactic and semantic analysis; code generation; introduction to code
optimization. Teams implement a language and its compiler.
Continuation of COMS W4115, with broader and deeper investigation into
the design and implementation of contemporary language translators, be they
compilers or interpreters. Topics include: parsing, semantic analysis, code
generation and optimization, run-time environments, and compiler-compilers.
A programming project is required.
Design and implementation of operating systems. Topics include process
management, process synchronization and interprocess communication, memory
management, virtual memory, interrupt handling, processor scheduling,
device management, I/O, and file systems. Case study of the UNIX operating
system. A programming project is required.
Introduction to computer networks and the technical foundations of the
Internet, including applications, protocols, local area networks,
algorithms for routing and congestion control, security, elementary
performance evaluation. Several written and programming assignments
required.
In this course, students will learn how to put "principles into practice,"
in a hands-on-networking lab course. The course will cover the technologies
and proctocols of the internet using equipment currently available to large
internet service providers such as CISCO routers and end-systems. A set of
laboratory experiments will provide hands-on experience with engineering
wide-area networks and will familiarize students with the Internet Protocol
(IP), Address Resolution Protocal (ARP), Internet Control Message Protocol
(ICMP), User Datagram Protocol (UDP) and Transmission Control Protocol
(TCP), the Domain Name System (DNS), routing protocols (RIP, OSPF, BGP),
network management protocols (SNMP, and application-level protocols (FTP,
TELNET, SMTP).
Introduction to computer graphics. Topics include 3D viewing and
projections, geometric modeling using spline curves, graphics systems such
as OpenGL, lighting and shading, and global illumination. Significant
implementation is required: the final project involves writing an
interactive 3D video game in OpenGL.
A second course in computer graphics covering more advanced topics
including image and signal processing, geometric modeling with meshes,
advanced image synthesis including ray tracing and global illumination, and
other topics as time permits. Emphasis will be placed both on
implementation of systems and important mathematical and geometric concepts
such as Fourier analysis, mesh algorithms and subdivision, and Monte Carlo
sampling for rendering. Note: Course will be taught every two years.
Introduction to network security concepts and mechanisms. Foundations of
network security and an in-depth review of commonly-used security
mechanisms and techniques, security threats and network-based attacks,
applications of cryptography, authentication, access control, intrusion
detection and response, security protocols (IPsec, SSL, Kerberos), denial
of service, viruses and worms, software vulnerabilities, web security,
wireless security, and privacy.
Secure programming. Cryptograhic engineering and key handling. Access
controls. Tradeoffs in security design. Design for security.
Introduction to the design and analysis of efficient algorithms. Topics
include models of computation, efficient sorting and searching, algorithms
for algebraic problems, graph algorithms, dynamic programming,
probabilistic methods, approximation algorithms, and NP-completeness.
Develops a quantitative theory of the computational difficulty of problems
in terms of the resources (eg. time, space) needed to solve them.
Classification of problems into complexity classes, reductions and
completeness. Power and limitations of different modes of computation such
as nondeterminism, randomization, interaction and parallelism.
Modern theory and practice of computation on digital computers.
Introduction to concepts of computational complexity. Design and analysis
of numerical algorithms. Applications to computational finance,
computational science, and computational engineering.
Possibilities and limitations of performing learning by computational
agents. Topics include computational models of learning, polynomial time
learnability, learning from examples and learning from queries to oracles.
Computational and statistical limitations of learning. Applications to
Boolean functions, geometric functions, automata.
An introduction to modern cryptography, focusing on the
complexity-theoretic foundations of secure computation and communication in
adversarial environments; a rigorous approach, based on precise definitions
and provably secure protocols. Topics include private and public key
encryption schemes, digital signatures, authentication, pseudorandom
generators and functions, one-way functions, trapdoor functions, number
theory and computational hardness, identification and zero knowledge
protocols.
Team project centered course focused on principles of planning, creating,
and growing a technology venture. Topics include: indentifying and
analyzing opportunities created by technology paradigm shifts, designing
innovative products, protecting intellectual property, engineering
innovative business models.
Provides a broad understanding of the basic techniques for building
intelligent computer systems. Topics include state-space problem
representations, problem reduction and and-or graphs, game playing and
heuristic search, predicate calculus, and resolution theorem proving, AI
systems and languages for knowledge representation, machine learning and
concept formation and other topics such as natural language processing may
be included as time permits.
General aspects of knowledge representation (KR). The two fundamental
paradigms (semantic networks and frames) and illustrative systems. Topics
include hybrid systems, time, action/plans, defaults, abduction, and
case-based reasoning. Throughout the course particular attention will be
paid to design tradeoffs between language expressiveness and reasoning
complexity, and issues relating to the use of KR systems in larger
applications.
Introductory course in computer vision. Topics include image formation and
optics, image sensing, binary images, image processing and filtering, edge
extraction and boundary detection, region growing and segmentation, pattern
classification methods, brightness and reflectance, shape from shading and
photometric stereo, texture, binocular stereo, optical flow and motion, 2-D
and 3-D object representation, object recognition, vision systems and
applications.
Introduction to robotics from a computer science perspective. Topics
include coordinate frames and kinematics, computer architectures for
robotics, integration and use of sensors, world modeling systems, design
and use of robotic programming languages, and applications of artificial
intelligence for planning, assembly, and manipulation.
Visual input as data and for control of computer systems. Survey and
analysis of architecture, algorithms, and underlying assumptions of
commercial and research systems that recognize and interpret human
gestures, analyze imagery such as fingerprint or iris patterns, generate
natural language descriptions of medical or map imagery. Explores
foundations in human psychophysics, cognitive science, and artificial
intelligence.
In this course we will explore the latest advances in biometrics as well as
the machine learning techniques behind them. Students will learn how these
technologies work and how they are sometimes defeated. Grading will be
based on homework assignments and a final project. There will be no midterm
or final exam. This course shares lectures with COMS E6737. Students taking COMS E6737 are required to complete additional homework
problems and undertake a more rigorous final project. Students will only be
allowed to earn credit for COMS W4737 or COMS E6737 and not both.
Topics from generative and discriminative machine learning including least
squares methods, support vector machines, kernel methods, neural networks,
Gaussian distributions, linear classification, linear regression, maximum
likelihood, exponential family distributions, Bayesian networks, Bayesian
inference, mixture models, the EM algorithm, graphical models and hidden
Markov models. Algorithms implemented in Matlab.
An introduction to modern digital system design. Advanced topics in digital
logic: controller synthesis (Mealy and Moore machines); adders and
multipliers; structured logic blocks (PLDs, PALs, ROMs); iterative
circuits. Modern design methodology: register transfer level modelling
(RTL); algorithmic state machines (ASMs); introduction to hardware
description languages (VHDL or Verilog); system-level modelling and
simulation; design examples.
Embedded system design and implementation combining hardware and software. I/O, interfacing, and peripherals. Weekly laboratory sessions and term project on design of a microprocessor-based embedded system including at least one custom peripheral. Knowledge of C programming and digital logic required.
Lab Required.
Special topics arranged as the need and availability arises. Topics are
usually offered on a one-time basis. Since the content of this course
changes each time it is offered, it may be repeated for credit. Consult the
department for section assignment.
A continuation of COMS W4995 when the special topic extends over two terms.
Continuation of COMS W4111, covers latest trends in both database
research and industry: information retrieval, web search, data mining, data
warehousing, OLAP, decision support, multimedia databases, and XML and
databases. Programming projects required.
Concentration on the design and implementation of programming languages,
and tools focused on advanced applications in new areas in software
verification, distributed systems, programming in the large, and web
computing. A substantial project is typically required. May be repeated for
credit.
Software methodologies and technologies concerned with development and
operation of today's software systems. Reliability, security, systems
management and societal issues. Emerging software architectures such as
enterprise and grid computing. Term paper and programming project. Seminar
focus changes frequently to remain timely.
An advanced graduate course, involving study of an advanced research topic
in Computer Graphics. Content varies between offerings, and the course
may be repeated for credit. Recent offerings have included appearance
models in graphics, and high quality real-time rendering.
Introduction to queuing analysis and simulation techniques. Evaluation of
time-sharing and multiprocessor systems. Topics include priority queuing,
buffer storage, and disk access, interference and bus contention problems,
and modeling of program behaviors.
In-depth survey of protocols and algorithms needed to transport multimedia
information across the Internet, including audio and video encoding,
multicast, quality-of-service, voice-over-IP, streaming media and
peer-to-peer multimedia systems. Includes a semester-long programming
project.
Review the fundamental aspects of security, including authentication,
authorization, access control, confidentiality, privacy, integrity, and
availability. Review security techniques and tools, and their applications
in various problem areas. Study the state of the art in research. A
programming project is required.
Content varies from year to year. This course may be repeated for credit.
Concentration on some aspect of graph theory, such as topological graph
theory, algebraic graph theory, enumerative graph theory, graphical
optimization problems, or matroids.
Concentration on some aspect of combinatorial theory. Content varies form
year to year. This course may be repeated for credit.
Concentration on some theoretical aspect of computer science. Content
varies from year to year. May be repeated for credit.
Computational imaging uses a combination of novel imaging optics and a
computational module to produce new forms of visual information. Survey of
the state of art in computational imaging. Review of recent papers on: omni
directional and panoramic imaging, catadioptric imaging, high dynamic range
imaging, mosaicing and superresolution. Classes are seminars with the
instructor, guest speakers, and students presenting papers and discussing
them.
Programming proficiency in C, C++ or JAVA. 3D Photography - the process of
automatically creating 3D, texture-mapped models of objects in detail.
Applications include robotics, medicine, graphics, virtual reality,
entertainment and digital movies etc. Topics include 3D data acquisition
devices, 3D modeling systems and algorithms to acquire, create, augment,
manipulate, render, animate and physically build such models.
Students should have knowledge in any of three core areas: computer vision,
computer graphics, or photography. Computational techniques are used to
produce a new level of images and visual representations. Topics include:
HDR imaging, feature matching using RANSAC, image mosaics, image-based
rendering, motion magnification, camera lens arrays, programmable lighting,
face detection, single and multi-view geometry, and more.
In this course we will explore the latest advances in biometrics as well as
the machine learning techniques behind them. Students will learn how these
technologies work and how they are sometimes defeated. Grading will be
based on homework assignments and a final project. There will be no midterm
or final exam. This course shares lectures with COMS W4737. Students taking COMS E6737 are required to complete additional homework
problems and undertake a more rigorous final project. Students will only be
allowed to earn credit for COMS W4737 or COMS E6737 and not both.
Parallel computer principles, machine organization and design of parallel
systems including parallelism detection methods, synchronization, data
coherence and interconnection networks. Performance analysis and special
purpose parallel machines.
A list of topics for each offering of the course is available in the
department office one month before registration. May be taken more than
once if topics are different Iterative logic circuits applied to pattern
recognition. Finite state machines; alternative representations,
information loss, linear circuits, structure theory. Reliability and
testability of digital systems.
Introduction to modern digital CAD synthesis and optimization techniques.
Topics include: modern digital system design (high-level synthesis,
register-transfer level modeling, algorithmic state machines, optimal
scheduling algorithms, resource allocation and binding, retiming),
controller synthesis and optimization, exact and heuristic two-level logic
minimization, advanced multi-level logic optimization, optimal technology
mapping to library cells (for delay, power and area minimization), advanced
data structures (binary decision diagrams), SAT solvers and their
applications, static timing analysis, and introduction to testability.
Includes hands-on small design projects using and creating CAD tools.
Theory and practice of contemporary automatic speech recognition. Gaussian
mixture distributions, hidden Markov models, pronunciation modeling,
decision trees, finite-state transducers, and language modeling. Selected
advanced topics will be covered in more depth.