Computer Science

Mission Statement

The mission of the Department of Computer Science is to serve the global community by providing high-quality computer science education, research, and professional service and to advance computer technology in areas of selective excellence.

Educational Objectives

The computer science undergraduate program of study has been developed to prepare graduates who, in the years following graduation, will earn an advanced degree in computer science or related disciplines or a professional degree (such as law, business, medicine), or be gainfully employed in the computer or IT industry with the ability to apply skills and knowledge learned while an undergraduate at GW, and who will conduct themselves professionally and ethically, work effectively in teams, and communicate effectively to both technical and non-technical audiences.

Educational Outcomes

By the time of graduation, a computer science student will have:

  1. learned to apply principles from the fundamentals of computer science, including discrete structures, data structures, algorithms, and the theory of computing;
  2. acquired an understanding of the hardware and software architecture of computer systems, including architecture, operating systems, databases, languages, and networks;
  3. participated effectively in team projects and team activities, and acquired an understanding of:
    1. the overall social and professional context in which computing activities take place;
    2. the global and local impact of computing; and
    3. professional, ethical, legal, security, and social issues and responsibilities;
  4. demonstrated an application of software engineering principles through completion of a challenging capstone project requiring specification, design, and implementation; and
  5. conveyed technical knowledge in an effective manner through written and oral communications.

Master's programs

Doctoral program

See the School of Engineering and Applied Science for programs leading to the doctoral degree.

Professors S.Y. Berkovich, R.S. Heller, H.-A. Choi, A. Youssef (Chair), B. Narahari, J.K. Hahn, R. Simha

Associate Professors S. Rotenstreich, A. Bellaachia, X. Cheng, P. Vora, N. Zhang, M. Diab

Assistant Professors G.A. Parmer, E. Drumwright, C. Monteleoni, T. Wood, G. Sibley

Explanation of Course Numbers

  • Courses in the 1000s are primarily introductory undergraduate courses
  • Those in the 2000–4000s are upper-division undergraduate courses that can also be taken for graduate credit with permission and additional work
  • Those in the 6000s and 8000s are for master’s, doctoral, and professional-level students
  • The 6000s are open to advanced undergraduate students with approval of the instructor and the dean or advising office

Note: With the exception of CSCI 1010, CSCI courses numbered CSCI 1041 and below may not normally be counted toward degree requirements for computer science majors, unless approved by a department advisor. Credit may be earned for only one course in each of the following pairs of courses:

CSCI 2441Database Systems and Team Projects
or CSCI 6441 Database Management Systems
CSCI 3362Probability for Computer Science
or CSCI 6362 Probability for Computer Science
CSCI 4223Principles of Programming Languages
or CSCI 6223 Principles of Programming Languages
CSCI 4331Cryptography
or CSCI 6331 Cryptography
CSCI 4341Continuous Algorithms
or CSCI 6341 Continuous Algorithms
CSCI 4364Machine Learning
or CSCI 6364 Machine Learning
CSCI 4431Computer Networks I
or CSCI 6431 Computer Networks
CSCI 4521Introduction to Mobile Robotics
or CSCI 6521 Introduction to Mobile Robotics
CSCI 4525Autonomous Robotics: Manipulation
or CSCI 6525 Autonomous Robotics: Manipulation
CSCI 4527Introduction to Computer Vision
or CSCI 6527 Introduction to Computer Vision
CSCI 4531Computer Security
or CSCI 6531 Computer Security
CSCI 4532Information Policy
or CSCI 6532 Information Policy
CSCI 4541Network Security
or CSCI 6541 Network Security

CSCI 1010. Computer Science Orientation. 1 Credit.

Introduction to the field of computer science. Basic and emerging concepts and applications of computer science. Hands-on experiments and team projects. Technical resources, professional ethics, writing, and presentation.

CSCI 1011. Introduction to Programming with Java. 3 Credits.

An introductory course in programming a computer, using the Java language. Object-oriented programming, classes, applets, methods, control structures, inheritance, overriding, GUI widgets, containers, and exceptions.

CSCI 1020. Applications Software. 3 Credits.

Introduction to the use of microcomputer hardware and software for word processing (e.g., Word), spreadsheets (e.g., Excel), and database management (e.g., Access), with emphasis on the use of computers to solve typical problems in academia and business.

CSCI 1021. Introduction to Computers and the Internet. 3 Credits.

Survey of computers and languages. Introduction to computer programming. History of computing and networking. The effects of computing and the Internet on our lives. E-commerce and new technologies. Concepts of web page design.    (Fall and spring).

CSCI 1022. Introduction to Internet Technology. 3 Credits.

An introductory course for non-technical students who wish to obtain a better understanding of the hardware and software that comprise the Internet. Information transfer over fiber, routing and switching of packets, methods of information transfer, protocols, software, ISP, web pages and multimedia.

CSCI 1023. Introduction to Web Software Development. 3 Credits.

Introduction to the Internet. Topics include address and URL to find your way, linking to a URL, HTML and web programming, building a web page, building a home page, client-server techniques.    (Fall and spring).

CSCI 1030. Technology and Society. 3 Credits.

Historical, social, and ethical issues of the technological age. Ethical principles and skills and social analysis skills needed to evaluate the design and implementation of complex computer systems. Privacy, computer crime, equity, intellectual property, professional ethics. Data collection, analysis, and presentation; technical writing and oral communication skills.

CSCI 1030W. Technology and Society. 3 Credits.

Historical, social, and ethical issues of the technological age. Ethical principles and skills and social analysis skills needed to evaluate the design and implementation of complex computer systems. Privacy, computer crime, equity, intellectual property, professional ethics. Data collection, analysis, and presentation; technical writing and oral communication skills.

