# Undergraduate Courses

This course fulfills Area III (Quantitative Reasoning) requirements. Introduction to Matlab and other software packages for numerical and symbolic manipulation, computer arithmetic, solutions of systems of equations, differentiation and integration, root finding, interpolation and curve fitting…

This course presents a survey of the fundamental mathematical tools used in computer engineering: sets, relations, and functions; propositional and predicate logic; proof writing strategies such as direct, contradiction and induction; summations and recurrences; elementary asymptotics and timing…

A survey of the fundamental mathematical tools used in computer engineering: sets, relations, and functions; propositional and predicate logic; proof writing strategies, such as direct, contradiction and induction; summations and recurrences; counting and discrete probability; undirected and…

This is a first course on the theory of computing. Fundamental Topics include finite automata, regular expressions and languages, context-free grammars and languages, push-down automata, pumping lemmas for regular languages and for context-free grammars, the Chomsky hierarchy of language…

The design, analysis, implementation, and evaluation of the fundamental structures for representing and manipulating data: lists, arrays, trees, tables, heaps, graphs, and their memory management.

**Prerequisites: **

…

Introduction to social and ethical issues relating to computer science and information technology. Topics include intellectual property, open source software, the digital divide, globalization, and professional ethics. Students should have a working knowledge of personal computing.

…

Full cycle of a software system development effort, including requirements definition, system analysis, design, implementation, and testing. Special emphasis is placed on system analysis and design. The design phase includes development of a user interface. A large term project incorporates the…

An introduction to the application of programming methodology to the production of computer and video games, including user education, algorithms, display methods, and sound. This course will begin with two-dimensional games using available standard program libraries.

**…**

An introduction to the application of programming methodology to the production of computer and video games, including user education, algorithms, display methods, and sound. This course will begin with two-dimensional games using available standard program libraries.

**…**

Numerical methods and computing. Topics include: computer arithmetic; numerical solutions of nonlinear equations; polynomial interpolation; numerical differentiation and integration; numerical solutions of systems of linear equations, initial and boundary value problems, systems of ordinary…

Computationally oriented, covering a wide range of topics that are necessary for numerical simulation in science and engineering. Sequential and parallel numerical methods will be introduced. Available symbolic and numerical software packages (e.g., Matlab, Maple and MPI) and visualization tools…

In this course, we will study complex dynamic systems, examining their performance, reliability, etc. The reason for doing this is to improve such systems either in the design phase (before a costly system is built) or the operation phase (tune or upgrade). A simulation model may be used for…

Basic concepts of computer security and the theory and current practices of authentication, authorization, and privacy mechanisms in modern operating systems and networks.

**Prerequisites: **

http://bulletin.uga.edu/…

Client-side and server-side techniques for use on the World Wide Web. Interactive, dynamically-generated, and database -enabled web pages are discussed. Course content changes frequently to incorporate new Internet technologies.

**Prerequisites:**

…

The application of artificial intelligence methodologies and algorithms to problems involving the world wide web. Introduction to problem-solving, knowledge representation, learning, and reasoning techniques and exploration of how they are applied to enable information provisioning, social…

Provides intermediate to advanced understanding of the use of Internet, World Wide Web, and network computing (including Java) technologies for management (search, access, integration, presentation) of multimedia information. Topics discussed include key techniques, tools and technologies for…

The theory and practice of database management. Topics to be covered include efficient file access techniques, the relational data model as well as other data models, query languages, database design using entity-relationship diagrams and normalization theory, query optimization, and…

A broad introduction to data mining methods and an exploration of research problems in data mining and its applications in complex real-world domains. Approaches include association and classification rule learning, tree learning, neural network and Bayesian methods, support vector machines,…

Algorithms, covering basic analysis techniques, basic design techniques (divide-and-conquer, dynamic programming, greedy), basic and advanced graph algorithms, and NP -completeness theory.

**Prerequisites: **

http://…

Application of discrete algorithms to computational problems in molecular biology. Topics are drawn from such areas as classical sequence comparison, multiple sequence alignment, DNA sequence assembly, DNA physical mapping, genome rearrangement, evolutionary tree construction, and protein…

In this course we will explore modern programming languages and the paradigm -‐ procedural or imperative, functional, and logic programming -‐ that each strives to accommodate. Projects involve at least three languages to get a feel for the language paradigms.

**Prerequisites: …**

The functional programming paradigm: functions and types, type inference and polymorphism, higher order functions and recursion, evaluation strategies, abstract data types and modules, lists, trees, and lazy data structures, reasoning about functional programs.

**Prerequisites:…**

This is an introduction to robotics with a focus on autonomous mobile robots. The two major issues dealt with are: (1) cognitive behavior, and (2) motion. Cognitive behavior addresses problem solving using sensory inputs and desired goals. Motion deals with aspects of movement from simple…

