**Csi 500 Operating Systems (4)**
Introduction to operating systems. Topics include processes, concurrency, synchronization, deadlock, memory management, segmentation, paging, replacement policies, caching, interprocess communication, file systems, and protection. Heavy emphasis on abstractions, mechanisms, policies, and design. Prerequisites: Csi 333 (formerly Csi 202), Csi 310, Mat 367 and one of Csi 400, 402, or 404.

**Csi 501 Computational Linear Algebra, Nonlinear Algebra, and Optimization(3)**

Review of numerical nonlinear algebra for one equation in one unknown. Numerical methods for solving systems of nonlinear equations including Quasi-Newton methods and descent techniques. Numerical solution of systems of linear equations including Gaussian elimination, LUD factorization, and iterative methods. Methods for banded and sparse systems. Approximation by splines. Prerequisite: Introductory undergraduate courses in numerical analysis, linear algebra, and multi-variate calculus. Knowledge of Fortran90 or Fortran77.

**Csi 502 Computer Graphics (3)**

An introduction to interactive computer graphics including device characteristics, display processors, and file structure. Graphical transformations and transformation systems including perspective transformations and hidden line and surface algorithms are discussed. Selected topics from graphical data structures, graphics systems, video graphics, and microprocessor graphics. Prerequisite: Csi 310.

**Csi 503 Algorithms and Data Structures (3)**

Review of discrete mathematics and probability used in algorithm design and analysis. Analyses of divide-and-conquer algorithms, number-theoretical algorithms, and algorithms for sorting, searching, and order statistics. Basic data structures. Basic graph algorithms for topological sorting, constructing minimum cost spanning trees, and shortest path problems. Prerequisites: Csi 310, departmental examination in discrete mathematics.

**Csi 504 Computer Organization (3)**

The organization of the hardware components of computing systems. Logic design theory review. Comparative survey of instruction set architectures. Design, control, communication, and interconnection strategies for major components such as arithmetic-logic units, control units, CPUs, memories, and I/O systems. Prediction and measurement of performance. Introduction to VLSI, parallel processing, and other current architectural trends. Prerequisites: Csi 404, departmental examination in discrete mathematics.

**Csi 508 Database Systems I (3)**

Basic concepts of a database system, with emphasis on database schema design, data manipulation languages, and query languages. Data models. Relational databases, functional dependencies, normal forms. Relational calculus, relational algebra, SEQUEL, Query-by-Example. The CODASYL network model: data definition and data manipulation languages. Computer project using a database system. User viewpoint of concurrent access. Prerequisites: Csi 310, departmental examination in discrete mathematics.

**Csi 509 Theory of Computation (3)**

Finite-state machines, pushdown stack automata, turing machines, context- free and context sensitive languages, regular sets, computability, NP- completeness. Prerequisite: Departmental examination in discrete mathematics.

**Csi 511 Programming Languages and Systems Concepts (3) **

Principles of program design, documentation, and software engineering. Assembly language, machine design, and the fetch-execute cycle at all levels of hardware and software. Introduction to software development, compiler design, operating systems design, and program verification. Prerequisite: Csi 310

**Csi 515 Combinatorial Algorithms (3)**

Efficient algorithms for optimization and search problems involving networks and other combinatorial structures. Efficient solutions from integer, linear, or mixed programming formulations. Application of advanced data structures and algorithm analysis techniques to algorithms from current literature. Prerequisite: Csi 503.

**Csi 516 Computer Communications Networks I (3)**

Introduction to computer communication networks. Equal emphasis on all layers of the ISO reference model and the TCP/IP protocol suite. Topics include physical networks, sliding window protocols, remote procedure call, routing, naming and addressing, security, authentication, performance, and applications. Prerequisites: Csi 333 (formerly Csi 202), Csi 310, and Mat 367.

**Csi 517 Compiler Design I (3)**

Lexical analysis. Finite-state machines, pushdown machines, and context- free grammars. Top-down and bottom-up parsing. Syntax-directed translation. Prerequisites: Csi 310, departmental examination in discrete mathematics.