CSCI 1041. Introduction to FORTRAN Programming. 3 Credits.

Structured programming with high-level language using FORTRAN. Control structures. Different data types with emphasis on real and complex number computations. Arrays used with vector and matrix manipulation to solve simultaneous equations. External subroutines for mathematical and graphical applications. Prerequisite or corequisite: MATH 1220 or MATH 1231.

CSCI 1111. Introduction to Software Development. 3 Credits.

Introduction to the solution of problems on a digital computer using the Java language. Object-oriented programming concepts; documentation techniques; design of test data. Writing, debugging, and running programs in an interactive computing environment.

CSCI 1112. Algorithms and Data Structures. 3 Credits.

Object-oriented software. Inheritance, exceptions, development of classes, event-driven programming. Data structures such as trees, lists, stacks, queues, and strings. Sorting and searching. Introduction to algorithm performance prediction. May be taken for graduate credit by students in fields other than computer science. Prerequisites: CSCI 1111 with a grade of C or higher; and MATH 1220 or MATH 1231.   (Spring).

CSCI 1121. Introduction to C Programming. 3 Credits.

Structured programming with the C language. Control structures. Data types. Use of pointers. Matrix manipulation to solve simultaneous equations. External subroutines for mathematical and graphical applications. Introduction to C> Complex number representation. Corequisite: MATH 1220 or MATH 1231.

CSCI 1131. Introduction to Programming with C. 3 Credits.

Intensive introductory course for students with a science, mathematics, or other quantitative background. Solution of numerical and nonnumerical problems on a digital computer using C programming language in a Unix environment. Recommended for graduate and advanced undergraduate students in other departments. Prerequisite: MATH 1232 .

CSCI 1132. Data Structures and Software Design. 3 Credits.

Data structures such as trees, lists, stacks, queues, and strings. Big-O notation and introduction to algorithm performance analysis. Solutions of numerical and non-numerical problems. Use of I/O libraries. Application development and software testing. Prerequisite: CSCI 1121.

CSCI 1311. Discrete Structures I. 3 Credits.

Mathematics for computer science. Sets, functions, sequences. Propositional and predicate calculus, formal proofs, mathematical induction. Matrices, semigroups, groups, isomorphism. Relations, partitions, equivalence relations, trees, graphs. May be taken for graduate credit by students in fields other than computer science. Prerequisites: MATH 1220 or MATH 1231.    (Fall).

CSCI 2113. Software Engineering. 3 Credits.

Programming techniques and software development in one or more programming languages. Application development with GUIs, database access, threads, Web programming. Prerequisites: CSCI 1112 with a grade of C or higher; MATH 1231. (Fall).

CSCI 2312. Discrete Structures II. 3 Credits.

Basic discrete techniques in computer science. Proofs, algebraic structures, number theory, graph theory, (coloring and planar graphs, communication networks), advanced recurrences, advanced sums, approximations and asymptotics. Prerequisites: CSCI 1311 with a grade of C or higher; MATH 1231. (Fall).

CSCI 2441. Database Systems and Team Projects. 3 Credits.

Design of relational database systems, relational query languages, normal forms, design of database applications. Team software development, integration, and testing. Professional code of ethics, intellectual property, privacy, software copyrights. Corequisite: CSCI 2113.

CSCI 2441W. Database Systems&Team Projects. 3 Credits.

Design of relational database systems, relational query languages, normal forms, design of database applications. Team software development, integration, and testing. Professional code of ethics, intellectual property, privacy, software copyrights. Corequisite: CSCI 2113.

CSCI 2461. Computer Architecture I. 3 Credits.

Number representation, computer arithmetic, digital logic and circuit design. Computer organization, micro-architecture and processor datapath, assembly and machine language programming. Introduction to memory organization and the hardware–software interface. Implementation of high-level language constructs. Prerequisites: CSCI 1112 with a grade of C or higher; CSCI 1311.    (Fall).

CSCI 3212. Algorithms. 4 Credits.

Core concepts in design and analysis of algorithms, data structures, and problem-solving techniques. Hashing, heaps, trees. Graph algorithms, searching, sorting, graph algorithms, dynamic programming, greedy algorithms, divide and conquer, backtracking. Combinatorial optimization techniques. NP-completeness. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 3221. Programming Languages. 3 Credits.

Programming language and software design fundamentals. Writing programs in a non-procedural programming language. Closures; procedure and data abstraction; object-oriented, procedural, and declarative programming; continuation compilation and interpretation, and syntactic extension. Advanced control structures appropriate for parallel programming. Prerequisite: CSCI 2113.

CSCI 3240. Pre-Senior Design with Research. 3 Credits.

For students who wish to combine a research project with their Senior Design project. The goal is to complete the research, under a faculty mentor, within three semesters. Prerequisite: CSCI 3212, CSCI 3313, CSCI 3411, and permission of instructor.

CSCI 3313. Foundations of Computing. 4 Credits.

Theoretical foundations. Formal languages and automata; regular expressions, context-free languages; finite state automata and pushdown automata; Turing machines and computability, recursive function theory, undecidability. Compiler construction. Lexical and syntax analysis; parsing and parsing techniques; lexical and parsing tools. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3362. Probability for Computer Science. 3 Credits.

Introduction to probability and statistics for computer scientists. Random variables. Conditional probability, independence, correlation. Applications to computer science, including information theory, data compression, coding, inference, Markov chains, introduction to randomized algorithms. Prerequisite: MATH 1232, CSCI 1311; or permission of instructor.

CSCI 3410. Systems Programming. 3 Credits.

Concepts underlying all computer systems. Processor operation, hierarchical memory systems, embedded boards, data acquisition, actuation, and systems software such as compilers, linkers, and operating systems from the programmer’s perspective. Use of embedded platforms to examine how programs interact with and are constrained by hardware. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3411. Operating Systems. 4 Credits.

