Subject Description
Computer Science

CSCI 361 | Algorithms and Data Structures

This is a course in advanced data structures, the algorithms needed to manipulate these data structures, proofs that the algorithms are correct, and a runtime analysis of the algorithms. Students study advanced data structures such as Red-Black Trees, 2-3 Trees, Heaps, and Graphs. Students also study algorithm design techniques including Greedy Algorithms, Divide and Conquer, Dynamic Programming, and Backtracking. They also learn about NP-Complete problems.

CSCI 335 | Optimization

This course is about how to find the best - or at least good - solutions to large problems frequently arising in business, industrial, or scientific settings. Students learn how to model these problems mathematically, algorithms for finding solutions to them, and the theory behind why the algorithms work. Topics include the simplex method, duality theory, sensitivity analysis, and network models. The focus is on linear models and models with combinatorial structure, but some nonlinear models are considered as well. Optimization software is used frequently.

CSCI 325 | Network Programming

Computer networks have become a fundamental part of our everyday lives, used for everything from social networking to research and commerce. This course introduces the concepts behind modern computer networks and their implementation. It covers the software and hardware architecture of the internet, networking protocols like TCP and IP, how services like Email and the Web work, approaches for reliable and secure communication, and the details of both wired and wireless transmission. Programming exercises reinforce key concepts from the course.

CSCI 315 | Computer Graphics

This course is an introduction to the process of generating images with a computer. The emphasis is on the design and use of graphical facilities for two- and three-dimensional graphics. Students study the mathematical theory underlying computer generated graphics, and will implement programs utilizing these techniques. The mathematical topics covered include rotations, translations, and perspective. The core pieces of the graphics pipeline used in current graphics hardware are studied.

CSCI 291 | Programming Language Paradigms

Declarative programming languages are an important alternative to languages (such as C, C++, and Java) that use the more familiar imperative programming paradigm. This course introduces the functional and logic programming paradigms in depth through assignments in the programming languages Haskell and Prolog. These languages are based on models of computation that are fundamentally different from the von Neumann model underlying imperative programming languages, and exposure to these new paradigms provides valuable perspective on programming and problem solving in general.

CSCI 261 | Computer Science II

This course is a continuation of CSCI 161. It provides an introduction to the study of fundamental data structures and their associated algorithms. Students learn how to choose appropriate data structures and algorithms for particular problems. They learn about lists, stacks, queues, trees, sorting, searching, abstract data types, and object-oriented programming using an object-oriented programming language. A weekly laboratory is required.