COS Undergraduate Courses with Filtered Subject Sort
Courses are sorted according to the filtered subject (COS) and catalog number.
-
COS 109 - Computers in Our World (also EGR 109) QCR
Computers are all around us. How does this affect the world we live in? This course is a broad introduction to computing technology for humanities and social science students. Topics will be drawn from current issues and events, and will include discussion of how computers work, what programming is and why it is hard, how the Internet and the Web work, security and privacy. Two 90-minute lectures. Self-scheduled computer laboratory.
-
COS 126 - Computer Science: An Interdisciplinary Approach (also EGR 126) QCR
An intro. to computer science in the context of scientific, engineering, and commercial applications. The goal of the course is to teach basic principles and practical issues, while at the same time preparing students to use computers effectively for applications in computer science, physics, biology, engineering, and other disciplines. Java programming language is used to introduce fundamental programming concepts, including conditionals, loops, arrays, functions, and object-oriented programming. Add topics include algorithms and data structures; theory of computing; and machine learning. Two lectures and two precepts.
-
COS 217 - Introduction to Programming Systems QCR
An introduction to computer organization and system software. Developing skills for composing large programs, including modularity, abstraction, programming style, and best practices for code development, testing, debugging, and performance tuning. Additionally, an overview of computing environments and architectures, through the C programming language, assembly language, and machine language. Two lectures and two precepts.
-
COS 226 - Algorithms and Data Structures QCR
This course surveys the most important algorithms and data structures in use on computers today. Topics include elementary data structures, sorting algorithms, search algorithms and data structures, graphs, and some more advanced topics (randomization, multiplicative weights and intractability). The course concentrates on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications. Two lectures and two precepts.
-
COS 240 - Reasoning About Computation QCR
An introduction to mathematical topics relevant to computer science. Combinatorics, probability and graph theory will be covered in the context of computer science applications. The course will present a computer science approach to thinking and modeling. Students will be introduced to fundamental concepts in theoretical computer science, such as NP-completeness and cryptography that arise from the world view of efficient computation.
-
COS 302 - Mathematics for Numerical Computing and Machine Learning (also ECE 305/SML 305)
This course provides a comprehensive and practical background for students interested in continuous mathematics for computer science. The goal is to prepare students for higher-level subjects in artificial intelligence, machine learning, computer vision, natural language processing, graphics, and other topics that require numerical computation. This course is intended students who wish to pursue these more advanced topics, but who have not taken (or do not feel comfortable) with university-level multivariable calculus (e.g., MAT 201/203) and probability (e.g., ORF 245 or ORF 309).
-
ECE 206 - Contemporary Logic Design (also COS 306) SEL
Introduction of the basic concepts in logic design that form the basis of computation and communication circuits. This course will start from scratch and end with building a working computer on which we will run small programs.
-
MUS 314 - Computer and Electronic Music through Programming, Performance, and Composition (also COS 314) QCR
An introduction to the fundamentals of computer and electronic music in the context of the Princeton Laptop Orchestra (PLOrk). The music and sound programming language ChucK, developed here at Princeton, will be used in conjunction with Max/MSP, another digital audio language, to study procedural programming, digital signal processing and synthesis, networking, and human-computer interfacing.
-
COS 316 - Principles of Computer System Design
This course teaches students the design, implementation, and evaluation of computer systems, including operating systems, networking, and distributed systems.The course will teach students to evaluate the performance and study the design choices of existing systems. Students will also learn general systems concepts that support design goals of modularity, performance, and security. Students will apply materials learned in lectures and readings to design and build new systems components.
-
COS 320 - Compiling Techniques
The principal algorithms and concepts associated with translator systems. Topics include lexical analysis, syntactic analysis, parsing techniques, symbol table management, code generation and optimization, run time system design, implementation issues related to programming language design. Course will include a large-scale programming project utilizing the above topics. Three lectures. Prerequisites: 217 and 226 or instructor's permission.
-
ORF 363 - Computing and Optimization for the Physical and Social Sciences (also COS 323) QCR
An introduction to several fundamental and practically-relevant areas of modern optimization and numerical computing. Topics include computational linear algebra, first and second order descent methods, convex sets and functions, basics of linear and semidefinite programming, optimization for statistical regression and classification, and techniques for dealing with uncertainty and intractability in optimization problems. Extensive hands-on experience with high-level optimization software. Applications drawn from operations research, statistics and machine learning, economics, control theory, and engineering.
-
COS 324 - Introduction to Machine Learning
This course is a broad introduction to different machine learning paradigms and algorithms and provides a foundation for further study or independent work in machine learning and data science. Topics include linear models for classification and regression, support vector machines, clustering, dimensionality reduction, deep neural networks, Markov decision processes, planning, and reinforcement learning. The goals of this course are three-fold: to understand the landscape of machine learning, how to compute the math behind techniques, and how to use Python and relevant libraries to implement and use various methods.
-
COS 326 - Functional Programming
An introduction to the principles of typed functional programming. Programming recursive functions over structured data types and informal reasoning by induction about the correctness of those functions. Functional algorithms and data structures. Principles of modular programming, type abstraction, representation invariants and representation independence. Parallel functional programming, algorithms and applications.
-
COS 333 - Advanced Programming Techniques
The practice of programming. Emphasis is on the development of real programs, writing code but also assessing tradeoffs, choosing among design alternatives, debugging and testing, and improving performance. Issues include compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop skills in these areas by working on their own code and in group projects. Two lectures. Prerequisites: 217 and 226 (as corequisite).
-
MAT 375 - Introduction to Graph Theory (also COS 342) QCR
The fundamental theorems and algorithms of graph theory. Topics include: connectivity, matchings, graph coloring, planarity, the four-color theorem, extremal problems, network flows, and related algorithms. Prerequisite: MAT202 or 204 or 217 or equivalent.
-
COS 343 - Algorithms for Computational Biology
This course introduces algorithms for analyzing DNA, RNA, and protein, the three fundamental molecules in the cell. Students will learn algorithms on strings, trees, and graphs and their applications in: sequence comparison and alignment; molecular evolution and comparative genomics; DNA sequencing and assembly; recognition of genes and regulatory elements; and RNA structure and protein interaction networks. Students will also implement algorithms and apply them to biological data.
-
MAE 345 - Introduction to Robotics (also COS 346/ECE 345/ROB 345)
Robotics is a rapidly-growing field with applications including unmanned aerial vehicles, autonomous cars, and robotic manipulators. This course will provide an introduction to the basic theoretical and algorithmic principles behind robotic systems. The course will also allow students to get hands-on experience through project-based assignments. Topics include inverse kinematics, motion planning, localization, mapping, vision, and reinforcement learning. Prerequisites: MAT 201 or 203, MAT 202 or 204, COS 126. Recommended ORF 309 and MAE 305. A.B. students ST requirement; B.S.E. students 1st-year science requirement. Two 90-minute lectures.
-
COS 351 - Information Technology and Public Policy (also SOC 353/SPI 351) SA
This course surveys recurring, high-profile issues in technology policy and law. Each session will explore a challenging topic, including consumer privacy, data security, electronic surveillance, net neutrality, online speech, algorithmic fairness, cryptocurrencies, election security, and offensive operations. The seminar will also cover foundational technical concepts that affect policy and law, including internet architecture, cryptography, systems security, privacy science, and artificial intelligence. Materials and discussion will draw extensively from current events and primary sources.
-
COS 375 - Computer Architecture and Organization (also ECE 375) SEN
An introduction to computer architecture and organization. Instruction set design; basic processor implementation techniques; performance measurement; caches and virtual memory; pipelined processor design; design trade-offs among cost, performance, and complexity. Two classes Prerequisites: COS 217.
-
ECE 381 - Networks: Friends, Money and Bytes (also COS 381)
This course is oriented around 20 practical questions in the social, economic, and technological networks in our daily lives. How does Google sell ad spaces and rank webpages? How does Netflix recommend movies and Amazon rank products? How do I influence people on Facebook and Twitter? Why doesn't the Internet collapse under congestion, and does it have an Achilles heel? Why does each gigabyte of mobile data cost $10, but Skype is free? How come Wi-Fi is slower at hotspots than at home, and what is inside the cloud of iCloud? In formulating and addressing these questions, we introduce the fundamental concepts behind the networking industry.
-
ECE 396 - Introduction to Quantum Computing (also COS 396)
This course will introduce the matrix form of quantum mechanics and discuss the concepts underlying the theory of quantum information. Some of the important algorithms will be discussed, as well as physical systems which have been suggested for quantum computing. Prerequisite: Linear algebra at the level of MAT 202, 204, 217, or the equivalent.
-
COS 397 - Junior Independent Work (B.S.E. candidates only)
Offered in the fall, juniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
COS 398 - Junior Independent Work (B.S.E. candidates only)
Offered in the spring, juniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
COS 417 - Operating Systems
A study of the design and analysis of operating systems. Topics include: processes, mutual exclusion, synchronization, semaphores, monitors, deadlock prevention and detection, memory management, virtual memory, processor scheduling, disk management, file systems, security, protection, distributed systems. Two lectures. Prerequisites: 217 and 226 or instructor's permission.
-
COS 418 - Distributed Systems
This course covers the design and implementation of distributed systems. Students will gain an understanding of the principles and techniques behind the design of modern, reliable, and high-performance distributed systems. Topics include server design, network programming, naming, concurrency and locking, consistency models and techniques, security, and fault tolerance. Modern techniques and systems employed at some of the largest Internet sites (e.g., Google, Facebook, Amazon) will also be covered. Through programming assignments, students will gain practical experience designing, implementing, and debugging real distributed systems.
-
COS 423 - Theory of Algorithms
Design and analysis of efficient data structures and algorithms. General techniques for building and analyzing algorithms. Introduction to NP-completeness. Two lectures and one precept. Prerequisites: 226 and 240 or instructor's permission.
-
COS 424 - Fundamentals of Machine Learning (also SML 302)
Computers have made it possible to collect vast amounts of data from a wide variety of sources. It is not always clear, however, how to use the data, and how to extract useful information from them. This problem is faced in a tremendous range of social, economic and scientific applications. The focus will be on some of the most useful approaches to the problem of analyzing large complex data sets, exploring both theoretical foundations and practical applications. Students will gain experience analyzing several types of data, including text, images, and biological data. Two 90-minute lectures. Prereq: MAT 202 and COS 126 or equivalent.
-
COS 426 - Computer Graphics
The principles underlying the generation and display of graphical pictures by computer. Hardware and software systems for graphics. Topics include: hidden surface and hidden line elimination, line drawing, shading, half-toning, user interfaces for graphical input, and graphic system organization. Two 90-minute lectures. Prerequisites: 217 and 226.
-
COS 429 - Computer Vision
An introduction to the concepts of 2D and 3D computer vision. Topics include low-level image processing methods such as filtering and edge detection; segmentation and clustering; optical flow and tracking; shape reconstruction from stereo, motion, texture, and shading. Throughout the course, there will also be examination of aspects of human vision and perception that guide and inspire computer vision techniques. Prerequisites: 217 and 226. Two lectures.
-
COS 432 - Information Security (also ECE 432)
Security issues in computing, communications, and electronic commerce. Goals and vulnerabilities; legal and ethical issues; basic cryptology; private and authenticated communication; electronic commerce; software security; viruses and other malicious code; operating system protection; trusted systems design; network security; firewalls; policy, administration and procedures; auditing; physical security; disaster recovery; reliability; content protection; privacy. Prerequisites: 217 and 226. Two lectures.
-
COS 433 - Cryptography (also MAT 473)
An introduction to the theory of modern cryptography. Topics covered include private key and public key encryption schemes, digital signatures, pseudorandom generators and functions, zero-knowledge proofs, and some advanced topics. Prerequisites: COS 240 is a required prerequisite or equivalent proof-based mathematical maturity. Two lectures.
-
COS 436 - Human-Computer Interaction
This course is a survey of the field of Human-Computer Interaction (HCI). We cover foundational as well as current research topics in HCI. The two core focus areas are interactive computing and social computing; breadth topics include AI+HCI, AR/VR, design tools, and accessibility. A semester-long group project that involves the design and implementation of an interactive system. Prerequisite COS 217 or permission of instructor. Two lectures and one precept.
-
COS 445 - Economics and Computing
Computation and other aspects of our lives are becoming increasingly intertwined. In this course we will study a variety of topics on the cusp between economics and computation. Topics to be covered include: games on networks, auctions, mechanism and market design, reputation, computational social choice. The aim of the course is two-fold: (1) to understand the game-theoretic issues behind systems involving computation such as online networks, and (2) to learn how algorithms and algorithmic thinking can help with designing better decision and allocation mechanisms in the offline world.
-
COS 448 - Innovating Across Technology, Business, and Marketplaces (also EGR 448)
This course introduces computer science and technology-oriented students to issues tackled by Chief Technology Officers: the technical visionaries and managers innovating at the boundaries of technology and business. These individuals are partners to the business leaders of the organization, not merely implementers of business goals. The course covers companies from ideation and early-stage startup, to growth-stage startup, to mature company, covering the most relevant topics at each stage, including ideation, financing, product-market fit, go-to-market approaches, strategy, execution, and management. Exciting industry leaders guest lecture.
-
COS 451 - Computational Geometry
Introduction to basic concepts of geometric computing, illustrating the importance of this new field for computer graphics, solid modelling, robotics, databases, pattern recognition, and statistical analysis. Algorithms for geometric problems. Fundamental techniques, for example, convex hulls, Voronoi diagrams, intersection problems, multidimensional searching. Two 90-minute lectures. Prerequisites: 226 and 240 or 341, or equivalent.
-
QCB 455 - Introduction to Genomics and Computational Molecular Biology (also COS 455/MOL 455) QCR
This interdisciplinary course provides a broad overview of computational and experimental approaches to decipher genomes and characterize molecular systems. We focus on methods for analyzing "omics" data, such as genome and protein sequences, gene expression, proteomics and molecular interaction networks. We cover algorithms used in computational biology, key statistical concepts (e.g., basic probability distributions, significance testing, multiple testing correction, performance evaluation), and machine learning methods which have been applied to biological problems (e.g., classification techniques, hidden Markov models, clustering).
-
COS 461 - Computer Networks
This course studies computer networks and the services built on top of them. Topics include packet-switch and multi-access networks, routing and flow control, congestion control and quality-of-service, Internet protocols (IP, TCP, BGP), the client-server model and RPC, elements of distributed systems (naming, security, caching) and the design of network services (multimedia, peer-to-peer networks, file and Web servers, content distribution networks). Two lectures, one preceptorial. Prerequisite: 217.
-
ECE 462 - Design of Very Large-Scale Integrated (VLSI) Systems (also COS 462)
Analysis and design of digital integrated circuits using deep sub-micron CMOS technologies as well as emerging and post-CMOS technologies (Si finFETs, III-V, carbon). Emphasis on design, including synthesis, simulation, layout and post-layout verification. Analysis of energy, power, performance, area of logic-gates, interconnect and signaling structures.
-
ECE 475 - Computer Architecture (also COS 475)
An in-depth study of the fundamentals of modern computer processor and system architecture. Students will develop a strong theoretical and practical understanding of modern, cutting-edge computer architectures and implementations. Studied topics include: Instruction-set architecture and high-performance processor organization including pipelining, out-of-order execution, as well as data and instruction parallelism. Cache, memory, and storage architectures. Multiprocessors and multicore processors. Coherent caches. Interconnection and network infrastructures. Prerequisite: ECE 375/COS 375 and ECE 206/COS 306 (or familiarity with Verilog).
-
COS 480 - Special Topics in Computer Science
These courses cover one or more advanced topics in computer science. The courses are offered only when there is an opportunity to present material not included in the established curriculum; the subjects vary from term to term. Three classes.
-
COS 481 - Special Topics in Computer Science
These courses cover one or more advanced topics in computer science. The courses are offered only when there is an opportunity to present material not included in the established curriculum; the subjects vary from term to term. Three classes.
-
COS 484 - Natural Language Processing
Recent advances have ushered in exciting developments in natural language processing (NLP), resulting in systems that can translate text, answer questions and even hold spoken conversations with us. This course will introduce students to the basics of NLP, covering standard frameworks for dealing with natural language as well as algorithms and techniques to solve various NLP problems, including recent deep learning approaches. Topics covered include language modeling, rep. learning, text classification, sequence tagging, syntactic parsing, and machine translation. The course will have programming assignments, a mid-term and a final project.
-
COS 487 - Theory of Computation (also MAT 407)
Studies the limits of computation by identifying tasks that are either inherently impossible to compute, or impossible to compute within the resources available. Introduces students to computability and decidability, Godel's incompleteness theorem, computational complexity, NP-completeness, and other notions of intractability. This course also surveys the status of the P versus NP question. Additional topics may include: interactive proofs, hardness of computing approximate solutions, cryptography, and quantum computation. Two lectures, one precept. Prerequisite: 240 or 341, or instructor's permission.
-
COS 488 - Introduction to Analytic Combinatorics (also MAT 474)
Analytic Combinatorics aims to enable precise quantitative predictions of the properties of large combinatorial structures. The theory has emerged over recent decades as essential both for the scientific analysis of algorithms in computer science and for the study of scientific models in many other disciplines. This course combines motivation for the study of the field with an introduction to underlying techniques, by covering as applications the analysis of numerous fundamental algorithms from computer science. The second half of the course introduces Analytic Combinatorics, starting from basic principles.
-
COS 497 - Senior Independent Work (B.S.E. candidates only)
Offered in the fall, seniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
COS 498 - Senior Independent Work (B.S.E. candidates only)
Offered in the spring, seniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
COS Undergraduate Courses with Primary Subject Sort
Courses are sorted according to the primary subject and catalog number.
-
COS 109 - Computers in Our World (also EGR 109) QCR
Computers are all around us. How does this affect the world we live in? This course is a broad introduction to computing technology for humanities and social science students. Topics will be drawn from current issues and events, and will include discussion of how computers work, what programming is and why it is hard, how the Internet and the Web work, security and privacy. Two 90-minute lectures. Self-scheduled computer laboratory.
-
COS 126 - Computer Science: An Interdisciplinary Approach (also EGR 126) QCR
An intro. to computer science in the context of scientific, engineering, and commercial applications. The goal of the course is to teach basic principles and practical issues, while at the same time preparing students to use computers effectively for applications in computer science, physics, biology, engineering, and other disciplines. Java programming language is used to introduce fundamental programming concepts, including conditionals, loops, arrays, functions, and object-oriented programming. Add topics include algorithms and data structures; theory of computing; and machine learning. Two lectures and two precepts.
-
COS 217 - Introduction to Programming Systems QCR
An introduction to computer organization and system software. Developing skills for composing large programs, including modularity, abstraction, programming style, and best practices for code development, testing, debugging, and performance tuning. Additionally, an overview of computing environments and architectures, through the C programming language, assembly language, and machine language. Two lectures and two precepts.
-
COS 226 - Algorithms and Data Structures QCR
This course surveys the most important algorithms and data structures in use on computers today. Topics include elementary data structures, sorting algorithms, search algorithms and data structures, graphs, and some more advanced topics (randomization, multiplicative weights and intractability). The course concentrates on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications. Two lectures and two precepts.
-
COS 240 - Reasoning About Computation QCR
An introduction to mathematical topics relevant to computer science. Combinatorics, probability and graph theory will be covered in the context of computer science applications. The course will present a computer science approach to thinking and modeling. Students will be introduced to fundamental concepts in theoretical computer science, such as NP-completeness and cryptography that arise from the world view of efficient computation.
-
COS 302 - Mathematics for Numerical Computing and Machine Learning (also ECE 305/SML 305)
This course provides a comprehensive and practical background for students interested in continuous mathematics for computer science. The goal is to prepare students for higher-level subjects in artificial intelligence, machine learning, computer vision, natural language processing, graphics, and other topics that require numerical computation. This course is intended students who wish to pursue these more advanced topics, but who have not taken (or do not feel comfortable) with university-level multivariable calculus (e.g., MAT 201/203) and probability (e.g., ORF 245 or ORF 309).
-
COS 316 - Principles of Computer System Design
This course teaches students the design, implementation, and evaluation of computer systems, including operating systems, networking, and distributed systems.The course will teach students to evaluate the performance and study the design choices of existing systems. Students will also learn general systems concepts that support design goals of modularity, performance, and security. Students will apply materials learned in lectures and readings to design and build new systems components.
-
COS 320 - Compiling Techniques
The principal algorithms and concepts associated with translator systems. Topics include lexical analysis, syntactic analysis, parsing techniques, symbol table management, code generation and optimization, run time system design, implementation issues related to programming language design. Course will include a large-scale programming project utilizing the above topics. Three lectures. Prerequisites: 217 and 226 or instructor's permission.
-
COS 324 - Introduction to Machine Learning
This course is a broad introduction to different machine learning paradigms and algorithms and provides a foundation for further study or independent work in machine learning and data science. Topics include linear models for classification and regression, support vector machines, clustering, dimensionality reduction, deep neural networks, Markov decision processes, planning, and reinforcement learning. The goals of this course are three-fold: to understand the landscape of machine learning, how to compute the math behind techniques, and how to use Python and relevant libraries to implement and use various methods.
-
COS 326 - Functional Programming
An introduction to the principles of typed functional programming. Programming recursive functions over structured data types and informal reasoning by induction about the correctness of those functions. Functional algorithms and data structures. Principles of modular programming, type abstraction, representation invariants and representation independence. Parallel functional programming, algorithms and applications.
-
COS 333 - Advanced Programming Techniques
The practice of programming. Emphasis is on the development of real programs, writing code but also assessing tradeoffs, choosing among design alternatives, debugging and testing, and improving performance. Issues include compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop skills in these areas by working on their own code and in group projects. Two lectures. Prerequisites: 217 and 226 (as corequisite).
-
COS 343 - Algorithms for Computational Biology
This course introduces algorithms for analyzing DNA, RNA, and protein, the three fundamental molecules in the cell. Students will learn algorithms on strings, trees, and graphs and their applications in: sequence comparison and alignment; molecular evolution and comparative genomics; DNA sequencing and assembly; recognition of genes and regulatory elements; and RNA structure and protein interaction networks. Students will also implement algorithms and apply them to biological data.
-
COS 351 - Information Technology and Public Policy (also SOC 353/SPI 351) SA
This course surveys recurring, high-profile issues in technology policy and law. Each session will explore a challenging topic, including consumer privacy, data security, electronic surveillance, net neutrality, online speech, algorithmic fairness, cryptocurrencies, election security, and offensive operations. The seminar will also cover foundational technical concepts that affect policy and law, including internet architecture, cryptography, systems security, privacy science, and artificial intelligence. Materials and discussion will draw extensively from current events and primary sources.
-
COS 375 - Computer Architecture and Organization (also ECE 375) SEN
An introduction to computer architecture and organization. Instruction set design; basic processor implementation techniques; performance measurement; caches and virtual memory; pipelined processor design; design trade-offs among cost, performance, and complexity. Two classes Prerequisites: COS 217.
-
COS 397 - Junior Independent Work (B.S.E. candidates only)
Offered in the fall, juniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
COS 398 - Junior Independent Work (B.S.E. candidates only)
Offered in the spring, juniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
COS 417 - Operating Systems
A study of the design and analysis of operating systems. Topics include: processes, mutual exclusion, synchronization, semaphores, monitors, deadlock prevention and detection, memory management, virtual memory, processor scheduling, disk management, file systems, security, protection, distributed systems. Two lectures. Prerequisites: 217 and 226 or instructor's permission.
-
COS 418 - Distributed Systems
This course covers the design and implementation of distributed systems. Students will gain an understanding of the principles and techniques behind the design of modern, reliable, and high-performance distributed systems. Topics include server design, network programming, naming, concurrency and locking, consistency models and techniques, security, and fault tolerance. Modern techniques and systems employed at some of the largest Internet sites (e.g., Google, Facebook, Amazon) will also be covered. Through programming assignments, students will gain practical experience designing, implementing, and debugging real distributed systems.
-
COS 423 - Theory of Algorithms
Design and analysis of efficient data structures and algorithms. General techniques for building and analyzing algorithms. Introduction to NP-completeness. Two lectures and one precept. Prerequisites: 226 and 240 or instructor's permission.
-
COS 424 - Fundamentals of Machine Learning (also SML 302)
Computers have made it possible to collect vast amounts of data from a wide variety of sources. It is not always clear, however, how to use the data, and how to extract useful information from them. This problem is faced in a tremendous range of social, economic and scientific applications. The focus will be on some of the most useful approaches to the problem of analyzing large complex data sets, exploring both theoretical foundations and practical applications. Students will gain experience analyzing several types of data, including text, images, and biological data. Two 90-minute lectures. Prereq: MAT 202 and COS 126 or equivalent.
-
COS 426 - Computer Graphics
The principles underlying the generation and display of graphical pictures by computer. Hardware and software systems for graphics. Topics include: hidden surface and hidden line elimination, line drawing, shading, half-toning, user interfaces for graphical input, and graphic system organization. Two 90-minute lectures. Prerequisites: 217 and 226.
-
COS 429 - Computer Vision
An introduction to the concepts of 2D and 3D computer vision. Topics include low-level image processing methods such as filtering and edge detection; segmentation and clustering; optical flow and tracking; shape reconstruction from stereo, motion, texture, and shading. Throughout the course, there will also be examination of aspects of human vision and perception that guide and inspire computer vision techniques. Prerequisites: 217 and 226. Two lectures.
-
COS 432 - Information Security (also ECE 432)
Security issues in computing, communications, and electronic commerce. Goals and vulnerabilities; legal and ethical issues; basic cryptology; private and authenticated communication; electronic commerce; software security; viruses and other malicious code; operating system protection; trusted systems design; network security; firewalls; policy, administration and procedures; auditing; physical security; disaster recovery; reliability; content protection; privacy. Prerequisites: 217 and 226. Two lectures.
-
COS 433 - Cryptography (also MAT 473)
An introduction to the theory of modern cryptography. Topics covered include private key and public key encryption schemes, digital signatures, pseudorandom generators and functions, zero-knowledge proofs, and some advanced topics. Prerequisites: COS 240 is a required prerequisite or equivalent proof-based mathematical maturity. Two lectures.
-
COS 436 - Human-Computer Interaction
This course is a survey of the field of Human-Computer Interaction (HCI). We cover foundational as well as current research topics in HCI. The two core focus areas are interactive computing and social computing; breadth topics include AI+HCI, AR/VR, design tools, and accessibility. A semester-long group project that involves the design and implementation of an interactive system. Prerequisite COS 217 or permission of instructor. Two lectures and one precept.
-
COS 445 - Economics and Computing
Computation and other aspects of our lives are becoming increasingly intertwined. In this course we will study a variety of topics on the cusp between economics and computation. Topics to be covered include: games on networks, auctions, mechanism and market design, reputation, computational social choice. The aim of the course is two-fold: (1) to understand the game-theoretic issues behind systems involving computation such as online networks, and (2) to learn how algorithms and algorithmic thinking can help with designing better decision and allocation mechanisms in the offline world.
-
COS 448 - Innovating Across Technology, Business, and Marketplaces (also EGR 448)
This course introduces computer science and technology-oriented students to issues tackled by Chief Technology Officers: the technical visionaries and managers innovating at the boundaries of technology and business. These individuals are partners to the business leaders of the organization, not merely implementers of business goals. The course covers companies from ideation and early-stage startup, to growth-stage startup, to mature company, covering the most relevant topics at each stage, including ideation, financing, product-market fit, go-to-market approaches, strategy, execution, and management. Exciting industry leaders guest lecture.
-
COS 451 - Computational Geometry
Introduction to basic concepts of geometric computing, illustrating the importance of this new field for computer graphics, solid modelling, robotics, databases, pattern recognition, and statistical analysis. Algorithms for geometric problems. Fundamental techniques, for example, convex hulls, Voronoi diagrams, intersection problems, multidimensional searching. Two 90-minute lectures. Prerequisites: 226 and 240 or 341, or equivalent.
-
COS 461 - Computer Networks
This course studies computer networks and the services built on top of them. Topics include packet-switch and multi-access networks, routing and flow control, congestion control and quality-of-service, Internet protocols (IP, TCP, BGP), the client-server model and RPC, elements of distributed systems (naming, security, caching) and the design of network services (multimedia, peer-to-peer networks, file and Web servers, content distribution networks). Two lectures, one preceptorial. Prerequisite: 217.
-
COS 480 - Special Topics in Computer Science
These courses cover one or more advanced topics in computer science. The courses are offered only when there is an opportunity to present material not included in the established curriculum; the subjects vary from term to term. Three classes.
-
COS 481 - Special Topics in Computer Science
These courses cover one or more advanced topics in computer science. The courses are offered only when there is an opportunity to present material not included in the established curriculum; the subjects vary from term to term. Three classes.
-
COS 484 - Natural Language Processing
Recent advances have ushered in exciting developments in natural language processing (NLP), resulting in systems that can translate text, answer questions and even hold spoken conversations with us. This course will introduce students to the basics of NLP, covering standard frameworks for dealing with natural language as well as algorithms and techniques to solve various NLP problems, including recent deep learning approaches. Topics covered include language modeling, rep. learning, text classification, sequence tagging, syntactic parsing, and machine translation. The course will have programming assignments, a mid-term and a final project.
-
COS 487 - Theory of Computation (also MAT 407)
Studies the limits of computation by identifying tasks that are either inherently impossible to compute, or impossible to compute within the resources available. Introduces students to computability and decidability, Godel's incompleteness theorem, computational complexity, NP-completeness, and other notions of intractability. This course also surveys the status of the P versus NP question. Additional topics may include: interactive proofs, hardness of computing approximate solutions, cryptography, and quantum computation. Two lectures, one precept. Prerequisite: 240 or 341, or instructor's permission.
-
COS 488 - Introduction to Analytic Combinatorics (also MAT 474)
Analytic Combinatorics aims to enable precise quantitative predictions of the properties of large combinatorial structures. The theory has emerged over recent decades as essential both for the scientific analysis of algorithms in computer science and for the study of scientific models in many other disciplines. This course combines motivation for the study of the field with an introduction to underlying techniques, by covering as applications the analysis of numerous fundamental algorithms from computer science. The second half of the course introduces Analytic Combinatorics, starting from basic principles.
-
COS 497 - Senior Independent Work (B.S.E. candidates only)
Offered in the fall, seniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
COS 498 - Senior Independent Work (B.S.E. candidates only)
Offered in the spring, seniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.
-
ECE 206 - Contemporary Logic Design (also COS 306) SEL
Introduction of the basic concepts in logic design that form the basis of computation and communication circuits. This course will start from scratch and end with building a working computer on which we will run small programs.
-
ECE 381 - Networks: Friends, Money and Bytes (also COS 381)
This course is oriented around 20 practical questions in the social, economic, and technological networks in our daily lives. How does Google sell ad spaces and rank webpages? How does Netflix recommend movies and Amazon rank products? How do I influence people on Facebook and Twitter? Why doesn't the Internet collapse under congestion, and does it have an Achilles heel? Why does each gigabyte of mobile data cost $10, but Skype is free? How come Wi-Fi is slower at hotspots than at home, and what is inside the cloud of iCloud? In formulating and addressing these questions, we introduce the fundamental concepts behind the networking industry.
-
ECE 396 - Introduction to Quantum Computing (also COS 396)
This course will introduce the matrix form of quantum mechanics and discuss the concepts underlying the theory of quantum information. Some of the important algorithms will be discussed, as well as physical systems which have been suggested for quantum computing. Prerequisite: Linear algebra at the level of MAT 202, 204, 217, or the equivalent.
-
ECE 462 - Design of Very Large-Scale Integrated (VLSI) Systems (also COS 462)
Analysis and design of digital integrated circuits using deep sub-micron CMOS technologies as well as emerging and post-CMOS technologies (Si finFETs, III-V, carbon). Emphasis on design, including synthesis, simulation, layout and post-layout verification. Analysis of energy, power, performance, area of logic-gates, interconnect and signaling structures.
-
ECE 475 - Computer Architecture (also COS 475)
An in-depth study of the fundamentals of modern computer processor and system architecture. Students will develop a strong theoretical and practical understanding of modern, cutting-edge computer architectures and implementations. Studied topics include: Instruction-set architecture and high-performance processor organization including pipelining, out-of-order execution, as well as data and instruction parallelism. Cache, memory, and storage architectures. Multiprocessors and multicore processors. Coherent caches. Interconnection and network infrastructures. Prerequisite: ECE 375/COS 375 and ECE 206/COS 306 (or familiarity with Verilog).
-
MAE 345 - Introduction to Robotics (also COS 346/ECE 345/ROB 345)
Robotics is a rapidly-growing field with applications including unmanned aerial vehicles, autonomous cars, and robotic manipulators. This course will provide an introduction to the basic theoretical and algorithmic principles behind robotic systems. The course will also allow students to get hands-on experience through project-based assignments. Topics include inverse kinematics, motion planning, localization, mapping, vision, and reinforcement learning. Prerequisites: MAT 201 or 203, MAT 202 or 204, COS 126. Recommended ORF 309 and MAE 305. A.B. students ST requirement; B.S.E. students 1st-year science requirement. Two 90-minute lectures.
-
MAT 375 - Introduction to Graph Theory (also COS 342) QCR
The fundamental theorems and algorithms of graph theory. Topics include: connectivity, matchings, graph coloring, planarity, the four-color theorem, extremal problems, network flows, and related algorithms. Prerequisite: MAT202 or 204 or 217 or equivalent.
-
MUS 314 - Computer and Electronic Music through Programming, Performance, and Composition (also COS 314) QCR
An introduction to the fundamentals of computer and electronic music in the context of the Princeton Laptop Orchestra (PLOrk). The music and sound programming language ChucK, developed here at Princeton, will be used in conjunction with Max/MSP, another digital audio language, to study procedural programming, digital signal processing and synthesis, networking, and human-computer interfacing.
-
ORF 363 - Computing and Optimization for the Physical and Social Sciences (also COS 323) QCR
An introduction to several fundamental and practically-relevant areas of modern optimization and numerical computing. Topics include computational linear algebra, first and second order descent methods, convex sets and functions, basics of linear and semidefinite programming, optimization for statistical regression and classification, and techniques for dealing with uncertainty and intractability in optimization problems. Extensive hands-on experience with high-level optimization software. Applications drawn from operations research, statistics and machine learning, economics, control theory, and engineering.
-
QCB 455 - Introduction to Genomics and Computational Molecular Biology (also COS 455/MOL 455) QCR
This interdisciplinary course provides a broad overview of computational and experimental approaches to decipher genomes and characterize molecular systems. We focus on methods for analyzing "omics" data, such as genome and protein sequences, gene expression, proteomics and molecular interaction networks. We cover algorithms used in computational biology, key statistical concepts (e.g., basic probability distributions, significance testing, multiple testing correction, performance evaluation), and machine learning methods which have been applied to biological problems (e.g., classification techniques, hidden Markov models, clustering).
MUS Graduate Courses, With Description Hidden
-
COM 532 - Publishing Articles in Literature, Art, and Music Studies Journals (also ART 531/ENG 591/MUS 533)
-
MUS 501 - Musicology as a Profession
-
MUS 504 - Medieval Musical Style and Notation (also HLS 540)
-
MUS 510 - Extramural Research Internship
-
MUS 512 - Topics in Medieval Music (also MED 512)
-
MUS 513 - Topics in 19th- and Early 20th-Century Music
-
MUS 514 - Topics in 19th- and Early 20th-Century Music
-
MUS 515 - Topics in the History of Opera (also COM 517)
-
MUS 519 - Topics in Music from 1600 to 1800
-
MUS 520 - Topics in Music from 1600 to 1800
-
MUS 525 - Topics in Music from 1400 to 1600
-
MUS 527 - Seminar in Musicology
-
MUS 528 - Seminar in Musicology
-
MUS 531 - Composition
-
MUS 532 - Composition
-
MUS 534 - Ends and Means: Issues in Composition
-
MUS 537 - Points of Focus in 20th-Century Music
-
MUS 538 - Computer Music: Compositional Applications
-
MUS 540 - Composing Opera
-
MUS 541 - Seminar in Music Composition
-
MUS 542 - Instrumentation and Performance
-
MUS 545 - Contexts of Composition
-
MUS 548 - Creative Practice in Cultural Perspective
-
MUS 550 - Current Topics in Theory and Analysis
-
MUS 560 - Music Cognition Lab
-
MUS 561 - Music Cognition Lab