Process management, process state, concurrent processing, synchronization, events. Operating system structure, the kernel approach, processor scheduling, task switching, monitors, threads. System management, memory management, process loading, communication with peripherals. File systems. Socket programming, packets, Internet protocols. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3462. Computer Architecture II. 0-3 Credits.

Computer organization. Design of computer components and of a simple computer. Instruction set and assembly language of a pipelined RISC processor. Introduction to high-performance processors. Design of cache, main memory, and virtual memory systems. Program performance models and system performance. The I/O structure and peripherals. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3571. Introduction to Bioinformatics. 3 Credits.

Same as BISC 2584.

CSCI 3907. Special Topics. 1-3 Credits.

Topic to be announced in the Schedule of Classes.    (Fall and spring).

CSCI 3908. Research. 1-3 Credits.

Applied research and experimentation projects, as arranged. Prerequisite: junior or senior status.

CSCI 4222. Theory of Computer Translators. 3 Credits.

Lexical and syntax analysis, regular expressions, context-free grammars, parsing techniques, top-down parsing, efficient parsing, syntax-directed translation, intermediate formats, flow of control, block structures, procedure calls, symbol tables, run-time storage, error-detection and recovery, code optimization, code generation. Prerequisite: CSCI 3462, CSCI 3313.

CSCI 4223. Principles of Programming Languages. 0-3 Credits.

Fundamental concepts underlying design of programming languages. Detailed study of functional and object-oriented computational models. Types, evaluation, abstraction, control flow, modules, mutation, laziness, polymorphism, subtyping, inheritance. Practice learning new languages. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 4235. Development of Open-Source Software. 3 Credits.

Design, process, tools, and culture of open-source software development. Cross-platform development and testing. Geographic dispersal, social and team dynamics, licenses (GPL, BSD, other); code reuse (modular code, shared libraries); very-large-scale distributed development techniques (CVS, Bugzilla, release-management, mailing-lists). May be taken for graduate credit. Prerequisite: CSCI 2113 or CSCI 6221.

CSCI 4237. Software Design for Handheld Devices. 3 Credits.

Design of interactive software for handheld devices. Event driven programming, user interface design practices, memory management, handheld debugging techniques. May be taken for graduate credit. Prerequisite: CSCI 2113 or CSCI 6221.

CSCI 4243. Capstone Design Project I. 3 Credits.

Planning, design, and construction of the capstone project. Economic analysis of the project. Application of software engineering principles, including software requirements, specification, requirements engineering, reuse, documentation, verification/validation, testing, configuration management. Report writing and presentations. Prerequisite: senior status.

CSCI 4243W. Capstone Design Project I. 4 Credits.

Planning, design, and construction of the capstone project. Economic analysis of the project. Application of software engineering principles, including software requirements, specification, requirements engineering, reuse, documentation, verification/validation, testing, configuration management. Report writing and presentations. Prerequisite: senior status.

CSCI 4244. Capstone Design Project II. 4 Credits.

Continuation of CSCI 4243. Planning, design, and construction of the capstone project. Economic analysis of the project. Application of software engineering principles, including software requirements, specification, requirements engineering, reuse, documentation, verification/validation, testing, configuration management. Report writing and presentations. Prerequisite: senior status.

CSCI 4314. Discrete Analysis-Computer Sci. 3 Credits.

Combinatorial theory: permutations and combinations, generating functions, recurrence relations, the principle of inclusion and exclusion. Block designs. Applications to the analysis of algorithms, computer organization, VLSI placement, coding theory, simulation, and other problems. May be taken for graduate credit. Prerequisite: CSCI 1311 or permission of instructor.

CSCI 4331. Cryptography. 3 Credits.

Algorithmic principles of cryptography from Julius Caesar to public key cryptography. Key management problems and solutions. Cryptographic systems and applications. Prerequisite: CSCI 2312, CSCI 3313, CSCI 3212.

CSCI 4341. Continuous Algorithms. 3 Credits.

Overview of structures in continuous mathematics from a computational viewpoint. Main topics include continuous system simulation, computational modeling, probability, statistical techniques, next-event simulation, algorithms for continuous optimization, machine learning, neural networks, statistical language processing, robot control algorithms. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 4342. Computational Linear Algebra and Applications. 3 Credits.

Application of linear algebra to computer science and engineering, with a computational perspective. Topics include points, vectors, matrices, and their programming representations; algorithms for 3D transformations, pose and viewpoint estimation; linear equations, independence, rank; algorithms for matrix decompositions, reduction of dimension; computation with large matrices, under and over-determined systems; applications to large data, computer vision, text processing. Prerequisite: CSCI 2113.

CSCI 4361. Simulation Methods. 3 Credits.

Computational methods for continuous and discrete system simulation. Effects of computer software and hardware architectures on computational precision and accuracy requirements. Random-number generation and testing. Calibration and scaling technique. Verification and validation technique. May be taken for graduate credit. Prerequisite: CSCI 2113.

CSCI 4364. Machine Learning. 3 Credits.

Overview of core machine learning techniques: nearest-neighbor, regression, classification, perceptron, kernel methods, support vector machine (SVM), logistic regression, ensemble methods, hidden Markov models (HMM), non-parametrics, online learning, active learning, clustering, feature selection, pa-rameter tuning, and cross-validation. Prerequisite: CSCI 3212, CSCI 3362, MATH 2184; or permission of instructor.

CSCI 4415. Real-Time and Embedded Systems. 3 Credits.

