Course Descriptions

CS 100 Computer Science Freshman Seminar (1+0)
Prerequisite: None
Fulfils: CS major requirement
Provides a broad overview of the theory and practice of Computer Science.

CS 101 Programming Fundamentals (2+1)
Prerequisite: None
Fulfils: CS Foundation, Formal Reasoning
Motivates computer programming as a means to solve problems; introduces the basic components of problem solving: repetition, decision making, data storage and manipulation, input/output, modularity, top-down design; develops expertise in the corresponding constructs – variables, data types, iteration, conditionals, functions, file and console i/o, and recursion – in a high level programming language.

CS 102 Data Structure and Algorithms (3+1)
Prerequisite: CS 101
Fulfils: CS Foundation
Motivates the design of algorithms by exploring various algorithms for a single task: linear search and binary search, bubble sort, insertion sort, selection sort, merge sort, quick sort; introduces techniques to reason about and compare algorithms: asymptotic analysis and notation, Master theorem; introduces frequently used data structures: list, tree, graph, stack, queue; discusses and analyses basic operations on the data structures: infix, postfix, and prefix traversal, breadth-first and depth-first search, computation of graph properties.

CS 113 Discrete Mathematics (3+0)
Prerequisite: None
Fulfils: CS Foundation, Formal Reasoning
Equips students with essential mathematical tools that will be encountered in future Computer Science courses; develops a capacity for formal mathematical manipulation and abstract thought; topics include: propositional logic, predicate and quantifiers, sets, functions, sequences, summations, relations, partial orderings, proofs, mathematical induction, pigeonhole principle, permutations and combinations, graphs, graph isomorphism, Euler and Hamiltonian paths, trees.

CS 201 Data Structures II (3+0)
Prerequisite: CS 102
Fulfils: CS Kernel
Imparts proficiency in the use of commonly used data structures; introduces a few higher level data structures; develops critical judgment regarding the choice of data structures for a given situation; topics include: abstract data type, complexity, stack, queue, list, amortized analysis, array-list, linked list and skip list, hashing, binary tree, binary search tree (BST), randomized BST and treap, self-balancing in trees, AVL tree, B-tree, red-black tree, binary heap and meldable heap, Fibonacci heap, graphs and their representations, graph algorithms, trie, inverted index.

CS 224 Object Oriented Programming and Design Methodologies (3+1)
Prerequisite: CS 101
Fulfils: CS Kernel
Introduces object oriented and related memory concepts; motivates C++ as the language of choice; topics include: pointers and structs, objects, heap allocation, data encapsulation, classes, namespaces, constructors and destructors, virtual functions and destructors, operator overloading and standard input/output, inheritance and polymorphism, templates, standard library containers, and software design using UML 2.0.

CS 353 Software Engineering (3+0)
Prerequisite: CS 224, CS 355
Fulfils: CS Kernel
Approaches software engineering as the study and practice of a collection of concepts, techniques and tools which enable programmers to design, build, and maintain large software systems in a reliable and cost effective way; develops skills and understanding that function as the basis for many of the more advanced analysis and design practices encountered in the industry; topics include: systems development process, stakeholders and their roles, systems development project needs, software process methodologies, spiral and RUP, software analysis and requirement discovery, data modelling, SAD and OOAD, UML, use case diagrams, software project management, project scope, network diagrams and CPM, agile methodologies, XP, Scrum and FDD, class diagrams, realization of use cases, object oriented design, sequence diagrams, activity diagrams, state transition diagrams, user interface design, software testing, software construction and maintenance.

CS 355 Database Systems (3+1)
Prerequisite: CS 101 or CS 110
Fulfils: CS Kernel (Class of 2019 onward), CS Software Systems Elective (Class of 2018)
Explores in detail the theoretical and practical aspects of Relational Database management Systems (RDBMS); develops an understanding of database modeling, relational algebra, structured query language (SQL), components of Database Management System (DBMS), transaction management and concurrency control, database fine-tuning via indexing and partitioning, and database connectivity with front-end applications; discusses administrative aspects of database systems including database security, database management vs data warehousing vs data mining, and big data and its challenges.

CS 412 Algorithms II (3+0)
Prerequisite: CS CS 201
Fulfils: CS Kernel
Develops tools and techniques that aid in designing correct, efficient algorithms for computational problems and analyzing their correctness and running time; some of the discussed techniques are: greedy method, divide-and-conquer, dynamic programming, hashing, randomization, network flows, linear programming, Fast Fourier Transform, and techniques for thinking about solving problems in parallel; analysis tools include: recurrences, probabilistic analysis, amortized analysis, and potential functions.

CS 491 Kaavish I (0+3)
Prerequisite: CS 353
Fulfils: Capstone Project
Self-directed final year project carried out under the supervision of a faculty member; emphasizes solving a real world problem; integrates knowledge and skills accumulated over the entirety of the degree; first of a two-part sequence.

CS 492 Kaavish II (0+3)
Prerequisite: CS 491
Fulfils: Capstone Project
Self-directed final year project carried out under the supervision of a faculty member; emphasizes solving a real world problem; integrates knowledge and skills accumulated over the entirety of the degree; second of a two-part sequence.

Elective Courses