**Csi 518 Software Engineering (4)**

Software engineering principles, the role of abstraction in programming, abstract data types, modularization and module interfaces, specifications, and teamwork. Concurrent programming models, synchronization and interprocess communication. Project work in contemporary concurrent and object-oriented languages. Prerequisites: Graduate Csi standing or permission of instructor, Csi 310.

**Csi 519 Programming Language Design (3)**

Brief history of programming language development. Functional programming with an emphasis on programming with higher-order functions, lazy evaluation, and streams, e.g. SCHEME. Type structure and type inference, e.g. ML. Logic programming and backtracking, e.g. Prolog, constraint logic programming, e.g. CLP(R). Denotational semantics, Hoare-Floyd axiomatic semantics, and verification of programs. Prerequisite: Extensive programming experience.

**Csi 520 Topics in Distributed and Parallel Computing (3)**

Selected areas relating to multiple processor systems will be examined. The models treated include various communication mechanisms and synchronous and asynchronous operation. Prerequisite: Consent of instructor.

**Csi 521 Discrete Mathematics with Applications (3)**

Deeper coverage of the content of Csi 210 at the graduate level. Proofs by induction, recursive definitions, and combinatorial analysis. Introduction to recurrence equations, graph theory, and abstract algebra. Applications to proofs, correctness, and analysis of combinatorial and algebraic algorithms. Prerequisite: Csi 210 or graduate standing.

**Csi 523 Computational Geometry (3)**

Efficient algorithms for geometric problems. Paradigms of divide and conquer, space sweep, locus computation, prune and search, transformation, and random sampling. Problems such as finding convex hulls, line intersections, Voronoi diagrams, and nearest neighbors are studied together with selections from research literature. Lower bound proofs, examples of parallel algorithms, and some implementation issues. Prerequisites: Departmental examination in descrete mathematics, Csi 503.

**Csi 524 Information Security (3)**

This course covers the broad spectrum of technical issues surrounding computer security and intrusion detections. Topics considered include: viruses, worms, host-and network-based vulnerabilities and countermeasures, database security, intrusion detection, and privacy and legal issues. Facilities for securing hosts and limiting vulnerability are also discussed. Unlike in a systems administration class, detailed operational issues are not discussed. Prerequisites: Csi 500 or permission of instructor.

**Csi 526 Cryptography (3)**

The making of ciphers to encode information is the subject of cryptography. This course covers the field from its origins in early historic times through its most up-to-date implementations and uses in digital computers. Various ciphers will be shown and their security assessed. This latter is known as cryptoanalysis - the attempt to break cipher in order to read the underlying message. The course will emphasize how cryptography and cryptoanalysis are intimately related, and how the arms race between the two has motivated progress throughout their history. Prerequisites: Csi 503 and 518.

**Csi 530 Introduction to Mathematical Logic (3)**

Topics include logical validity, logical consequence, computerized theorem proving, compactness, soundness, consistency, completeness, and incmpleteness in the context of propositional logic, first order logic, Frege-Hilbert deduction and computerized Semantic Tableaus deduction. This course will survey Goedel's Completeness and Incompleteness Theorems along with decidability, undecidability and classification of theoretically computable and uncomputable problems. Prerequisites: Departmental Discrete Math Exam.

**Csi 531 Data Mining (3)**

A course on data mining (finding patterns in data) algorithms and their application to interesting data types and situations. We cover the basic algorithms that address the five core data mining tasks: prediction, classification, estimation, clustering and associations. Course projects will involve advanced topics such as algorithm developments for handling large data sets, sequential, spatial and streaming data. Prerequisite: Csi 503.

**Csi 535 Artificial Intelligence I (3)**

A first course in artificial intelligence (AI) introducing basic concepts and techniques. Topics include problem representation, production systems, heuristic search, predicate logic, and structured representation of knowledge. Techniques of sample search and sample problem solving systems are represented. Exercises in a selected AI programming language. Prerequisites: Csi 310, departmental examination in discrete mathematics.