Development of software for real-time control of physical systems. Reliability and fault tolerance, exceptions and exception handling, reliability and concurrent processes, timeouts, deadline scheduling, shared-memory and message-based device drivers. May be taken for graduate credit. Prerequisite: CSCI 2113.

CSCI 4417. UNIX System Programming. 3 Credits.

Exposure to UNIX internals. Use of UNIX system calls and utilities in conjunction with script and C programs. RFCs, GNU project, and other collaborative traditions in the UNIX community. May be taken for graduate credit. Prerequisite: Senior status or 1 year of C programming and UNIX user experience.

CSCI 4418. UNIX System Administration. 3 Credits.

System administration for the stand-alone system or small networks. Installation of two or more UNIX variants (Linux, FreeBSD, Solaris) on Intel or Sparc platforms. Configuration of mail, name services, and other network utilities. Backup and recovery, security and ethics. May be taken for graduate credit. Prerequisite: CSCI 4417.

CSCI 4431. Computer Networks I. 3 Credits.

Higher-layer protocols and network applications on the Internet, such as session layer, presentation layer, data encryption, directory services and reliable transfer services, telnet, network management, network measurements, e-mail systems, and error reporting. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 4431W. Computer Networks I. 3 Credits.

Higher-layer protocols and network applications on the Internet, such as session layer, presentation layer, data encryption, directory services and reliable transfer services, telnet, network management, network measurements, e-mail systems, and error reporting. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 4432. Computer Networks II. 3 Credits.

Computer networks and open system standards. Network configurations and signals, encoding and modulation, transmission media, connection interfaces, error detection and correction, signal compression, switching, link layer control, ISDN, X.25, frame relay, ATM, and Sonet. Bridges, routers, and routing algorithms. Prerequisite: CSCI 4431.

CSCI 4455. Computer Game Design and Programming. 3 Credits.

Principles, techniques, and design of computer games. Graphic game engines, modeling, motion, AI and interaction; sound design and synthesis; real-time software and hardware issues. May be taken for graduate credit.    (Fall).

CSCI 4511. Artificial Intelligence Algorithms. 3 Credits.

Knowledge representation and reasoning, propositional logic and predicate calculus. Logic programming. Search, game trees, backtracking. Planning. May be taken for graduate credit. Prerequisite: CSCI 3221, CSCI 3212.

CSCI 4521. Introduction to Mobile Robotics. 3 Credits.

Overview of autonomous mobile robotics. Sensing, localization, calibration, mapping, perception, decision making, planning, and control. Emphasis on algorithmic rather than hardware aspects of robotics. Development of algorithms that can operate autonomous mobile platforms in complex, real-world environments. Prerequisite: MATH 1232, MATH 2184; CSCI 3362 or CSCI 4341.

CSCI 4525. Autonomous Robotics: Manipulation. 3 Credits.

Introduction to robot manipulation. Core principles necessary to program robots for autonomous operation in dynamic and typically human-centric environments. Transdisciplinary concepts from computer science (reinforcement learning, perception), mechanical engineering (kinematics, dynamics), and electrical engineering (control theory). Prerequisite: permission of instructor.

CSCI 4527. Introduction to Computer Vision. 3 Credits.

Introduction and overview of computer vision. Image-formation signal processing and filtering. Saliency, image features and feature extraction, tracking, stereo disparity estimation, structure form motion, photogrammetry, optic flow, homography estimation and warping, scene segmentation, place recognition, object recognition, robust estimation, and camera calibration. Prerequisite: MATH 1232, MATH 2184; CSCI 4362 or CSCI 4341.

CSCI 4531. Computer Security. 3 Credits.

Risk analysis, cryptography, operating system security, identification and authentication systems, database security. Prerequisite: CSCI 3411; corequisite: CSCI 4431.

CSCI 4532. Information Policy. 3 Credits.

Roles, issues, and impacts of computer-based information systems in national and international arenas, focusing on privacy, equity, freedom of speech, intellectual property, and access to personal and governmental information. Professional responsibilities, ethics, and common and best practices in information use.

CSCI 4541. Network Security. 3 Credits.

Security protocols and applications in local, global, and wireless networks; IPSec and packet-level communication security systems; network authentication and key-exchange protocols; intrusion detection systems and firewalls; secure network applications; network worms and denial-of-service attacks. Prerequisite: CSCI 4531.

CSCI 4551. Concepts and Applications of Computer Graphics. 3 Credits.

Introduction to computer graphics without programming; building 3-D geometry and rendering; computer animation; virtual reality and computer games; hands-on projects in modeling, rendering, and animation using commercial software; hands-on projects in photo and video manipulation.

CSCI 4552. Design of Computer Animation I. 3 Credits.

Use of commercial 3-D computer animation packages to create digital artistic works. Principles of animation, including timing, exaggeration of motion, and anticipation; use of a storyboard; modeling; motion; rendering and editing. Prerequisite: CSCI 4551.

CSCI 4553. Design of Computer Animation II. 3 Credits.

Use of commercial 3-D animation packages to create artistic works and visualizations. Process-spanning concepts of development through pre-production, production, and post-production. Emphasis on developing original content and attaining high production values. Prerequisite: CSCI 4552.

CSCI 4554. Computer Graphics 1. 3 Credits.

Hardware; concepts of graphics subroutine packages; programming concepts for interaction, display, and data structuring; basic clipping and scan-conversion algorithms; homogeneous coordinates; three-dimensional viewing transforms; basic rendering. May be taken for graduate credit. Prerequisite: CSCI 2113 or CSCI 6221.

CSCI 4561. Design of User–Interface Programs. 3 Credits.

Structure of interactive programs. Widgets, windows, and input devices. Client–server model, event-driven programming, and callbacks. Window systems (e.g., Xwindows) and dialog control. May be taken for graduate credit. Prerequisite: CSCI 2113 or CSCI 6221.

