Computer Science  

CS 812 - Compiler Design
Credits: 3.00
Formal languages and formal techniques for syntax analysis and parsing; organization of the compiler and its data structures; problems presented by error recovery and code generation. Classical top-down and bottom-up techniques currently in wide spread use, general discussion of LL (k) and LR (k) parsers; automatic methods of compiler generation and compilers. Students required to define a simple, nontrivial programming language and to design and implement its compiler. Prereq; programming language concepts and features.

CS 818 - Software Engineering
Credits: 3.00
Design approaches, implementation methodologies, and management techniques required to develop large, reliable software systems including applications-oriented systems. Team programming projects. Prereq: data structures.

CS 819 - Object-Oriented Methodology
Credits: 3.00
Object-oriented system design. Object-oriented programming. Languages for object-oriented programming. Prereq: strong programming skills; experience with C programming is highly desirable.

CS 820 - Operating System Programming
Credits: 3.00
Detailed discussion of operating system concepts and features. Practical examples and exercises that utilize advanced operating system features, including interprocess communication, synchronization, client-server communication, shared memory, threads, remote procedure calls, and device-level I/O. Discussion of POSIX 1003.1 Part I Standards. Prereq: operating system fundamentals or equivalent.

CS 821 - Operating System Kernel Design
Credits: 3.00
Design and implementation of an operating system kernel, using LINUX as an example. Detailed discussion of the data structures and algorithms used in the kernel to handle interrupts, schedule processes, manage memory, access files, deal with network protocols, and perform device-level I/O. The course is project-oriented, and requires the student to make modifications and additions to the LINUX kernel. Prereq: CS 820, or permission.

CS #822 - Advanced Systems Programming
Credits: 3.00
Topics in systems programming. Organization and implementation of typical POSIX 1003.2 utilities and tools. Emphasis on file handling, text processing, pattern matching, and portability. Prereq: operating systems fundamentals.

CS 825 - Computer Networks
Credits: 3.00
Introduction to local, metropolitan, and wide area networks using the standard OSI reference model as a framework. Introduction to the Internet protocol suite and to network tools and programming. Discussion of various networking technologies.

CS #827 - Computer Communications Software Design
Credits: 3.00
Telecommunications software. Error detection algorithms. Asynchronous and synchronous communications software. Network architectures. Protocol definition and implementation. Links through a local area network. Timing considerations. Implementation of selected communications software. Prereq: operating system fundamentals.

CS 830 - Introduction to Artificial Intelligence
Credits: 3.00
Machine intelligence, representation and control issues, search methods, problem solving, learning, natural language understanding, knowledge engineering, game playing. Heuristic programming using the LISP language. Prereq: data structures.

CS 835 - Introduction to Parallel and Distributed Programming
Credits: 3.00
Programming with multiple processes and threads on distributed and parallel computer systems. Introduces programming tools and techniques for building applications on such platforms. Course requirements consist primarily of programming assignments. Prereq: Undergraduate course in operating systems fundamentals and computer organization; or permission.

CS 845 - Correctness in Program Construction
Credits: 3.00
This course introduces the basic techniques required to approach the programming tasks with concern for correctness. Programs are considered as mathematical entities on which formal reasoning can be used to assert specific properties. Verification examples of different kinds are introduced. The material presented in this course allows students to state and prove correctness arguments on algorithms they develop, as well as to use actual formal development methods and tools. Topics include formal logic; predicate calculus; induction; assertions; Hoare logic; weakest pre-condition calculus; verification of assignment, conditional, and loop constructions; and formal properties on arrays, sets, lists, and graphs. Prereq: Data Structures, Mathematical Proof.

CS #846 - Introduction to Programming Semantics
Credits: 3.00
Informal, nonmathematical introduction to descriptive techniques of denotational semantics. Provides framework needed to describe formally programming languages such as PASCAL. No previous knowledge of the theory of computation or of any particular programming language is assumed. Prereq: programming language concepts and features or permission.

CS 860 - Introduction to Human-Computer Interaction
Credits: 3.00
Human-computer interaction is a discipline concerned with the design, evaluation and implementation of interactive computing systems for human use and with the study of major phenomena surrounding them. Prereq: operating systems fundamentals.

CS #865 - Introduction to Computational Linguistics
Credits: 3.00
Introduction to computational analysis of natural language, with a focus on semantic representations and the resolution of ambiguity. Provides an elementary working knowledge of linguistic and artificial intelligence methods as motivated by examples of potential input text. Topics include parsing, formal grammars, representation of knowledge and memory, inference, and interpretation of nonliteral language. Prereq: elementary knowledge of LISP or permission.

CS 867 - Interactive Data Visualization
Credits: 3.00
Detailed discussion of how an understanding of human perception can help us design better interactive displays of data. Topics include: color, space perception, object perception and interactive techniques. Students write interactive programs, give presentations and undertake a project designing and evaluating a novel display technique. Prereq: Introductory level C or C++ programming course. (Also listed as OE 867.)