**Csi 538 Computational Logic (3)**

This course is on computational issues in logic, with emphasis on automated reasoning and applications. Core material includes propositional logic, satisfiability, the first-order predicate calculus, Skolem functions, Herbrand’s theorem, unification, clausal resolution and paramodulation. Other topics covered may change from year to year. Prerequisites: Departmental examination in discrete mathematics, Csi 503.

**Csi 539 Advanced Data Structures (3)**

Data structures for efficient retrieval in the context of problems relating to aggregation, reporting, quantifier evaluation, and range queries in both dynamic and static settings. K-d trees, k-fold trees, balanced trees, and other advanced topics. Prerequisite: Csi 503.

**Csi 540 High Performance Scientific Computing I (3) **

Introduction to distributed, shared memory, and non-uniform memory advanced architectures, advanced networks, advanced parallel and distributed languages supporting scientific computing. Basic linear algebra algorithms and their relation to decomposition, memory access patterns, and scalability. High-level prototyping languages, experimental methods, performance analysis and polyalgorithms design. Prerequisites: Csi 310, Csi 401 or knowledge of numerical methods; knowledge of Fortran recommeded.

**Csi 541 High Performance Scientific Computing II (3) **

Numerical methods of ODE's, PDE's and transform (FFT) suitable for advanced parallel and distributed computing. Explicit versus implicit message generation and processing in distributed computing environments. Advanced experimental methods. High Performance Fortran. Prerequisite: Csi 540

**Csi 542 An Introduction to Quantum Computation, Information, and Simulation (3)**

The main ideas of Quantum Computation, Information, and Simulation are introduced. The course describes what quantum computation is and how it can be used to solve problems faster than classical computers. The challenges of building a quantum computer are addressed. Quantum simulators are explained and built illustrating the vast differences between quantum and classical gates. The course also covers quantum information, explaining how quantum states can be used to program communications. Prerequisites: Csi 403 or Csi 503, knowledge of the use of Boolean Algebra in circuit design, and programming experience.

**Csi 550 Information Retrieval (3)**

This course will discuss theory and practice of searching and retrieval of text and bibliographic information. Topics covered include automated indexing, statistical and linguistic models, text classification, Boolean and probabilistic approaches to indexing, query formulation and output ranking, information routing and filtering, topic detection and tracking, as well as measures of retrieval effectiveness, including relevance, utility, miss/false-alarm. Techniques for enhancing retrieval effectiveness including relevance feedback, query reformulation, thesauri, concept extraction, and automated summarization. Experimental retrieval approaches from Test Retrieval Conferences (TREC); modern internet search engines (Google, AltaVista, etc.) Prerequisites: Csi 210, Csi 310; or Ist 301/601, Ist 602; or Ist 433/633; or Permission of Instructor.

**Csi 551 (Inf 551, Phy 551) Bayesian Data Analysis and Signal Processing (3)**

This course will introduce both the principles and practice of Bayesian and maximum entropy methods for data analysis, signal processing, and machine learning. This is a hands-on course that will introduce MATLAB computing language for software development. Students will learn to write their own Bayesian computer programs to solve problems relevant to physics, chemistry, biology, earth science, and signal processing, as well as hypothesis testing and error analysis. Optimization techniques to be covered include gradient ascent, fixed-point methods, and Markov chain Monte Carlo sampling techniques. Prerequisites: Csi 101 or Csi 201, Mat 214, or equivalents, or permission of instructor.

**Csi 580 Computer Science in Scientific Disciplines (3)**

Uses of high speed digital computers in science. Fundamentals of operation of a stored program digital computer. Scientific computer languages. Elementary numerical methods. Algebraic manipulation on a digital computer. May not be used for degree credit in computer science. Prerequisites: Two semesters of calculus.

**Csi 600 Distributed Systems (3)**