CSCI 4572. Computational Biology. 3 Credits.

Pairwise alignment and scoring. Multiple sequence alignment. Fragment assembly, physical mapping of DNA. Phylogenetic trees. Molecular structure prediction and protein folding. Microarrays and microarray data, image comparison. Clustering. Overview of biological databases, PDB, MMDB, GenBank. Draft genomes and genome browsers. Pathway databases. May be taken for graduate credit. Prerequisite: CSCI 3571 and CSCI 3212 or CSCI 6212.

CSCI 4576. Introduction to Biomedical Computing. 3 Credits.

A survey of the problems and solutions in biomedical computing. Application of computers in medicine. Patient care and monitoring systems, electronic medical records, digital imaging and analysis. Telemedicine, medical ethics, health care regulations and organizations.

CSCI 4577. Biomedical Computing. 3 Credits.

Computing issues in epidemiology and biosurveillance, decision support, medical imaging and visualization, image-guided surgery; medical databases, issues in system integration, mobile medical computing. May be taken for graduate credit. Prerequisite: CSCI 2113, CSCI 4576; corequisite: CSCI 2441.

CSCI 5099. Variable Topics. 1-99 Credits.

CSCI 6010. Introduction to Computer Science Fundamentals. 3 Credits.

Review of programming in a high-level language using Java or C> Introduction to objects and object-oriented programming: static and dynamic objects, inheritance, dynamic method invocation. Data structures: 2D-arrays, linked-lists, stacks, queues, trees, hashing. Discrete structures: sets, graphs, permutations and combinations. Prerequisite: one year of course work in programming in C, C< or Java.

CSCI 6011. Introduction to Computer Systems. 3 Credits.

Introduction to basic concepts underlying all computer systems. Processor operation, hierarchical memory systems, elementary logic circuits, and systems software such as compilers, linkers, and operating systems from the programmer’s perspective. Prerequisite: one year of course work in programming in C, C< or Java.

CSCI 6212. Design and Analysis of Algorithms. 3 Credits.

Design and analysis of algorithms. Turing machines; NP-Complete theory. Algorithmic techniques: divide-and-conquer, greedy, dynamic programming, graph traversal, backtracking, and branch-and-bound. Applications include sorting and searching, graph algorithms, and optimization. Prerequisite: CSCI 1311, CSCI 1112.

CSCI 6213. Advanced Data Structures. 3 Credits.

Sparse matrix transpose and multiplication. List insertion and deletion, lists of available space. In-order, preorder, and postorder traversal of trees. Topological sorting. Binary search trees, including AVL trees, B-trees, and tries. Dynamic hashing. Prerequisite: CSCI 6212.

CSCI 6221. Advanced Software Paradigms. 3 Credits.

Object-oriented, procedural, functional, and concurrent software design paradigms; design patterns; software life-cycle concepts. Tradeoffs between compiled and interpreted languages. Examples from Ada, Java, C, C< and Perl. Prerequisite: CSCI 1311, CSCI 1112.

CSCI 6223. Principles of Programming Languages. 3 Credits.

Fundamental concepts underlying design of programming languages. Detailed study of functional and object-oriented computational models. Types, evaluation, abstraction, control flow, modules, mutation, laziness, polymorphism, subtyping, inheritance. Practice learning new languages. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 6231. Software Engineering. 3 Credits.

The life-cycle model. Requirements and specifications. Design models, structured and object-oriented design. Program development, PDL’s tools, configuration control. Program, unit, and integration testing. Program verification. Other development models. Development metrics. Computer-aided software engineering (CASE). Prerequisite: CSCI 6221, CSCI 6212.

CSCI 6232. Software Engineering Development. 3 Credits.

Formal methods in software engineering. First-order logic, basic specification elements, rigorous proofs, formal development process, concurrency. Prerequisite: CSCI 6461, CSCI 6212.

CSCI 6233. Software Testing & Quality. 3 Credits.

Flow graphs and path testing, transaction flow testing, data flow testing, software metrics, system testing, test planning and documentation, reliability, statistical testing. Prerequisite: CSCI 6231.

CSCI 6234. Object-Oriented Design. 3 Credits.

Object-oriented systems, software reusability, software modularity, top–down and bottom–up approaches, object classification, genericity, metaprogramming, concurrent object-oriented programming languages. Prerequisite: CSCI 6221.

CSCI 6235. Component-Based Enterprise Software Development. 3 Credits.

Component-based software development for enterprise applications. Component models, multi-tier architecture. Specific case studies may include topics such as Enterprise Java Beans, DCOM, and COBRA. Prerequisite: CSCI 6221.

CSCI 6311. Theory of Computation. 3 Credits.

Theoretical foundations of computer science. Formal languages and automata; regular expressions, context-free languages, parsing; Turing machines and complexity; partial recursive functions; undecidability; program correctness; fixed-point theory; formal specifications of software. Prerequisite: CSCI 6212.

CSCI 6312. Graph Theory & Applications. 3 Credits.

Undirected and directed graphs. Connectivity, partitions, cycles and matchings. Edge and vertex coloring, chromatic polynomials, and the four-coloring problem. Planar graphs and Kuratowski’s theorem. Properties of random graphs. Applications to a variety of problems. Prerequisite: CSCI 6212.

CSCI 6313. Advanced Discrete Structures. 3 Credits.

Discrete techniques in computer science. Algebraic structures, vector spaces, linear transforms, norms, matrices, complex numbers, convolution and polynomial multiplication, Fourier analysis, discrete Fourier transform, number theory. Applications to computer security, coding theory, and audiovisual signal processing. Prerequisites: CSCI 1311 and MATH 1232.