CS 212 Nature of Computation (3+0)
Prerequisite: CS 113, CS 201
Fulfils: CS Theory Elective
Develops the foundations for theoretical computer science; investigates fundamental challenges at the frontiers of theoretical computer science; provides opportunities to develop rigorous mathematical arguments; engages with classical ideas from theoretical computer science; topics include: proofs, languages, finite automata, grammars and push-down automata, Turing machines and the halting problem, oracles and computability, Gödel’s completeness and incompleteness theorems, circuit complexity, polynomial time and its justification, reduction, P, NP, and NP-completeness, Cook-Levin theorem, hardness of the P versus NP problem, randomness, P versus BPP, interactive proofs, zero-knowledge proofs, quantum computing, DNA computing, biological computing, physical limits of computation.

CS 261 Understanding Social Networks (3+0)
Prerequisite: None
Fulfils: CS Elective
Introduces the theory and methods for social network analysis coming from sociology, communications studies, mathematics and computer science; explores real-world networks from a variety of domains such as online social networks (e.g., Facebook and Twitter), political networks, informal money transfer, kinship and sexual networks; introduces methods and computational tools to analyze such social networks using modern software.

CS 317 Combinatorial Machine Learning (3+0)
Prerequisite: CS 113, CS 201, CS 212
Fulfils: CS Theory Elective
Approaches systematically the study of decision trees, decision rules and tests (reducts); considers decision trees and rules as combinatorial objects; studies the algorithms to construct and optimize these objects using dynamic programming and greedy heuristics; applies the techniques of decision trees and rules in machine learning; topics include: decision trees and rules and tests, sets of decision trees and rules and tests, lower and upper complexity bounds, algorithms for construction of decision trees and rules and tests, decision tables with many-valued decisions, approximate trees and rules and tests, applications to supervised machine learning.

CS 330 Computer Architecture (3+1)
Prerequisite: CS 130
Fulfils: CS Systems Elective
Studies the architecture of RISC-V processor that enables general purpose computing; develops hands-on expertise in developing complex logical components; topics include: instruction set architecture, addressing modes, processor design and computer arithmetic, pipelining, memory systems, fetch-execution cycle, processor implementation on FPGA using Verilog HDL.

CS 342 Game Development (3+0)
Prerequisite: CS 224
Fulfils: CS Elective
Presents the principles of game design and development; develops programming capability to develop games; provides hands-on game development experience as part of a team; uses tools for art creation, music and animations and other game assets; explores the use of mathematics and physics in game design; presents the application of artificial intelligence in computer games; highlights porting issues on various platforms.

CS 351 Artificial Intelligence (3+0)
Prerequisite: CS 201, CS 224
Fulfils: CS Elective
Studies the major areas of artificial intelligence (AI): problem-solving, decision-making, learning, planning, and reasoning; topics include: intelligent search techniques, games and adversarial search using minimax and alpha-beta pruning, supervised learning via decision trees, naïve Bayes, artificial neural networks, K-means clustering, reasoning via first-order logic, Bayesian networks, evolutionary algorithms; explores the areas of computer vision, robotics, and deep learning; applies the covered AI techniques to real-world problems.

CS 370 Web and Mobile Development (2+1)
Prerequisite: CS 224, CS 355
Fulfils: CS Elective
Develops expertise in current web and mobile development tools; topics include: HTML, CSS, JavaScript, building an HTML website, animation and effects, Visual Studio and C#, .NET and MVC, views, controllers, models, working with databases, authentication and authorization, security, mobile development, Ionic.

CS 400 Computer Science Senior Seminar (1+0)
Prerequisite: None
Fulfils: CS Elective
Provides insight into a few current research areas in Computer Science; develops skills in reading, understanding, and presenting research papers and presentations in Computer Science.

CS 416 Algorithms for Machine Learning (3+0)
Prerequisite: CS 102 or CS 111 or CS 224, MATH 310 or EE 354
Fulfils: CS Theory Elective
Explores in depth current machine learning algorithms; develops hands-on expertise with popular programming libraries; applies the algorithms on real world problems; topics include: unsupervised learning, autoencoders, generative adversarial networks, word embedding, recurrent neural networks, backpropagation through time, gated recurrent units, long short term memory networks, Bayesian methods, conjugate priors, Gaussian mixture model, expectation maximization algorithm, latent Dirichlet allocation, and Markov chain Monte Carlo methods.

CS 421 Compiler Construction (3+0)
Prerequisite: CS 212
Fulfils: CS Elective

CS 451 Computational Intelligence (3+0)
Prerequisite: CS 351
Fulfils: CS Elective
Studies different nature-inspired computational methods; provides hands-on experience of applying these techniques to solve complex optimization problems; topics include: evolutionary computation, swarm intelligence, reinforcement learning, fuzzy logic, and artificial neural networks.

CS 457 Data Science Techniques (3+0)
Prerequisite: CS 355, MATH 310 or EE 354
Fulfills: CS Elective
Develops the skills to leverage statistics and programming to make predictions, optimize outcomes, and help guide business decisions using data; explores techniques for drawing conclusions and predicting outcomes from data; provides hands-on exposure to an ecosystem of powerful tools that apply data science techniques to real data sets; topics include: data manipulation, data visualization, supervised and unsupervised learning, descriptive and inferential statistics, and data visualization.