Survey of current trends in operating systems with a particular emphasis on distributed systems. Topics include multiprocessor systems, distributed file systems, caching and cache coherency, scaling issues, naming, resource location, process migration, heterogeneity, remote procedure call, communication protocols, authentication, security, and replication. Prerequisite: Csi 500.

**Csi 601 Computability and Undecidability (3)**

Introduction to theory of computability. Topics include formal models of computing systems and their computational equivalence, Church's thesis, recursive and recursively enumerable sets, effective reducibilities, the recursion theorem and the arithmetic hierarchy. Applications to computer science, logic and mathematics. Prerequisite: Csi 509.

**Csi 604 Computers and Computational Intractability (3)**

Introduction to theory of computational complexity. Computational tractable and intractable problems. The complexity classes P, RP, NP, PSPACE, etc. Classification of commonly encountered problems from computer science, mathematics and operations research, emphasizing the NP-complete problems. Techniques for dealing with computational intractability including back-tracking, approximation algorithms, etc. Prerequisite(s): Csi 503 and Csi 509 or consent of instructor.

**Csi 608 Database II (3)**

Systems-oriented aspects of database systems design. Transaction processing, database concurrency control, restart and recovery, distributed databases. Advanced topics of current research interest. Prerequisites: Csi 310, departmental examination in discrete mathematics.

**Csi 616 Computer Communication Networks II (3)**

Survey of current trends in computer communication networks. Topics include transaction oriented protocols, bulk data transfer protocols, high speed networks, routing, protocol performance and efficiency, security, and authentication. Prerequisite: Csi 516.

**Csi 617 Compiler Design II (3)**

Code generation. Object code optimization and data flow analysis. Run- time implementation of programming languages. Prerequisites: Csi 333 (formerly Csi 202) and Csi 517.

**Csi 628 Cryptographic Protocols (3)**

This course is on analyzing cryptographic protocols on security issues. The emphasis will be on formal methods, i.e., logically analyzing the protocols to establish the presence or absence of security flaws. The students will read and present latest cutting-edge literature and there will be a term project. Prerequisites: Csi 503

(or equivalent) as a co-requisite, departmental examination in Discrete Mathematics, CSI 524 or 526.

**Csi 635 Artificial Intelligence II (3)**

A continuation of the materials introduced in Csi 535. Prerequisite: Csi 535.

**Csi 636 Natural Language Processing (3)**

Construction of programs that use human language. Topics include morphology, syntax, parsing, semantic representation, resolution of ambiguity, generation, and discourse. Prerequisite: Csi 535 or permission of instructor.

**Csi 642 Topics in Quantum Computation, Information, and Simulation (3)**

This course is a follow up to Csi 542, an Introduction to Quantum Computation, Information, and Simulation. Topics covered will change from semester to semester. Detailed in-depth studies of these topics may include: quantum computation including theoretical aspects, numerical aspects of quantum mechanical computation, quantum information theory including quantum error correction, and quantum simulation. Prerequisites: Csi 442 or Csi 542.

**Csi 654 Seminar in Problem Solving (3)**

Methods of problem solving in computer science, including logical analysis and thought-experiments. Problems from all areas of computer science. Prerequisite: Admission to Csi doctoral program or consent of instructor.

**Csi 660 Topics in Computer Science (1-3)**

Advanced topics in computer science. Content determined by the instructor. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 661 Topics in Artificial Intelligence (1-3)**

Advanced study in selected subjects in Artificial Intelligence, with an emphasis on current research and results. Topics may be drawn from automated deduction, natural language processing, artificial neural networks, knowledge representation, and machine learning. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 662 Topics in Database Systems (1-3)**

Selected topics of current interest from the frontiers of database systems. Topics may vary from year to year. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 663 Topics in Parallel Computation (1-3)**

Selected topics of current interest in parallel processing. General topics include design and analysis of efficient parallel algorithms on a variety of parallel computation models, and theory of parallel computation. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 664 Topics in Automated Reasoning (1-3)**