CSCI 6318. Complex Systems. 3 Credits.

The edge-of-chaos phenomenon, phase transitions, power laws, small-world networks, Boolean networks, cellular automata, and complex dynamics. Applications to networks and biological systems. Prerequisite: CSCI 6212.

CSCI 6331. Cryptography. 3 Credits.

Review of mathematical theory for cryptography. Classical ciphers. Modern block and stream ciphers. Symmetric and asymmetric systems. Digital signatures. Public key infrastructure. Authentication. Prerequisite: CSCI 6212.

CSCI 6341. Continuous Algorithms. 3 Credits.

Overview of structures in continuous mathematics from a computational viewpoint. Main topics include continuous system simulation, computational modeling, probability, statistical techniques, next-event simulation, algorithms for continuous optimization, machine learning, neural networks, statistical language processing, robot control algorithms. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 6342. Computational Linear Algebra and Applications. 3 Credits.

Linear algebra applied to computational problems in computer science and engineering. Topics include points, vectors, matrices, and their programming abstractions; 3D transformations, pose and viewpoint estimation; linear equations; algorithms for matrix decompositions, dimension reduction, computation with large matrices, under- and over-determined systems; applications to big data, computer vision, text processing. Prerequisite: CSCI 2113.

CSCI 6343. Numerical Solutions of Algebraic Systems. 3 Credits.

Numerical solutions of linear algebraic equations and the algebraic eigenvalue problem. Sparse matrix techniques. Solutions of nonlinear simultaneous equations. Interpolation and extrapolation. Prerequisite: CSCI 6212.

CSCI 6351. Data Compression. 3 Credits.

Background on signals, information theory, transforms, human vision, and metrics. Lossless and lossy compression techniques. Video compression. Compression standards. Progressive transmission. Prerequisite: CSCI 6212.

CSCI 6362. Probability for Computer Science. 3 Credits.

Concepts of probability and statistics used in computer science. Random variables. Conditional probability, independence, correlation. Law of large numbers, central limit theorem. Applications to computer science, including entropy, information theory, data compression, coding, inference, Markov chains, randomized algorithms. Prerequisite: MATH 1232, CSCI 1311; or permission of instructor.

CSCI 6364. Machine Learning. 3 Credits.

Machine learning algorithms: nearest-neighbor, regression, classification, perceptron, kernel methods, support vector machine (SVM), logistic regression, ensemble methods, boosting, graphical models, hidden Markov models (HMM), non-parametrics, online learning, active learning, clustering, feature selection, parameter tuning, and cross-validation. Prerequisite: CSCI 6212; CSCI 6362, MATH 2184; or permission of instructor.

CSCI 6365. Advanced Machine Learning. 3 Credits.

Theory and algorithms for machine learning research. In-depth focus on advanced machine learning topics such as clustering, learning from data streams, and Climate Informatics. Prerequisite: CSCI 4364, CSCI 6212, CSCI 6362, MATH 2184; or permission of instructor.

CSCI 6411. Advanced Operating Systems. 3 Credits.

Fundamentals of operating system design and structure, resource management, and system support for multi-core. Topics include scheduling, synchronization, system structure, virtual address spaces, memory management, I/O management, and systems abstractions for modern multi-core architectures. The course involves an implementation component and requires substantial programming experience. This course can be taken for credit by undergraduates who have taken CSCI 3411. Prerequisite: CSCI 6461 or CSCI 2461.

CSCI 6412. OS Design & Implementation. 3 Credits.

Builds on CSCI 6411 to provide students with the knowledge to build parts of modern operating systems, which will be studied and motivated from the viewpoint of practical design and implementation. Students will learn how operating system’s components for resource management and abstraction are built from the ground up and integrated into working systems considering the challenges of reliability, multi-core, and security. The course has a significant implementation component; substantial low-level programming experience is required. Prerequisite: CSCI 6411.

CSCI 6421. Distributed and Cluster Computing. 3 Credits.

In-depth study of the algorithmic and implementation challenges in building large scale distributed applications. Topics include distributed coordination, scheduling, consistency issues, and fault tolerance algorithms. The course will cover how fundamental distributed systems concepts are applied to both high performance computing and cloud computing environments. The course will mix algorithmic concepts and practical implementation concerns; substantial programming experience is recommended. Prerequisite: CSCI 6212, CSCI 3411.

CSCI 6431. Computer Networks. 3 Credits.

Fundamental concepts in the design and implementation of computer communication networks and internet, their protocols, and applications. Layered network architectures, applications, network programming interfaces, transport, routing, data link protocols, local area networks, network management, and network security. Prerequisite: CSCI 6461.

CSCI 6433. Internet Protocols. 3 Credits.

Understanding of the layered protocols for the Internet. Interconnection of networks. The IP protocol and routing algorithms, switches, bridges, and routers. The transmission control protocol (TCP). Addressing and names. Application-specific protocols, FTP, TELNET, SMTP, SNMP, HTTP. Domain name services. Prerequisite: CSCI 6221, CSCI 6431.

CSCI 6434. Design of Internet Protocols. 3 Credits.

Protocol specifications and formal description methods. Finite-state descriptions of Internet protocols. Specification and Description Language. Implementation of protocol specifications. Prerequisite: CSCI 6212, CSCI 6433.

CSCI 6441. Database Management Systems. 3 Credits.

Design and architecture of relational database management systems; query languages, data models, index structures, database application design. Prerequisite: CSCI 6221, CSCI 6461.

CSCI 6442. Database Systems II. 3 Credits.

Concepts in database systems. Relational database design. Editing, report generation, updating, schema refinement, tuning. Construction of database management systems. Conceptual and logical design of a database. Prerequisite: CSCI 6441.

