Courses
Course Descriptions
University of Arizona Fall 2007 Catalog Course Descriptions
Graduate Course Prerequisite Chart
Undergraduate Course Prerequisite Chart
C SC 127A: Introduction to Computer Science
C SC 127A provides an introduction to programming in Java. The course focuses not only on the language features of Java, but also on issues of program design and development. This course is intended for students in technical disciplines (math, computer science, other sciences, engineering, MIS, etc).
Students will be asked to write various programs in Java (approximately 50-150 lines of code) and will be graded both on the correctness of their solutions and the design choices they have made in developing their programs.
Specific Java topics to be covered include: basic control structures (functions, if, for, while), primitive types, using predefined libraries and classes, arrays, classes, combinations of arrays and classes, file processing and simple recursion.
C SC 127A is the first semester of a two-semester sequence. C SC127A focuses on procedural abstraction while C SC 127B focuses on data abstraction and complex data structures. C SC 227 focuses on data abstraction and complex data provides a one-semester alternative for students who can handle the material at an accelerated pace.
Prerequisites: None. Algebra recommended.
C SC 127B: Introduction to Computer Science
Students will be asked to write various programs in Java (approximately 100-250 lines of code) and will be graded both on the correctness of their solutions and the design choices they have made in developing their programs.
Specific Java and data structure topics to be covered include: advanced recursion, linked lists, binary trees, hashing, elementary analysis of efficiency. The course will also stress the concept of data abstraction, abstract data types and the use of Java classes to encapsulate abstract data types.
C SC 127B is the second semester of a two-semester sequence. Students should not take C SC 127B unless they have already taken C SC 127. C SC 227 provides a one-semester alternative for students who can handle the material at an accelerated pace.
Prerequisites: 127A, credit allowed for C SC 127B or C SC 227 but not for both.
C SC 227: Program Design and Development
Programming in a high-level language such as Java for students with significant prior programming experience. Emphasis on program design issues. Programming topics: basic control structures, primitive data types, arrays, classes, recursion, linked structures, binary trees, hashing.
C SC 227 covers most of the material of the C SC 127A/127B sequence in one semester, providing an introduction to programming in Java. Students are expected to have substantial previous programming experience so that they can learn the material at a faster pace. Approximately the first third of the course will be devoted to material from C SC 127A and the remaining two-thirds will be devoted to material from C SC 127B.
Prerequisites: Algebra Recommended. Credit allowed for C SC 127B or C SC 227 but not for both.
C SC 245: Introduction to Discrete Structures
Description: Introduction to the structures and proof techniques used in computer science: sets, relations, functions, predicate logic, induction, finite automata, grammars, parsing.
Prerequisites: Math 110, Math 111, Grade of B or better in C SC 127B or C SC 227
C SC 252: Computer Organization
Description: Basic machine organization; elementary hardware concepts; interrupts. Machine operations and instructions; assembly language concepts and programming.
Prerequisites: C SC 127B or C SC 227
C SC 296H: Research Topics in Computer Science
Weekly presentations by faculty describing their research and opportunities for undergraduate participation. Strongly recommended for honors students as a way to build contacts with department faculty. Freshman and sophomores should register for C SC 296H; juniors and seniors should register for C SC 496H.
Prerequisites: None.
C SC 335: Object-Oriented Programming and Design
This course explores object-oriented features such as inheritance and object-oriented design issues. The course also presents event-driven programming and the Java Swing classes for constructing interactive Graphical User Interfaces (GUIs). It will also include some of the Unified Modeling Language (UML) and several design patterns.
Students will complete a few programs using these Java features, and a fairly complex system by the end of the semester while working in teams.
Objectives - To teach the basics of object-oriented analysis, design and programming. Experience software development on a larger scale. Gain experience working on teams. Become comfortable with event-driven programming and graphical user interfaces and related design issues. Learn and apply some of the current tools of modern and object-oriented technology: Inheritance, Polymorphism, interfaces, Event-driven programming, graphical user interfaces, Uses cases, Responsibility driven design, Unified Modeling Language (UML), Object-Oriented Design Patterns.
Prerequisites: C SC 127B or C SC 227. Credit may be given for C SC 330 or C SC 335, but not both.
C SC 345: Analysis of Discrete Structures
Topics include trees, graphs, program verification, algorithm analysis, recurrence relations, algorithm classes (greedy, divide and conquer), hashing, combinatorics and elementary probability.
Prerequisites: C SC 245
C SC 352: Systems Programming and Unix
Description: Programming in C, including single and multi-dimensional arrays, lists, stacks, queues, trees, and bit manipulation. Unix topics, including debuggers, makefiles, shell programming, and other topics that support C programming.
Prerequisites or Concurrent Registration: C SC 252
C SC 372: Comparative Programming Languages
This course is a study of several modern programming languages and the programming paradigm that each language strives to accommodate. Functional programming is studied with ML. Logic programming is studied with Prolog. Icon is studied to provide an alternative perspective on traditional procedural programming.
For each language we will study data types, control structures, syntax and semantics, idiomatic constructs, translation into executable units, and the run-time environment. In some cases we will go behind the scenes to examine implementation of language elements.
An emphasis of the course will be to understand the design philosophy of each language and how that philosophy is exhibited in the elements of the language.
Prerequisites: C SC 127B or C SC 227
C SC 386: C# Programming for .NET Platform
Introduction to C# and the .NET Platform for students with a Java background, covering the structures, paradigms, and problems for which the language and the platform were designed while teaching real-world applications of object-oriented programming and multilanguage systems.
Prerequisites: C SC 335
CSC387: Developing Enterprise Web Applications
Catalog Description : (3 units) Developing Enterprise Web Applications. Explores the issues involved in designing and building enterprise web applications : client/server and n-tier architectures, database access, XML, web services. Prerequisite: CS386 or permission of the instructor.
Grading : Students will produce an interactive website of their own design throughout the semester. Each week students will be required to add new functionality to their system and will lose points if they don't complete the work in a timely manner. The bulk of the grade will come from exams ( two midterms and a final) and evaluation of their individual project (one mid semester review and a final review)
Syllabus : Fundamental concepts of web programming, Basic HTML/CSS/Javascript, Client / Server programming, Server side controls, Brief overview of database, Basic XML/XSL, N-tier application architecture, Sessions and state management, Security for web applications, Web services
Prerequisites: C SC 386 or consent of instructor.
C SC422: Introduction to Parallel and Distributed Programming
A concurrent program contains multiple processes that execute at the same time. The challenge is to get the processes to work correctly together. This course examines a variety of parallel and distributed programming problems, and shows how to solve them using shared variables and message passing. Homework will consist of problem sets and programming projects.
Specific topics include: Basic Concepts - Hardware, Applications, and Programming Styles - Processes and Synchronization - Programming with Shared Variables - Locks and Barriers - Semaphores - Monitors - Distributed Programming - Message Passing - Remote Procedure Call and Rendezvous - Paradigms for Process Interaction - Major Applications - Scientific Computing - Distributed Systems
Prerequisites: C SC 345 or C SC 346, C SC 352.
C SC 425: Computer Networking
This course explores the principles of computer networking and its role in distributed computing, with an emphasis on network software design. The course focuses on the underlying concepts of networking by discussing such topics as: network architecture: protocol, layering, encapsulation - resource allocation: multiaccess networks, congestion control - end-to-end services: reliability, flow control, message order - switching: forwarding, routing, contention, multicast, scalability - performance: latency, throughput, burstiness, jitter - applications: digital libraries, remote file access, video - data representation: presentation formating, compression, encryption
Grades will be based on two exams and several homework assignments. Homework will consist of both paper problems and experimental programming assignments.
Prerequisites: C SC 352
C SC 433: Computer Graphics
This course presents an introduction to computer graphics designed to give the student an overview of fundamental principles. Course work stresses the reduction of concepts to practice in the form of numerous programming assignments. The course will include an overview of common graphics hardware, 2D and 3D transformations and viewing, and basic raster graphics concepts such as scan-conversion, bitblt's, and clipping. Methods for modeling objects as polygonal meshes or smooth surfaces, and as rendering such as hidden-surface removal, shading, illumination, and shadows will be investigated.
Prerequisites: C SC 335, C SC 345, or C SC 346, C SC 352 and MATH 215
C SC 436: Software Engineering
This course introduces the fundamental software engineering techniques for developing correct, efficient, reliable, maintainable and evolvable software for a large project. In the highly dynamic and competitive software industry, the customers' needs may sometimes be difficult to understand in advance or may change while the software is being developed. Therefore, software products may need to evolve iteratively instead of being designed completely in advance. The class project in this course will attempt to give you an experience in developing a high quality, evolvable software product.
Prerequisites: C SC 335, C SC 352, C SC 345, C SC 346
C SC 437: Geometric Algorithms
Study of algorithms for geometric objects, using a computational geometry approach, with emphasis on applications for graphics, VLSI and GIS. How to represent and overlay maps, find nearest neighbors, solve linear programming problems, search geometric data bases and more.
Prerequisites: C SC 345.
C SC 445: Algorithms
The emphasis is on learning techniques for designing algorithms and data structures for various computer applications. We will learn how to create algorithms, to analyze them, and prove their correctness.
In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. We will also discuss implementation issues.
Topics to be discussed include: Paradigms of algorithm design, Sorting and Searching, String matching, Graph algorithms, Geometric algorithms, Approximation algorithms
Prerequisites: C SC 345 or C SC 346; upper division writing proficiency.
C SC 452: Principles of Operating Systems
This course studies the principles and concepts that govern the design of modern computer operating systems. In general terms, the course covers the two primary functions of an operating system: insulating users and applications from details of the computer hardware, and managing the allocation of resources to improve efficiency. Specific topics covered include the process model of computation and the related areas of mutual exclusion and process synchronization, including the use of semaphores, message passing, and monitors. Process deadlock detection and prevention are also discussed. With respect to resource management, areas covered include processor scheduling, memory management, and management of secondary storage devices, such as magnetic disks. Memory management topics consist of swapping, virtual addressing, paging, segmentation, and sharing. Secondary storage management topics include file system organization, access methods, and performance optimizations. Implementation techniques are discussed for each of these topics, as well as protection and security concerns. Finally, the course will cover alternative operating system architectures, and the implications of future trends in computing on operating system design.
Prerequisites: C SC 352.
C SC 453: Compilers and Systems Software
C SC 453 covers the design and implementation of translator-oriented systems programs, especially compilers. Topics covered include lexical analysis, top down and bottom up parsing, syntax-directed code generation, and debuggers.
Substantial programming is required.
Prerequisites: C SC 345, C SC 346, C SC 352, C SC 372 recommended.
C SC 460: Database Systems
This is a broad coverage course which gives students a detailed examination of the use of database management systems. The topics covered include conceptual design, data models, query languages, logical database design, physical database design, and introduction to query optimization.
Prerequisites: Prerequisites: C SC 335, C SC 345 or C SC 346
C SC 473: Automata, Grammars and Languages
This course is an introduction to the fundamental models of computation used throughout computer science: finite automata, pushdown automata, and Turing machines. The hierarchical relationships among these models, their relative power and limitations, and their variants are studied. Student skills are developed in understanding and using rigorous definition and proof to attack precisely formulated questions about computability and computation. The only successful method known for learning these skills is by working challenging problems, therefore, heavy emphasis is laid upon student problem assignments and careful evaluation of student solutions. The course aims at improving students written communication skills, and serves as the program's writing emphasis course.
The course explores models for and fundamental limitations of the computational process. Proof techniques, major results and computing applications of the results will all be stressed. Important use of the course material is made later in the computer science curriculum.
Topics covered include: finite automata and regular expressions, turing machines, properties of regular sets, Church's thesis, context-free grammars and pushdown automata, recursive and recursively , enumerable sets, properties of context-free languages, universal machines, parsing applications, undecidable problems and reducibility
Prerequisites: C SC 345 or C SC 346
C SC 477: Introduction to Computer Vision
Computer vision is about building systems that see. Such a system would be able to take images and output a representation of what is in the world in front of the camera. We are all familiar with this process as it happens whenever we look around. However, putting this capability into a machine has proven to be very difficult and is the topic of much current research. In this course we will study the basic approaches that have been developed to analyze image data in an attempt to solve this problem, and their applications to other related areas such as computer graphics and image databases. This course should be considered by students interested in computer vision, image processing, image databases, computer graphics, artificial intelligence, and cognitive science.
The subject involves substantial math. While much of the required math will reviewed/developed as part of the course, students who are not strong in math should expect to spend extra time struggling with it. The course will also have substantial programming. Assignments will be in C/C++ and must either be developed on Linux, or ported to Linux for grading. Since some library support will be provided on Linux for certain assignments, doing them on an alternative platform may prove to be a disadvantage. It is possible that Matlab (a C like interpreted language) might be allowed/required for some assignments.
Prerequisites: MATH 215 or equivalent math background. Knowledge of probability helpful. C SC 345 or C SC 346; C SC 352.
C SC 496H: Research Topics in Computer Science
Weekly presentations by faculty describing their research and opportunities for undergraduate participation. Strongly recommended for honors students as a way to build contacts with department faculty. Freshman and sophomores should register for C SC 296H; juniors and seniors should register for C SC 496H.
Prerequisites: None.
C SC 520: Principles of Programming Languages
This course will define, analyze and evaluate important concepts found in current programming languages. Its goals are to build an ability to evaluate and compare programming languages, both from the user's and implementor's view, and to develop precise mechanisms for specifying the semantics of programming languages.
Specific topics include: scope of objects and time of binding, module mechanisms (e.g., blocks, procedures, coroutines), data abstraction, datatypes, control structures, storage management and runtime support, operational, denotational, and axiomatic semantic specification, applicative and object-oriented languages.
Prerequisites: C SC 453
C SC 522: Parallel and Distributed Computing
Basic concepts and semantics of concurrent programs. Synchronization methods and programming techniques: locks, semaphores, monitors, message passing, programming paradigms. High performance computing: hardware, applications, programming tools and techniques, parallelizing compilers, performance tuning. Distributed computing: RPC and rendezvous, distributed systems, decentralized control algorithms.
Prerequisites: C SC 422
C SC 525: Principles of Computer Networking
This course explores the principles of computer networking and its role in distributed computing. The focus of the course is on the TCP/IP protocol suite as well as Internet architecture and infrastructure design. The course covers the underlying concepts of networking by discussing such topics as: Foundations of networking: communication, analog vs. digital, delay/latency, bandwidth, etc., Network architecture: protocols, layering, encapsulation, Resource allocation: multiaccess networks, congestion control, End-to-end services: reliability, flow control, message order, Experimental functionality: multicast, mobility, integrated and differentiated services, Switching: forwarding, routing, contention, multicast, scalability, Performance: latency, throughput, burstiness, jitter, Applications: web, remote file access, audio and video.
Grades will be based on two exams and several homework assignments. Homework will consist of both paper problems and experimental programming assignments. The programming assignments are in C so the ability to program in C is a prerequisite for the course.
Prerequisites: C SC 425
C SC 533: Computer Graphics
This course presents an introduction to computer graphics designed to give the student an overview of fundamental principles. Course work stresses the reduction of concepts to practice in the form of numerous programming assignments. The course will include an overview of common graphics hardware, 2D and 3D transformations and viewing, and basic raster graphics concepts such as scan-conversion, bitblt's, and clipping. Methods for modeling objects as polygonal meshes or smooth surfaces, and as rendering such as hidden-surface removal, shading, illumination, and shadows will be investigated.
Prerequisites: C SC 335, C SC 345, or C SC 346, C SC 352, MATH 215
C SC 536: Software Engineering
This course introduces the fundamental software engineering techniques for developing correct, efficient, reliable, maintainable and evolvable software for a large project. In the highly dynamic and competitive software industry, the customers' needs may sometimes be difficult to understand in advance or may change while the software is being developed. Therefore, software products may need to evolve iteratively instead of being designed completely in advance. The class project in this course will attempt to give you an experience in developing a high quality, evolvable software product.
C SC 545: Design and Analysis of Algorithms
The emphasis of this course is on techniques for designing algorithms for various computer applications. In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. We will also discuss techniques for implementing algorithms and improving program performance.
I. Introduction
· Mathematical preliminaries, in particular, mathematical induction.
· Analysis of algorithms.
· Techniques for improving performance.
II. Basic Algorithms:
· Algorithms involving sequences and sets -- string searching, data
compression, spell checking, sequence comparisons, etc.
· Graph algorithms--minimum spanning trees, shortest path problems,
matching, graph decomposition, network flows, etc.
· Geometric algorithms--convex hull, closest points, intersection
problems, etc.
· Algebraic and numerical algorithms--polynomial and matrix
multiplication, random numbers, probabilistic algorithms, FFT, etc.
· Reductions and NP-Completeness.
III. Additional topics (as time permits)
· Web Search algorithms
· Algorithms for Molecular Biology
Prerequisites: C SC 445, C SC 473, and MATH 362
C SC 552: Advanced Operating Systems
This course studies fundamental concepts in modern operating systems, emphasizing the design of operating systems for parallel and distributed systems.
Specific topics include: Process Management - Memory Management - Interprocess Communication - Remote Procedure Call - Name Service - Authentication - Distributed File Systems - Process Migration - Distributed Shared Memory.
Grades will be based on exams, writing assignments, and programming projects. The class will involve extensive reading of papers from the literature.
Prerequisite: C SC 452
C SC 553: Principles of Compilation
This course considers advanced topics in compilation. Emphasis will be placed on advanced topics in code generation, register allocation, and optimization. Specific topics discussed will include: LR parsing - code generation and machine independent peephole analysis - code generation for modern architectures such as RISC machines - register allocation - formulation and solution of data flow problems - optimization using data flow information.
Heavy emphasis will be placed on implementation of the concepts discussed in class.
Prerequisites: C SC 453 and C SC 473
C SC 560: Database Systems Implementation
C SC 560 is a graduate-level course in database systems that will emphasize the
DBMS architecture and implementation issues. The topics to be covered
include:
· Storage structures: disk, records, pages and files
· Operating systems issues and buffer management
· Access methods: B+-tree, dynamic hashing, multidimensional indexes
· Query evaluation and optimization
· Transaction: concurrency control and recovery
· Parallel database systems
· Special topics: decision support, web database
Prerequisite: C SC 460.
C SC 573: Theory of Computation
This course assumes some prior familiarity with the topics of fi nite automata, context-free grammars and Turing machines, such as found in the course C SC 473.
The course begins by reviewing properties of major language classes in the Chomsky Hierarchy. Universal computation models besides Turing machines, such as general recursive functions, are examined to amplify the significance of Church's thesis. Unsolvable problems and reducibility are studied. The bulk of the course then focuses on what every student should know about machine-specific complexity theory, the interrelationships among complexity classes, and the study of both NP complete and provably intractable problems. Topics covered include Church's thesis, undecidability, complexity theory and intractable problems.
The course stresses methods for formal reasoning and modeling of general computation. The emphasis will be on written problem sets containing challenging problems. The key techniques to be learned are those of simulation of one computational model by another, reduction of one problem to another, and methods for classifying problem complexity.
Prerequisites: C SC 473
C SC 576: Computer Architecture
Computer Science 576 introduces the design of computer systems from basic components to complete systems. The objectives of this course are to give students a basic understanding of hardware capabilities and to better comprehend software/hardware interfaces and tradeoffs. The course covers general design issues, such as the design and use of instruction sets, microcoding, pipelining, the memory hierarchy, caches, and hardware support for virtual memory. These issues are discussed in the context of standard uniprocessor architectures. Towards the end of the course, several distinct architectures will be discussed, including supercomputers and parallel architectures.
C SC 576 emphasizes reading, written homework assignments and tests. There is no hardware lab associated with this course.
Prerequisite: C SC 452, ECE 369
C SC 577: Introduction to Computer Vision
Computer vision is about building systems that see. Such a system would be able to take images and output a representation of what is in the world in front of the camera. We are all familiar with this process as it happens whenever we look around. However, putting this capability into a machine has proven to be very difficult and is the topic of much current research. In this course we will study the basic approaches that have been developed to analyze image data in an attempt to solve this problem, and their applications to other related areas such as computer graphics and image databases. This course should be considered by students interested in computer vision, image processing, image databases, computer graphics, artificial intelligence, and cognitive science.
The subject involves substantial math. While much of the required math will reviewed/developed as part of the course, students who are not strong in math should expect to spend extra time struggling with it. The course will also have substantial programming. Assignments will be in C/C++ and must either be developed on Linux, or ported to Linux for grading. Since some library support will be provided on Linux for certain assignments, doing them on an alternative platform may prove to be a disadvantage. It is possible that Matlab (a C like interpreted language) might be allowed/required for some assignments.
C SC 620: Advanced Topics in Natural Language Processing
Design, implementation, and compilation of programming languages; specific topics to be determined by current literature and faculty and student interest.
C SC 630-001: Advanced Topics in Software Systems
Problems in design and development of large systems of programs; specific topics to be determined by current literature and faculty and student interest.
C SC 645: Advanced Topics in Algorithm Analysis
C SC 650: Computational Biology
This course exposes students to current research on discrete algorithms in computational biology. The focus is on the application of string and graph algorithms and combinatorial optimization to problems in sequence comparison, multiple alignment, physical mapping, sequence assembly and genome rearrangement. The emphasis throughout is on problem formulation, algorithm design, and implementation.
As this is an advanced topics course, there are no exams or final. Grades are based on homeworks (which stress algorithm design), and programming projects (which stress algorithm implementation). Each project implements a significant algorithm studies in class. Project assignments specify an interface for a C++ class library, and are graded by checking correctness on test instances, comparing solution values of near-optima, and measuring execution times.
Prerequisites: C SC 545, or permission of instructor.
C SC 652
Operating system design, development, analysis, and performance; specific topics to be determined by current literature and faculty and student interest.
C SC 695A: Topics in Computing
Presentation of current research topics in systems, theory, languages and architecture. For a current list of speakers and topics, see the colloquium speakers page.
Prerequisites: Graduate standing in Computer Science or permission from your advisor.