Contents may vary from semester to semester. Possible topics include: automated reasoning methods based on term rewriting, completion, non- clausal approaches to theorem proving, dissolution, proofs by induction; theorem proving methods for nonclassical logics including modal, temporal, and multiple-valued logics; automated geometric theorem proving, geometric and algebraic reasoning, as well as constraint solving. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 665 Topics in Computer Graphics (1-3)**

Topics may include: Hidden line and surface removal, polygonal surfaces, fractals. B-spline and Bezier bicubic patches, Quadric surfaces, surface blending, shading, ray tracing, or animation. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 666 Topics in Theory of Computation (1-3)**

Selected topics in theory of computation, automata theory, and decidability. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 667 Topics in Algorithms (1-3)**

Selected topics in theory, analysis, and complexity of algorithms. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 668 Topics in Systems Architecture (1-3)**

Selected topics or case studies in structure, design, or evaluation of computer hardware and software systems. Content varies from year to year. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 669 Topics in Data Structures (1-3)**

Course contents may vary from semester to semester. General topic is efficient algorithms for searching data structures and data bases; particular topics may include perfect hashing, fast tries, fusion trees, and relational data base optimization. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 670 Topics in Specification and Verification (1-3)**

Course based on the application of formal methods for specification and verification of software and hardware. Emphasis on using mechanical theorem-provers to verify that the program/circuit meets the specification. Contents may vary from semester to semester. May be repeated for credit with permission of the department. Prerequisite: Permission of instructor.

**Csi 680 Computer Science Research (3)**

Introduction to independent research in computer science. Satisfactory completion fulfills project requirement for the M.S. or Ph.D. in computer science. May be repeated for credit. Prerequisite: Permission of instructor.

**Csi 681 Compiler Project (3)**

Project work in compiler design and implementation. Students are required to design and implement significant components of a compiler. Satisfactory completion fulfills project requirements for the M.S. or Ph.D. in computer science. Prerequisite: Csi 517 (corequisite: Csi 617) or permission of instructor.

**Csi 682 Database Project (3)**

Project work in database design and implementation. Students will design and implement significant components of a database system. Satisfactory completion fulfills project requirement for the M.S. or Ph.D. in Computer Science. Prerequisite: Csi 508 (corequisite: Csi 608 or Csi 609) or permission of instructor.

**Csi 683 Systems Programming Project (3)**

Project work in operating systems. Students will design and implement significant components of an operating system, subsystem, or supporting utility programs. Satisfactory completion of this course fulfills the project requirement for the M.S. or Ph.D. degree in computer science. Prerequisite: Csi 500 or permission of instructor.

**Csi 684 Computational Science Project (3) **

The computer solution of practical problems in pure or applied science and/or technology. Satisfactory completion fulfills project requirements for the M.S. or the Ph.D. in computer science. Prerequisites: Csi 540, 541, or consent of department.

**Csi 694 Directed Readings in Computer Science (1-3)**

Directed reading in a particular area of computer science specialization under supervision of a departmental faculty member. May be repeated for credit with permission of the department. Prerequisite: Consent of department.

**Csi 697 Independent Study and Research (1-3)**

Independent study and research in a particular area of computer science specialization under supervision of a departmental faculty member. May be repeated for credit with permission of the department. Prerequisite: Consent of department.

**Csi 699 Master's Thesis (3-6)**

Original independent research at the master's level under direction of a member of computer science faculty. Prerequisite: Acceptance of thesis proposal by faculty member.

**Csi 720 Advanced Topics in Computer Science (1-3)**

Selected advanced topic from the current computer literature in computer science. Course material is at the doctoral level. Prerequisite: Permission of instructor.

**Csi 890 Independent Study and Research (3-12)**

Independent study at the doctoral level under the direction of a member of the computer science faculty. May be repeated for credit. Prerequisite: Consent of computer science department doctoral committee.

**Csi 899 Doctoral Research (1)**

Required of all candidates completing the degree of Doctor of Philosophy.