CSCI 6443. Data Mining. 3 Credits.

Fundamental concepts of data mining. Algorithm techniques for data mining, including classification, clustering, association rules mining. Prerequisite: CSCI 6441 or permission of instructor.

CSCI 6448. Scientific Databases and Knowledge Formation. 3 Credits.

Database management and information retrieval. Relational algebra and SQL query language. Advanced retrieval capabilities. Data mining. Rules of inductive inference. Classification, clustering, and machine learning techniques. Confronting the problems of complexity. Prerequisite: CSCI 1311 and either CSCI 1132 or CSCI 1112.

CSCI 6451. Information Retrieval Systems. 3 Credits.

Information organization and retrieval of natural language data by digital computer systems; statistical, syntactic, and logical analysis of natural language; dictionary and thesaurus systems; searching strategies and cataloging. Large-scale file structures. Prerequisite: CSCI 6221, CSCI 6461.

CSCI 6461. Computer System Architecture. 3 Credits.

Concepts in processor, system, and network architectures; architecture of pipeline, superscalar, and VLIW/EPIC processors; multiprocessors and interconnection networks. Cache coherence and memory subsystem design for multiprocessor architectures. Parallel and distributed system architecture; internetworking. Prerequisite: CSCI 1311, CSCI 1112, CSCI 2461.

CSCI 6511. Artificial Intelligence. 3 Credits.

Representation and space search. Heuristic search. Predicate calculus. Knowledge representation and knowledge engineering for expert systems. Rule-based, hybrid, and O-O systems. Semantic nets, frames, and natural language. Theorem provers. Overview of planning, learning, neural nets. Use of AI languages. Prerequisite: CSCI 4511, CSCI 6212.

CSCI 6512. Adaptive Learning Systems I. 3 Credits.

Learning as an alternative to rule-based schemes for artificial intelligence. Deterministic and probabilistic simulation of games. Markovian and bounded-context systems. The algedonic process. Introduction to collective learning systems theory. Design, simulation, and evaluation of collective learning automata. Prerequisite: CSCI 4511, CSCI 6212.

CSCI 6515. Natural Language Understanding. 3 Credits.

The state of the art of natural language parsing and semantic understanding by computer systems. Review of formal, context-free, and transformational grammars and parsing. Augmented transition networks: problems of complexity, semantics, and context. Deterministic parsing and semantic parsing. Prerequisite: CSCI 6511.

CSCI 6519. Models of Cognition. 3 Credits.

The central nervous system as a natural precedent for AI: structure and function of the neuron and neural networks; sensors and actuators; modular brain function. The cognitive process. Intelligence metrics. Genetics and self-organizing systems. Memory mechanisms. The psychological basis of learning and behavior. Prerequisite: CSCI 4511, CSCI 6212.

CSCI 6521. Introduction to Mobile Robotics. 3 Credits.

Concepts of autonomous mobile robotics with emphasis on algorithmic aspects. Sensing, sensor fusion, localization, calibration, mapping, perception, decision making, planning, behavior-based control, world modeling, and navigation. Development of algorithms that can operate autonomous mobile platforms in complex, real-world environments. Prerequisite: MATH 1232, MATH 2184; CSCI 6362 or CSCI 4341.

CSCI 6525. Autonomous Robotics: Manipulation. 3 Credits.

Manipulation and autonomous operation in dynamic, human-centric environments. Reinforcement learning, perception, optimization algorithms, kinematics, dynamics, control theory. Prerequisite: CSCI 6362, MATH 2184; or permission of instructor.

CSCI 6527. Introduction to Computer Vision. 3 Credits.

Image signal processing and filtering. Saliency, features and feature extraction, tracking, stereo disparity estimation, structure form motion, photogrammetry, optic flow, homography estimation and warping, scene segmentation, place recognition, object recognition, robust estimation, and camera calibration. Current research topics. Prerequisite: MATH 1232, MATH 2184; CSCI 6362 or CSCI 6341.

CSCI 6531. Computer Security. 3 Credits.

Functional description of cryptographic primitives. Risk analysis. Policy models: security, confidentiality, integrity, hybrid. Design principles: access control, information flow, confinement. Assurance: formal methods, evaluation. Malicious logic: security effects of programming languages. Prerequisite: CSCI 6461.

CSCI 6532. Information Policy. 3 Credits.

Roles, issues, and impacts of computer-based information systems in national and international arenas, focusing on privacy, equity, freedom of speech, intellectual property, and access to personal and governmental information. Professional responsibilities, ethics, and common and best practices in information use.

CSCI 6534. Information Security in Government. 3 Credits.

CSCI 6541. Network Security. 3 Credits.

Security protocols and applications in local, global, and wireless networks; IPSec and packet-level communication security systems; network authentication and key-exchange protocols; intrusion detection systems and firewalls; secure network applications; network worms and denial-of-service attacks. Prerequisite: CSCI 6531.

CSCI 6542. Computer Network Defense. 3 Credits.

Offensive and defensive information warfare operations. Simulation of various attacks on and defenses of computer systems. Laws related to information warfare. History and literature related to information warfare attacks. Prerequisite: CSCI 6541.

CSCI 6545. Software Security. 3 Credits.

Security for software systems. Theory and practice of designing and implementing secure software. Security in the context of software engineering. Practical experience with building a software system and securing it, with emphasis on correctness and robustness. Requires substantial prior programming experience. Prerequisite: CSCI 6461 or CSCI 6411; CSCI 6531 or EMSE 6540 or permission of instructor.

CSCI 6547. Wirless and Mobile Security. 3 Credits.

Mobile Agents, Wireless Web, WAP, WEP, Peer-to-Peer Computing; secure routing; intrusion detection and authentication on wireless networks; security for handheld devices; encryption and cryptographic measures for wireless; real-time wireless security; security measures for embedded devices. Prerequisite: CSCI 6431, CSCI 6531.

