Computer Science

A minor in computer science requires a minimum of 18 semester hours

Courses of Instruction

CMP 101: Introduction to Computer Science

Credits 3
A first course in the discipline of computer science with emphasis on expressing ideas in a formal language. Introduces basic programming techniques, data abstraction, and algorithms. Includes discussion of the nature of computation and connections to major areas of computing.

CMP 201: Data Structures

Credits 3
Introduction to linked lists, stacks, queues, maps, trees, binary search trees, graphs, and hashing. Emphasis is on writing readable, efficient, and maintainable code. Object-oriented programming techniques, dynamic memory management, exception handling, and abstract data types are studied. Prerequisite: CMP 101

CMP 310: Algorithms

Credits 3
Introduction to the design and analysis of algorithms. Course coverage includes divide and conquer algorithms, dynamic programming, greedy algorithms, back-tracking, branch-and-bound, and classic searching and sorting. Complexity is studied as well and includes order of growth, tractability, P vs. NP, and how to design algorithms for NP-hard problems. Prerequisite: CMP 101 and MTH 113/120.

CMP 320: Models of Computation

Credits 3
Formal languages and automata theory, with an introduction to computability. Course coverage includes deterministic and nondeterministic automata, pushdown automata, regular and context-free languages and grammars, models of computation including the Turing machine, computability, decidability, and the Halting problem. Prerequisite: CMP 101

CMP 330: Physical Computation

Credits 3
Introduction to the architecture and organization of physical computers. Machine language programming, the design of instruction sets, and software/hardware tradeoffs are emphasized. Digital design topics such as transistors, Boolean algebra, logic gates, functional units, timing, computer arithmetic, and overall system design are studied. Topics include data path and controller design, hazard detection and resolution, dynamic scheduling, the memory hierarchy, parallelization, and application-specific processors. Prerequisite: CMP 101.

CMP 333: Imbedded Systems

Credits 3
Microcontroller-based embedded system design and programming. Topics include basic machine electronics, interface design, and C and assembly language programming for real-time embedded systems. Applications to robotics such as planning, vision, and cybernetics are covered. Prerequisite: CMP 101.

CMP 340: The Craft of Coding

Credits 3
Introduction to applications-level software design principles with emphasis on writing efficient, maintainable, and reusable code. Topics include design patterns, debugging, testing, exception handling, recursion, memory management, classes, inheritance, and polymorphism. This is a programming intensive course giving the student experience in a modern object-oriented language. Prerequisite: CMP 201.

CMP 393: Topics in Computer Science

Credits 1 Max Credits 3
An elective course on special topics in computer science that are not normally offered. Specific topics may vary. The course may be taken for credit more than once under different titles.

CMP 470: Artificial Intelligence

Credits 3

Overview of basic ideas in artificial intelligence. Coverage includes knowledge representation, classic search techniques, probabilistic reasoning, and neural networks. Modern computer architectures supporting artificial intelligence algorithms are covered. Includes discussion of the nature of intelligence and whether machines can think. Prerequisite: CMP 101 and MTH 113/120

CMP 477: Evolutionary Computation

Credits 3

Theory and application of stochastic, population-based, general-purpose problem solving algorithms inspired by natural evolution. Includes coverage of genetic algorithms, swarm intelligence, evolutionary algorithms, genetic programming, and multi-agent simulations. Applications to problems in science, engineering, mathematics, business, and the humanities are studied. Prerequisite: CMP 101 and MTH 113/120