This is an introduction to robotics with a focus on autonomous mobile robots. The two major issues dealt with are: (1) cognitive behavior, and (2) motion. Cognitive behavior addresses problem solving using sensory inputs and desired goals. Motion deals with aspects of movement from simple…

Programming in LISP and PROLOG, with emphasis on artificial intelligence techniques. Other languages used for artificial intelligence work will be presented more briefly.

**Prerequisites: **

http://bulletin.uga.edu/…

Programming in LISP and PROLOG, with emphasis on artificial intelligence techniques. Other languages used for artificial intelligence work will be presented more briefly.

**Prerequisites: **

http://bulletin.uga.edu/…

An introduction to the fundamental concepts in computer science, including algorithms and logic, and the theoretical foundations in philosophy that define the field of artificial intelligence.

**Prerequisites: **

http://…

An introduction to the fundamental concepts in computer science, including algorithms and logic, and the theoretical foundations in philosophy that define the field of artificial intelligence.

**Prerequisites: **

http://…

An in-depth introduction to evolutionary computation methods and an exploration of research problems in evolutionary computation and its applications which may lead to work on a project or a dissertation.

**Prerequisites: **

…

Design and implementation of compilers for high-level programming languages. Topics include all phases of a typical compiler, including scanning, parsing, semantic analysis, intermediate code generation, code optimization, and code generation. Students design and develop a compiler for a small…

In recent years, computer scientists and physicists have begun to discuss the possibility of a computer whose hardware utilizes quantum phenomena. There has developed a notion of a quantum algorithm, and examples are known of computational problems whose solution can be carried out in…

Basic counting principles: permutations, combinations, probability, occupancy problems, and binomial coefficients. More sophisticated methods include generating functions, recurrence relations, inclusion/exclusion principle, and the pigeonhole principle. Additional topics include asymptotic…

Basic counting principles: permutations, combinations, probability, occupancy problems, and binomial coefficients. More sophisticated methods include generating functions, recurrence relations, inclusion/exclusion principle, and the pigeonhole principle. Additional topics include asymptotic…

Elementary theory of graphs and digraphs. Topics include connectivity, reconstruction, trees, Euler's problem, hamiltonicity, network flows, planarity, node and edge colorings, tournaments, matchings, and extremal graphs. A number of algorithms and applications are included.

**…**

Elementary theory of graphs and digraphs. Topics include connectivity, reconstruction, trees, Euler's problem, hamiltonicity, network flows, planarity, node and edge colorings, tournaments, matchings, and extremal graphs. A number of algorithms and applications are included.

**…**

Design and analysis of the structure and function of modern computing systems. Topics studied include combinational and sequential logic, number systems and computer arithmetic, hardware design and organization of CPU, I/O systems and memory systems, instruction set and assembly language design…

Coverage of the key concepts in modern operating systems. Specific topics include process management, synchronization mechanisms, scheduling strategies, deadlock detection/avoidance, memory management, file systems, protection and security, and distributed systems. Concepts will be reinforced…

Basic concepts of real-time systems with an emphasis on scheduling issues. Consideration of both offline and online scheduling. Online schedules will include static and dynamic priority systems, with and without allowing preemption. Also, consideration of resource sharing and multiprocessor…

In-depth coverage of computer networks, including: digital data transmission and encoding, layered protocol models, Internet protocol, Internet client-server software, and network design methodology.

**Prerequisites:**

…

Introduces the technologies required to develop mobile and ubiquitous computing applications, including communication protocols, naming and location management, replication and consistency management, security and privacy, content adaptation, and battery power management.

**…**

The fundamental concepts in distributed computing and the practical techniques for building distributed systems. Topics include distributed computing models, naming, synchronization, replication and consistency, fault tolerance, and security. Widely deployed distributed systems are used as case…

Issues in the design, development, and evaluation of user interfaces for computer systems. Concepts in human factors, usability, and interface design, and the effects of human capabilities and limitations on interaction with computer systems.

**Prerequisites: **

…

Principles of two-dimensional and three-dimensional interactive graphics. Principles of scan conversion algorithms for two-dimensional and three-dimensional graphics primitives; image data structures and modeling techniques; visual realism, data storage/retrieval, compression, parallel computing…

Introduction to the technology and techniques used in virtual environments (also known as virtual reality). Students will gain knowledge about the latest innovations in this field, will understand the important research issues and methodologies for VEs, and will have the opportunity to gain…

Brings together computer science, machine learning, and computer vision analysis techniques. Introduces basic programming concepts within the context of scientific discovery and applying those concepts to current problems in biology using the Python ecosystem.

This course introduces standard approaches to neuroimage analysis, including basic concepts of neuroimaging, basic algorithms, principles of software systems, and their applications. Neuroimage analysis software tools will be used in hands-on projects.

**Prerequisites: **…