CSCI 6548. E-Commerce Security. 3 Credits.

Advanced technical topics in e-commerce security. X.500 registration systems, X.509/PKIX certification systems, secure payment methods, smart cards, authorization models in open distributed environments. Secure web systems, technologies, and applications. Prerequisite: CSCI 6541.

CSCI 6554. Computer Graphics II. 3 Credits.

Curves and surfaces. Spatial sampling and aliasing. Visible surface algorithms. Illumination and shading models, raytracing and radiosity. Image manipulation and texture mapping. Procedural models. Prerequisite: CSCI 4554.

CSCI 6555. Computer Animation. 3 Credits.

Euler angles and quaternions; articulated figure motion; forward and inverse kinematics; kinematic, physics based, and behavioral motion control; rendering problems (temporal aliasing); sound synthesis and synchronization; recording and editing techniques. Prerequisite: CSCI 4554 or permission of instructor.

CSCI 6561. Design of Human–Computer Interface. 3 Credits.

Design of dialogues for interactive systems. Psychological, physiological, linguistic, and perceptual factors. Advantages and disadvantages of various interaction techniques, command language syntaxes, and data presentations. Design methodology and guidelines. Case studies, research readings, and projects. Prerequisite: CSCI 6221.

CSCI 6562. Design of Interactive Multimedia. 3 Credits.

History, theory, and development of multimedia concepts. Hardware components, platforms, and authoring tools. Scientific, technical, and cognitive foundations of various media including text, sound, graphics, and video. Interface design. Use of a media taxonomy as a design and evaluation tool. Completion of a multimedia portfolio required. Prerequisite: CSCI 6221.

CSCI 6572. Computational Biology Algorithms. 3 Credits.

Algorithms and models for DNA and protein sequence alignments, gene finding, identification of gene regulatory regions, sequence evolution and phylogenetics, RNA and protein structure, microarray and/or proteomics data analysis. Prerequisite: CSCI 6212 ; programming experience in C/C or Java.

CSCI 6900. Colloquium. 0 Credits.

Lectures by outstanding authorities in computer science. Topics to be announced each semester.    (Fall and spring).

CSCI 6907. Special Topics. 1-3 Credits.

Topics to be announced in the Schedule of Classes.    (Fall and spring).

CSCI 6908. Research. 1-12 Credits.

Applied research and experimentation projects, as arranged. May be repeated for credit.

CSCI 6998. Thesis Research. 3 Credits.

CSCI 6999. Thesis Research. 3 Credits.

CSCI 8211. Advanced Topics in Algorithms. 3 Credits.

Graph algorithms, strongly connected components, biconnected components, dominators in acyclic graphs, ordered trees, network flow, planarity testing, bipartite matching, theory of NP completeness, NP-complete problems. Design and analysis of approximation algorithms for NP-complete problems. Prerequisite: CSCI 6212.

CSCI 8231. Advanced Topics in Software Engineering. 3 Credits.

Seminar on current research and developments in software engineering. Students develop a software package with the aid of available software tools such as requirement tool, design tool, code generators, testing tools, measurement tools, cost estimation tools. Prerequisite: CSCI 6232, CSCI 6233.

CSCI 8331. Advanced Cryptography. 3 Credits.

Linear and differential cryptanalysis. Cryptanalysis of AES. Factorization and primality. Computational and information-theoretic secrecy. Theory of secrecy. Zero-knowledge proofs. Secret sharing. Cooperative distributed cryptography. Provable security. Prerequisite: CSCI 6331.

CSCI 8401. Advanced Topics in Systems. 3 Credits.

Seminar on current research and developments in computer operating systems. May be repeated for credit.    (Spring, even years).

CSCI 8431. Advanced Topics in Computer Networks and Networked Computing. 3 Credits.

Seminar on current research and developments in computer networks, Internet, networked computing, mobile computing and pervasive computing. May be repeated for credit. Prerequisites: CSCI 6461, CSCI 6212, CSCI 6433.

CSCI 8440. Advanced Topics in Data Management. 3 Credits.

Seminar on current research and developments in computer database systems and information retrieval. May be repeated for credit. Prerequisite: CSCI 6442 or CSCI 6451.

CSCI 8511. Advanced Topics in Artificial Intelligence. 3 Credits.

Seminar on current research and developments in machine intelligence and cognitive science. May be repeated for credit. Prerequisite: Permission of the instructor.

CSCI 8531. Advanced Topics in Security. 3 Credits.

Seminar on current research and developments in information assurance. May be repeated for credit. Prerequisite: CSCI 6531.

CSCI 8554. Advanced Topics in Computer Graphics. 3 Credits.

Seminar on current research and developments in computer graphics. Spatial and temporal anti-aliasing: hidden-surface algorithms: illumination models, radiosity, textural mapping. May be repeated for credit. Prerequisite: CSCI 6554.

CSCI 8900. Advanced Selected Topics. 3 Credits.

Topics announced in the Schedule of Classes.

CSCI 8901. Research and Evaluation Methods. 3 Credits.

Required for all computer science doctoral candidates. The scientific method; research/design requirements and objectives: qualitative, quantitative, and case studies; performance metrics; design procedures and control; sources of error and bias; evaluation tools; formal validation methods; documentation standards. Prerequisite: APSC 3115.

CSCI 8998. Computer Science Research. 1-12 Credits.

Limited to students preparing for the Doctor of Philosophy qualifying examination. May be repeated for credit.

CSCI 8999. Dissertation Research. 1-12 Credits.

Limited to Doctor of Philosophy candidates. May be repeated for credit.