Computer Science
A minor in computer science requires a minimum of 18 semester hours
Courses of Instruction
CMP 201: Data Structures
Credits 3Introduction 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.
CMP 202: Logic and Computing Structures
Credits 3The nature of the logical foundation of the discipline is emphasized with coverage including propositional and predicate calculus, formal systems and proof, and methods of informal proof. Writing proofs about sets, functions, grammars, trees, and graphs is emphasized with an eye both towards the study of the logic itself as well as a deepening understanding of the structures at hand.
CMP 310: Algorithms
Credits 3Introduction 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.
CMP 320: Models of Computation
Credits 3Formal 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.
CMP 330: Physical Computation
Credits 3Introduction 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.
CMP 333: Imbedded Systems
Credits 3Microcontroller-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.
CMP 340: The Craft of Coding
Credits 3Introduction 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.
CMP 393: Topics in Computer Science
Credits 1 Max Credits 3CMP 470: Artificial Intelligence
Credits 3Overview 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 3Theory 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