CS 870 - Computer Graphics
Credits: 3.00
Input-output and representation of pictures from hardware and software points of view; interactive techniques and their applications; three-dimensional image synthesis techniques. Prereq: data structures.

CS 875 - Database System Principles
Credits: 3.00
Introduction to database system concepts and design; data models, especially the relational model; data description and manipulation languages; normalization and schema design; implementation issues and mechanisms. Prereq: data structures; mathematical proof.

CS 880 - Topics
Credits: 3.00
Material not normally covered in regular course offerings. May be repeated.

CS 898 - Master's Project
Credits: 3.00

CS 899 - Master's Thesis
Credits: 1.00 to 6.00
CR/F.

CS 900 - Graduate Seminar
Credits: 1.00
Regularly scheduled seminars presented by outside speakers, UNH faculty, and graduate students. Topics include reports of research ideas, progress, and results. Credit/Fail.

CS #912 - Advanced Compiler Design
Credits: 3.00
In-depth study of automatically generated syntactic error recovery, intermediate representation, machine independent and machine dependent optimization, code generation, register allocation. Tools for generating code generators and Graham-Glanville style instruction selectors. Examples of production code generators. Prereq: CS 812 or equivalent.

CS 920 - Advanced Operating Systems
Credits: 3.00
Study of the design and analysis of advanced operating systems, including distributed and multiprocessor operating systems. Lectures focus on the principles used in the design of operating systems, algorithms and data structures used in their implementation, and techniques for evaluating them. The topics covered include synchronization, mutual exclusion, distributed algorithms, security, fault-tolerance, modeling and performance, and distributed resource management. Prereq: operating systems fundamentals or equivalent.

CS 925 - Advanced Computer Networks
Credits: 3.00
Design and analysis of computer networks. Modeling and performance evaluation, queuing theory applied to computer networks. Traffic flow management and error control. Routing algorithms and protocols. Switch and router architectures. Selected issues in high-speed network design. Optical networks. Prereq: CS 825 or equivalent.

CS 929 - Collaborative Computing
Credits: 3.00
The goal of collaborative computing is to assist groups in communicating, in collaborating, and in coordinating their activities. Study of computer-based systems that support groups of people engaged in a common task (or goal) and that provide an interface to a shared environment. Investigation of several sample collaborative applications, like the World-Wide Web, virtual reality, video conferencing and work flow systems, along with related protocols and languages. Prereq: CS 825 and CS 860. Credit/Fail.

CS #930 - Artificial Intelligence
Credits: 3.00
Current approaches to machine intelligence and the simulation of human cognitive processes, including an introduction to recursive functions and programming with the LISP language. Heuristic programming, programs for game playing and natural language understanding, elementary theory of computability. Individual computer project required. Prereq: programming experience.

CS #934 - Logic Programming
Credits: 3.00
Introduction to the foundation, implementations, and application of logic programming. Emphasis on the study of example applications. Application areas include compilers, databases, and expert systems.

CS 941 - Design and Analysis of Algorithms
Credits: 3.00
Principles of design of efficient algorithms. Methods studied include recursion, divide and conquer, dynamic programming, greedy techniques, and data structure selection. Correctness and analysis of algorithms. Examples are drawn from problems in the areas of graphs, sorting, searching, pattern matching, and polynomials. Prereq: undergraduate algorithms course recommended.

CS 959 - Theory of Computation
Credits: 3.00
Models of computation, Church's thesis, completeness, undecidability. Time and space complexity of Turing machines. Savitch's theorem and hierarchy theorems. NP-completeness and Cook's theorem. Prereq: introduction to the theory of computation or equivalent.

CS 970 - Advanced Computer Graphics
Credits: 3.00
Advanced image synthesis techniques and photorealism. Ray tracing. Complex shading and lighting models. Antialiasing. Texture mapping. Surface generation and display.

CS 975 - Object-Oriented Database Systems
Credits: 3.00
Introduction to object-oriented database systems, concepts and design; object-oriented data models and languages; implementation issues and mechanisms. Prereq: CS 875.

CS 980 - Advanced Topics
Credits: 3.00

CS 981 - Advanced Topics in Database Systems
Credits: 3.00

CS 982 - Advanced Topics in Computer Networks
Credits: 3.00

CS 983 - Advanced Topics in Artificial Intelligence
Credits: 3.00

CS #984 - Advanced Topics in Computer Science Theory
Credits: 3.00

CS 985 - Advanced Topics in Operating Systems
Credits: 3.00

CS 986 - Advanced Topics in Program Correctness
Credits: 3.00

CS #987 - Advanced Topics in Computer Graphics
Credits: 3.00

CS 988 - Advanced Topics in Computer Graphics
Credits: 3.00

CS 989 - Advanced Topics in Algorithms
Credits: 3.00

CS 998 - Reading/Computer Science
Credits: 1.00 to 6.00

CS 999 - Doctoral Research
Credits: