### Computer Science Courses

**1104 Bits and Bytes **
Introduction to algorithmic thinking through a survey of different branches of computer science. Possible topics include: puzzle solving using a computer, functional programming, Euclidean algorithm, sorting, root-finding, binary notation, digital circuits, finite and cellular automata, error-correction, encryption, compression, artificial neural networks, and genetic algorithms. The programming language used in this course is different from the language used in Computer Science 1106.
Prerequisites: Mathematics 1001 and Mathematics 1002 or placement.
This course does not satisfy any requirement for the Computer Science major or minor.
**1106 The Art of Programming **
An introduction to the use of algorithms for problem solving. The course will focus on finding algorithmic solutions for a given problem and expressing these solutions in a programming language. This course includes a laboratory.
Prerequisites: Mathematics 1001 and Mathematics 1002 or placement.

**1109 Discrete Mathematics **
An introduction to mathematical reasoning, discrete structures, and foundations of algorithm analysis. Possible topics include propositional and predicate logic, proof techniques including mathematical induction, recurrences, sets, relations, pigeonhole principle, combinatorics, graphs, discrete probability, and number theory.
Prerequisite: Computer Science 1106.
Quantitative Reasoning.
Cross-listed with Mathematics 1109.

**2209 Computer Organization**
Introduction to interaction between software and hardware levels in modern computers. Possible topics include Moore's law, von Neumann architecture, data representation, error correction, digital circuits, CPU design, memory, input/output, file systems, data compression, operating systems, virtual machines, and programming tools.
Prerequisite: Computer Science 1106. Recommended: Computer Science/Mathematics 1109.

**2210 Numerical Methods**
An introduction to numerical methods for solving problems from calculus and linear algebra, including the solution of a single nonlinear equation, the solution of linear systems, interpolation and approximation, differentiation and integration, and the solution of eigenvalue problems.
Prerequisites: Computer Science 1106 and Mathematics 1118. Cross-listed with Mathematics 2210.

**2217 Data Structures**
Study of data structures, recursion, searching and sorting algorithms. Introduction to complexity analysis of algorithms using Big-Oh notations.
Prerequisites: Computer Science 1106 and Computer Science/Mathematics 1109.

**2222 Database Design**
An introduction to database management systems that examines both the relational and semi-structured data models.
Topics will include design principles, query languages, data dependencies, and optimization techniques.
Prerequisites: Computer Science 1106 and Computer Science/Mathematics 1109.

**3305 Artificial Intelligence**
The study of computer algorithms inspired by nature and algorithms imitating human reasoning. Possible topics include: heuristic search, neural networks, genetic algorithms, expert systems, fuzzy logic, automated theorem proving, and data mining.
Prerequisite: Computer Science 2217.

**3311 Networks**
An introduction to data communications and computer networking, including the OSI 7-layer model,
internet and transport protocols, network hardware technology, and performance issues.
Prerequisite: Computer Science 2217.

**3314 Theory of Computation**
This course studies the abstract models of machines and languages recognized by them, and introduces the concept of computability. This course not only serves as the theoretical foundation of computer science, but also has wide application to programming languages linguistics, natural language processing, compiler design, and software design. Topics include finite automata and regular languages, pushdown automata and context-free grammars, grammar transformations and normal forms, Turing machines and computable functions, and unsolvable problems including the halting problem.
Prerequisite: Computer Science/Mathematics 1109 or Mathematics 2224. Recommended: Computer Science 2217.
Cross-listed with Mathematics 3314.

**3315 Graphics**
Introduction to algorithms used to draw two- and three-dimensional objects on a computer screen.
Possible topics include: computation of polygon orientation and area, point-in-polygon test, point-on-line test,
triangulation algorithm, rotations, Bresenham's line drawing algorithm, Cohen-Sutherland line clipping algorithm, Bezier curve, perspective projection,
hidden-line elimination, and hidden-face elimination.
Prerequisite: Computer Science 2217.

**3317 Algorithms**
Advanced study of tree and graph algorithms and algorithm complexity. Introduction to computational complexity classes P and NP.
Prerequisite: Computer Science 2217.

**4406 Principles of Programming Languages**
A survey of programming language concepts, functional languages, logical programming, and programming language semantics.
Prerequisite: Computer Science 2217. Recommended: Computer Science/Mathematics 3314.

**4413 Modern Cryptography**
An introduction to data encryption and authentication in the modern age. The course covers both symmetric-key and asymmetric-key protocols. Topics may include block ciphers, pseudorandomness, message authentication codes, digital signatures, key distribution, and cryptanalysis. The course emphasizes mathematical rigor, including formal definitions of security goals and proofs of protocol security.
Prerequisites: Computer Science 1106 and Computer Science/Mathematics 1109. Recommended: Computer Science/Mathematics 3314.

**4494 Senior Project**
A study of software development models, requirements specification, and GUI design. Student will propose, design, implement, test, and document a substantial application or write a thesis containing original work in theoretical computer science. Projects and theses will be presented in class.
Prerequisite: Senior standing.

**1165; 2265; 3365; 4465 Special Topics in Computer Science**
The study of a selected topic in the discipline. Different topics are chosen for each offering.
Prerequisite: permission of the instructor.

**2295; 3395 Internships in Computer Science**
Supervised field experiences in appropriate settings, usually off-campus, designed to assist students in acquiring and using skills and knowledge of the discipline unique to the selected topic.

**2298; 3398 Independent Studies in Computer Science**
Directed study for qualified students in more advanced topics in computer science theory, systems, or application areas.
Prerequisite: permission of the instructor.