View undergraduate course grid View graduate course grid
This course builds directly on the foundation developed in PAC I, covering the essentials of computer organization through the study of assembly language programming and C, as well as introducing the students to the analysis of algorithms. Topics include: (1) Assembly language programming for the Intel chip family, emphasizing computer organization, the Intel x86 instruction set, the logic of machine addressing, registers and the system stack. (2) Programming in the C language, a general-purpose programming language which also has low-level features for systems programming. (3) An introduction to algorithms, including searching, sorting, graph algorithms and asymptotic complexity. Examples and assignments reinforce and refine those first seen in PAC I and often connect directly to topics in the core computer science graduate courses, such as Programming Languages, Fundamental Algorithms, and Operating Systems
This course builds directly on the foundation developed in PAC I, covering the essentials of computer organization through the study of assembly language programming and C, as well as introducing the students to the analysis of algorithms. Topics include: (1) Assembly language programming for the Intel chip family, emphasizing computer organization, the Intel x86 instruction set, the logic of machine addressing, registers and the system stack. (2) Programming in the C language, a general-purpose programming language which also has low-level features for systems programming. (3) An introduction to algorithms, including searching, sorting, graph algorithms and asymptotic complexity. Examples and assignments reinforce and refine those first seen in PAC I and often connect directly to topics in the core computer science graduate courses, such as Programming Languages, Fundamental Algorithms, and Operating Systems
Reviews a number of important algorithms, with emphasis on correctness and efficiency. The topics covered include solution of recurrence equations, sorting algorithms, selection, binary search trees and balanced-tree strategies, tree traversal, partitioning, graphs, spanning trees, shortest paths, connectivity, depth-first and breadth-first search, dynamic programming, and divide-and-conquer techniques.
Reviews a number of important algorithms, with emphasis on correctness and efficiency. The topics covered include solution of recurrence equations, sorting algorithms, selection, binary search trees and balanced-tree strategies, tree traversal, partitioning, graphs, spanning trees, shortest paths, connectivity, depth-first and breadth-first search, dynamic programming, and divide-and-conquer techniques.
Discusses the design, use, and implementation of imperative, object-oriented, and functional programming languages. The topics covered include scoping, type systems, control structures, functions, modules, object orientation, exception handling, and concurrency. A variety of languages are studied, including C++, Java, Ada, Lisp, and ML, and concepts are reinforced by programming exercises.
Discusses the design, use, and implementation of imperative, object-oriented, and functional programming languages. The topics covered include scoping, type systems, control structures, functions, modules, object orientation, exception handling, and concurrency. A variety of languages are studied, including C++, Java, Ada, Lisp, and ML, and concepts are reinforced by programming exercises.
This course teaches the design and implementation techniques essential for engineering robust networks. Topics include networking principles, Transmission Control Protocol/Internet Protocol, naming and addressing (Domain Name System), data encoding/decoding techniques, link layer protocols, routing protocols, transport layer services, congestion control, quality of service, network services, programmable routers and overlay networks.
Problems and objectives of computer graphics. Vector, curve, and character generation. Interactive display devices. Construction of hierarchical image list. Graphic data structures and graphics languages. Hidden-line problems; windowing, shading, and perspective projection. Curved surface generation display.
This course introduces the fundamental concepts and methods of machine learning, including the description and analysis of several modern algorithms, their theoretical basis, and the illustration of their applications. Many of the algorithms described have been successfully used in text and speech processing, bioinformatics, and other areas in real-world products and services. The main topics covered are probability and general bounds; PAC model; VC dimension; perceptron, Winnow; support vector machines (SVMs); kernel methods; decision trees; boosting; regression problems and algorithms; ranking problems and algorithms; halving algorithm, weighted majority algorithm, mistake bounds; learning automata, Angluin-type algorithms; and reinforcement learning, Markov decision processes (MDPs).
Discusses the design of general and specialized Web search engines and the extraction of information from the results of Web search engines. Topics include Web crawlers, database design, query language, relevance ranking, document similarity and clustering, the “invisible” Web, specialized search engines, evaluation, natural language processing, data mining applied to the Web, and multimedia retrieval.
An introduction to natural language processing, with an emphasis on methods for creating structured knowledge from text. Basic syntactic structures of English; constituent and dependency representations and parsers. Hidden Markov Models and maximum entropy models for part-of-speech and name tagging. Finite-state grammars and partial parsing. Probabilistic parsing. Lexical semantics. Relation and event extraction. Reference resolution. Machine translation. Supervised, semi-supervised, and active learning of linguistic models. Neural network models. There will be several pencil-and-paper exercises, several computer exercises, a final project, and a final exam.
This is a capstone course. A course in computer networks and large-scale distributed systems. Teaches the design and implementation techniques essential for engineering both robust networks and Internet-scale distributed systems. The goal is to guide students so they can initiate and critique research ideas in networks and distributed systems and implement and evaluate a working system that can handle a real-world workload. Topics include routing protocols, network congestion control, wireless networking, peer-to-peer systems, overlay networks and applications, distributed storage systems, and network security.
This course introduces students to the basic concepts of computational finance and explores various relations between computer science and finance. In particular, the course will introduce both theoretical and practical aspects of finance with an emphasis on the relation between real-life applications and these concepts. The course will cover various issues such as high-frequency market simulators and frameworks for performing statistical simulations. Various financial instruments will also be discussed and modeled. Emphasis will be put on efficiency and proper design. Object-oriented concepts will be discussed and put to use in real life applications.
This course is about industrial scale machine learning, covering tricks to make intractable problems tractable, algorithmic design, data processing infrastructures, parallel learning, and dealing with weak labels, sparse data, and streaming data. We plan to cover everything from practical tools to the theory necessary to frame and think about solving large-scale prediction problems.
CANCELLED
Social Networks is a specific example of many forms of networks that have become ubiquitous in our modern society. The World Wide Web enables information flows among vast number of humans; facebook, orkut, friendster, diaspora, etc. connect small groups of friends; amazon, ebay, etc. provide opportunities for trading, etc. These networks determine our information, influence our opinions, and shape our political attitudes. They also link us, often through important but weak ties, to other humans. Their origin is biological: going back to quorum-sensing, swarming, flocking, social grooming, gossip, etc. Yet, as we have connected our social networks to traditional human institutions (markets, justice systems, education, etc.) through new technologies, the underlying biology has become obscured, but not dormant. Economic markets also look much more like networks than anonymous marketplaces. Firms interact with the suppliers and customers in a Web-like supply chains. Systemic risk in financial markets often results from the counterparty risks created within this financial network. This course will introduce the tools for the study of networks. It will show how certain common principles permeate the functioning of these diverse networks: e.g., issues related to robustness, fragility, and interlinkages etc.
In this course, students learn to develop production quality software. Lectures present real-world development practices that maximize software correctness and minimize development time. A special emphasis is placed on increasing proficiency in a particular programming language by doing weekly development projects and participating in code reviews. Assignments become more sophisticated as the semester progresses, eventually incorporating unit tests, build scripts, design patterns, and other techniques. The course culminates with an assignment that requires students to contribute to an open-source project of their choice.
This course introduces students to probabilistic models and inference, two fundamental concepts in machine learning and artificial intelligence. We focus on a class of statistical models called graphical models that describe multivariate probability distributions. Two well-known examples are Bayesian networks and Markov random fields. The first half of the course will cover exact and approximate probabilistic inference, including advanced topics such as variational methods and linear programming relaxations. The second half of the course will be on learning graphical models from data and on the task of structured prediction. Prerequisites: Statistical Natural Language Processing, Introduction to Machine Learning, Machine Learning and Pattern Recognition , Foundations of Machine Learning. In addition, students should have a solid understanding of basic concepts from probability (e.g., Bayes' rule, multivariate distributions, conditional independence) and algorithms (e.g., dynamic programming, graphs, shortest paths, complexity)
The course will teach how to develop online casual multiplayer games using open technologies such as GWT, AppEngine, DHTML, JSON, AJAX, long-polling, HTML5, XMPP, etc. The course has two big projects: A game: A multiplayer game (realtime/turn-based, 2-8 players) with graphics for the web and mobile, practice mode with artificial-intelligence, and other features (instructions&tutorial;, resize, save&load;, viewers, etc) A platform feature: the gaming platform will integrate with facebook & google+ & android (& maybe iphone), and will have features like feeds, notifications, invites, credits, user info, messages, matching players, game API documentation and tutorial, server-side features (game history, saved games, ranking system, leaderboards, tournaments, abuse-report system). The course will also teach about ranking systems, artificial intelligence for games, leaderboards, tournaments, realtime and turn-based games, location awareness, and advanced UI such as touch screen and tilt. The course will not concern with 3D graphics, animations, or sounds.
This course will introduce technologies at the foundation of the Big Data movement that have facilitated scalable management of vast quantities of data collected through realtime and near realtime sensing. We will also explore the tools enabling the acquisition of near realtime data in the social domain, the fusion of those data when in flight and at rest, and their meaningful representation in graphical visualizations. Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by developing and demonstrating a software project of their choosing. Class time will be set aside for project proposal and final demo.
Software is increasingly pervading our lives and is now routinely deployed in safety and security critical systems. While this technological progress benefits society greatly, it also creates a new threat: software errors with severe consequences including health hazards, financial repercussions, and security vulnerabilities. How can one ensure that software works reliably? Program Verification is the area of computer science that studies mathematical methods to answer this question. In the last decade, Program Verification has brought forth sophisticated tools that assist software engineers in building reliable software. In this course, we will explore these tools. We will learn how they are used to enable rigorous software development, and we will study the algorithms that work under their hoods. The course will be accompanied by programming projects making use of these tools.
In this course, we will cover architectural aspects and capabilities of modern GPUs (graphics processing unit) and will learn how to program GPUs to solve different type of problems. Many computations can be performed much faster on the GPU than on a traditional processors. This is why GPUs are present now in almost all computers; and the majority of Top 500 supercomputers in the world are built around GPUs. GPUs are now used for a diverse set of applications not only traditional graphics applications; this introduces the concept of general-purpose GPUs or GPGPUs, which is then main subject of this course.
Building Responsive Websites explores the design and implementation of websites that gracefully support the full range of computing devices, from smartphones to desktop computers. It explores how to (1) organize content, (2) mark it up in HTML, (3), style it in CSS, and (4) add dynamic behavior with JavaScript. It is structured as a project course; the entire class, together, designs and implements a production-quality responsive website.
This course provides a hands-on comprehensive study of Cloud concepts and capabilities across the various Cloud service models including Infrastructure as a Service (IaaS), Platform as a Service (PaaS), Software as a Service (SaaS), and Business Process as a Service (BPaaS). IaaS topics start with a detailed study the evolution of infrastructure migration approaches from VMWare/Xen/KVM virtualization, to adaptive virtualization, and Cloud Computing / on-demand resources provisioning. Mainstream Cloud infrastructure services and related vendor solutions are also covered in detail. PaaS topics cover a broad range of Cloud vendor platforms including AWS, Google App Engine, Microsoft Azure, Eucalyptus, OpenStack and others as well as a detailed study of related platform services such as storage services that leverage Google Storage, Amazon S3, Amazon Dynamo, or other services meant to provide Cloud resources management and monitoring capabilities. The SaaS and PaaS topics covered in the course will familiarize students with the use of vendor-maintained applications and processes available on the Cloud on a metered on-demand basis in multi-tenant environments. The course also covers the Cloud security model and associated challenges and delves into the implementation and support of High Performance Computing and Big Data support capabilities on the Cloud. Through hands-on assignments and projects, students will learn how to configure and program IaaS services. They will also learn how to develop Cloud-based software applications on top of various Cloud platforms, how to integrate application-level services built on heterogeneous Cloud platforms, and how to leverage SaaS and BPaaS solutions to build comprehensive end-to-end business solutions on the Cloud.
This course is intended as a graduate level introduction to the study of euclidean lattices. We will cover both the mathematical foundations, such as the Minkowksi and transference theorems, as well the algorithmic study of lattice problems, such as the shortest and closest vector problems. The course will emphasize the connections with convex geometry, such as Kinchine's flatness theorem, and the connections with the lattice based cryptography, such as Ajtai's seminal work on worst case to average case reductions.
This is a capstone course that connects students directly with real-world information technology problems. The goal of this course is to teach the skills needed for success in real-world information technology via a combination of classroom lectures and practical experience with large projects that have been specified by local “clients.” The typical clients are primarily companies, but can also be government agencies or nonprofit organizations. Each project lasts for the entire semester and is designed to involve the full software project life cycle. Examples of such projects are development of software to solve a business problem, including specifying requirements, writing and testing prototype code, and writing a final report; and evaluation of commercial software to be purchased to address a business problem, including gathering requirements, designing an architecture to connect the new software with existing systems, and assessing the suitability of available software products.
This is a capstone course that connects students directly with real-world information technology problems. The goal of this course is to teach the skills needed for success in real-world information technology via a combination of classroom lectures and practical experience with large projects that have been specified by local “clients.” The typical clients are primarily companies, but can also be government agencies or nonprofit organizations. Each project lasts for the entire semester and is designed to involve the full software project life cycle. Examples of such projects are development of software to solve a business problem, including specifying requirements, writing and testing prototype code, and writing a final report; and evaluation of commercial software to be purchased to address a business problem, including gathering requirements, designing an architecture to connect the new software with existing systems, and assessing the suitability of available software products.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.
TBA
The need for floating-point arithmetic, the IEEE floating-point standard, and the importance of numerical computing in a wide variety of scientific applications. Fundamental types of numerical algorithms: direct methods (e.g., for systems of linear equations), iterative methods (e.g., for a nonlinear equation), and discretization methods (e.g., for a differential equation). Numerical errors: can you trust your answers? Uses graphics and software packages such as Matlab. Programming assignments.
Students majoring in the department are permitted to work on an individual basis under the supervision of a full-time faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.