Undergraduate offerings incorporate a course sequence covering introductory and intermediate topics in the properties of algorithms, machine organization, information structures and the structure of programming languages. Practice in programming in several computer languages, including an algorithmic language, an assembly language and a list processing language, is given as part of this course sequence. The undergraduate courses conform to the recommendations of the Association for Computing Machinery (ACM).
Additional upper-division undergraduate courses cover topics in introductory numerical analysis, non-numerical applications, computer and programming systems, computer system architecture, operating systems, systems modelling, computer graphics, automata theory, artificial intelligence and algorithmic languages and compilers.
This document has been prepared by the Undergraduate Studies Committee to provide basic information for instructors and students concerning the undergraduate curriculum.
Each undergraduate course is described briefly here. These descriptions will hopefully serve several functions. First, they should be helpful in advising students on courses and determining programs of study resulting in a Bachelor of Arts degree in Computer Sciences. These notes will help both the students and their advisors in this task.
Second, they are to be taken as guidelines for the instructors teaching these courses. Many of these undergraduate courses are prerequisites to later undergraduate and graduate courses. In order for the later courses to be able to build upon the content of earlier courses, it is necessary that the content of the courses at the undergraduate level be somewhat standardized. Any desire to vary widely from the published course content should be taken directly to the Undergraduate Studies Committee.
This document should not be taken, however, to limit an instructor in terms of order of material, method of presentation, assignments, examinations, texts, projects, or supplementary materials. The teaching of each class is properly left as the responsibility of the instructor who should conduct each class as appropriate, keeping in mind the overall educational goals of the University, the College of Natural Sciences and the Department of Computer Sciences.
Each course is described briefly and in a uniform manner.
The categories for each course description are,
1. Catalogue Description 2. Intent 3. Curricular Position and Degree Relevance 3.1 Prerequisites 3.2 Courses Requiring This Course 3.3 Degree Relevance 4. Format 5. Syllabus 6. Possible Texts
As the Department and the study of computer sciences has changed, so have some of the course numbers assigned to courses. No course number can be reused, but old courses are sometimes redefined under new numbers.
The most prominent example of this starts with CS 340 and ends with CS 426 and CS 327 (so far). The original course CS 340, was split into two new courses, CS 316 and CS 317. After some experience, these courses were changed to CS 326 and CS 327 (making them upper division). The most recent change was to rename CS 326 as CS 426, to reflect the actual work load of the course.
Other changes to course numbers in this same vein are,
CS 105 became CS 206 (Fortran) and CS 135 (Other languages) CS 310 became CS 410
The requirements for a Bachelor of Arts degree in Computer Sciences have three main sources.
Anthropology Linguistics Economics Psychology Geography Sociology
Astronomy Physical Anthropology Biology Physical Geography Botany Physical Science Chemistry Physics Experimental Psychology Zoology Geology Microbiology
Majors who are candidates for Special Honors in Computer Sciences should apply to the Undergraduate Advisor for admission to the Honors Program at least two semesters before their expected graduation (i.e., near the end of their junior year). An all-University average of 3.0 and an average of 3.5 in all courses taken in Computer Sciences and all other courses counting toward the computer sciences major requirement (i.e., Calculus and M 311) are required for admission to the Honors Program.
The requirements for graduation with Special Honors are,
This course is intended for students who desire some familiarity with the computer field, but who neither want a typical programming course nor intend to take any other computer sciences courses. The course acquaints students with:
None
None
This lower-division course cannot be used to fulfill the computer sciences major requirement or to serve as a prerequisite for any other computer sciences course. It is not recommended even as an elective on the computer sciences degree. Because of overlap of content, students should not take both STAT 310 (College of Business Administration) and CS 301.
Three hours of lecture per week with extensive use of visual aids, guest lecturers and demonstrations. In addition, students may use the facilities of the Undergraduate Programming Laboratory to learn to program and to solve problems using the BASIC language.
Topics to be covered (Sequence will vary) Origins of the computer A brief historical introduction. Basic Computer Organization 1) Input Unit 2) Output Unit 3) Memory Unit 4) Arithmetic Unit 5) Control Unit Construction (historical perspective) Logic 1) Mechanical 2) Electrical 3) Electronic: a) Vacuum tube b) discrete (diodes and transistors) c) integrated circuits d) large scale integration Memory 1) Early (delay line, electrostatic, etc.) 2) Core 3) Recent developments Basic Computer Operations Computer Languages 1) Machine language 2) Assembly language 3) Procedural language (BASIC) Production of a Computer Program 1) Defining the problem 2) Planning: a. Flow-charting, looping b. Conversion to statements in a procedural language 3) Translation to machine language (compilation) 4) Checkout (debugging) 5) Production runs 6) Documentation and maintenance Computer Applications 1) Data Processing, File Maintenance a. Preparation and maintenance of files on magnetic tape b. Use of discs, drums 2) Engineering arithmetic Fixed and floating point Iteration Computational Precision 3) Software: Assemblers, compilers and interpreters Operating systems a. Concepts and problems concerning batch, multi-processing, multi- programming, conversational time sharing systems and real-time control systems Service routines 4) Real time applications 5) Miscellaneous applications a) Language processing b) Computer-Aided Instruction (CAI) c) Computer graphics d) Artificial intelligence e) Information retrieval f) System modelling A Look into the Future a) Hardware b) Software c) Applications Moral Problems and Legal Problems a) Immoral applications b) The privacy issue
CS 404G is intended to provide the basic knowledge and experience necessary to use computers effectively in problem solving. It is a service course for students in other fields as well as an introductory course for computer sciences majors.
Among the primary goals of this course are to teach the student:
CS 404A is an advanced version of CS 404G, intended mainly for computer sciences majors and those students with previous exposure to computing. Both courses cover the same basic material, but 404A may go into additional depth and supplement the basic material with additional topics, covering this greater material at an accelerated pace.
A good foundation (3 years) in high school mathematics or three hours of college mathematics.
Course Content/Skill From CS 404 CS 410 Problem analysis and algorithm design; elements of high-level language programming; binary, octal and decimal number representations and conversions. CS 325 CS 426 CS 348 FORTRAN programming.
This lower-division course cannot be used to fulfill the computer sciences major requirement. It may be used to fulfill non-major requirements of the CS degree. It is important to recognize, however, that almost all upper-division CS courses depend on material covered in this course.
Three hours of lecture and one two-hour laboratory per week. Lecture sections are large (50-150 students); laboratory sections have a maximum size of 25 students.
A large portion of teaching the selected programming language is delegated to the laboratory, which also provides help and information on the use of equipment, job submission, assigned projects, etc. From 8 to 10 programming problems are assigned as laboratory assignments.
Both laboratory and lecture must be passed to pass the course.
Introduction to computers history general organization (memory, CPU, I/O) machine level (example of simple assembly language) levels of languages Problem solving* problem definition top-down problem solution concept of an algorithm flow chart language algorithm construction Programming techniques* - FORTRAN data structures (variables, arrays, strings, I/O) flow of control (loops, branching), subprograms (local versus global variables, parameters and arguments) Software compilers (example of compiling simple FORTRAN assignment and if statements into the assembly language mentioned at the beginning) operating systems (loaders, assemblers, JCL) * Problem solving and programming techniques are not distinct but interwoven.
This course teaches FORTRAN programming to persons who have no previous programming experience and who do not intend to continue in computer sciences.
None.
None.
This lower-division course cannot be used to fulfill the computer sciences major requirement and does not serve as a prerequisite for any other course. It is not recommended even as an elective on the computer sciences degree.
Two lectures per week for one semester, or three lectures per week for two-thirds of a semester, depending upon the instructor.
To be developed by the instructor
Computer Sciences 404. Three lecture and two laboratory hours a week for one semester. Laboratory fee, $4.
This course broadens the foundation laid in CS 404 by familiarizing students with the fundamental operations of computers. This is the second course for computer sciences majors and for non-majors who want more knowledge of computers than is provided by the CS courses particularly designed for non-majors.
This course provides a fairly detailed introduction to the organization and structure of various types of computers; assembly language programming techniques using accumulator and index registers, indirect addressing, masking, shifting, character handling and I/O equipment; and the use and design of an assembler is used as an example.
CS 404 is the only required prerequisite. The specific knowledge
needed from CS 404 is (l) how to design and write programs for solution
of problems suitable to computer solution; (2) how to physically prepare
and submit programs; (3) at least one higher level language (such as
FORTRAN); (4) basic higher level language programming techniques such
as loops, conditionals, I/O, data types, arrays, assignments, etc.; (5)
elementary concepts of machine structure, binary number systems, memory,
etc.
Note: Courses such as STAT 310, CS 301 and CS 206 are not acceptable
as equivalents to the CS 404 prerequisite.
CS 410 is a listed prerequisite for CS 345 and CS 352 and through these two courses provides background for additional courses also. Specifically, CS 410 must provide the following:
This lower-division course cannot be used to fulfill the computer sciences major requirement. It may be used to fulfill non-major requirements of the CS degree. It is important to recognize, however, that almost all upper-division CS courses depend on material covered in this course.
Three hours of lecture and one two-hour laboratory per week. The lecture sections are large (50-150 students); laboratory sections have a maximum of 25 students.
The laboratories are used to provide detailed instruction in the machine and assembly language and to assign 6-7 programming problems. Programming problems begin with one designed to give familiarity with the format of assembly language statements and listings and with job submission, and proceed through problems covering character manipulation, table searching, I/O, loader and assembler. Laboratory and lecture are coordinated as to order and time of presentation of material, in so far as possible.
Students must pass both lecture and laboratory to pass the course.
The purpose of this course is to introduce the student to the basic mathematical techniques and structures that will be needed in order to build, analyze and evaluate programs and to understand the theory presented in other courses. Instead of going deeply into the various concepts, the instructor should show how they apply to computer science and discuss basic algorithms using them. These algorithms should be discussed at a conceptual level independent of any programming language, with emphasis given to their top-level design.
CS 404 is a prerequisite to assure that the student has an introduction to programming, algorithms and problem-solving, as well as the background to at least vaguely understand why these subjects are relevant to computer science. M 808 is required for mathematical maturity.
CS 333 requires this course for its introduction to proofs, sets, and graphs.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
This course is recommended for students with an interest in mathematics and the formal theory of computer science.
Three hours of lecture per week.
I. Algorithms effective procedures flow of control top-down designing of algorithms flowcharts Turing machines II. Formal Proofs need for proofs principle of induction inductive assertion method for proving algorithm correctness proof by contradiction III. Sets and Their Structure sets functions relations order relations sorting, consistent enumerations equivalence relations and partitions IV. Combinatorics permutations and combinations recurrence equations generating functions cardinality of the union of sets V. Graphs directed graphs undirected graphs connectedness minimal and critical paths labelled graphs trees and spanning trees graph searching and manipulation VI. Finite Groups groups normal subgroups permutation, cyclic, quotient groups homomorphisms, isomorphisms
Study of information representations and their relation to processing techniques; representations in various storage media and in various languages; file, list and string processing techniques; programming in a list structure language. Prerequisites: CS404. Three lecture and two laboratory hours a week for one semester. Laboratory fee, $4. (Prior to 1974-1975, given as Computer Sciences 340; in 1974-1975, given as Computer Sciences 316; in 1975-1976, given as Computer Sciences 326.)
This course introduces students to the types of structures inherent in and/or imposed on data; methods of representing these structures in storage; and techniques for operating on these structures. Students are introduced to languages (such as PASCAL and LISP) which are designed to facilitate defining and manipulating certain types of structures. In addition, program structure and systematic programming are emphasized.
CS 404 is required to ensure that students understand the use of computers and their programming.
CS 410 is suggested to ensure that students understand the structure of computers and computer memories and the digital representation of data and instructions.
Course Content/Skills Furnished by CS 426 CS 327 Data structure types and implementation techniques; additional programming facility. CS 369 CS 347 CS 343 LISP programming concepts. CS 345 LISP and PASCAL language concepts.
Beginning with the 1977 Catalogue, this upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not specifically required on the computer sciences degree, but is a prerequisite to the required course CS 327 and other upper-division computer sciences courses. This course is strongly recommended for students who want to obtain programming training and experience without majoring in computer sciences.
Three hours of lecture and one two-hour laboratory per week.
The laboratory is used for more detailed discussion of lecture material and programming assignments.
This course is primarily concerned with developing good techniques in all phases of the design and implementation of programs. Students are intended to acquire greater programming breadth and facility and to experience individual and team participation on projects of larger dimension than are feasible in earlier courses. Structured programming and design methods are emphasized heavily. No new programming language is introduced in this course.
CS 426 is the only listed prerequisite for this course. Material needed from 426 covers data structure types and implementation techniques, PASCAL programming and additional maturity in the design and implementation of programs.
It should be understood, however, that CS 327 may also rely heavily on topics from 404.
CS 372 and 375 require CS 327 as a prerequisite, since they both involve the design and implementation of large projects involved in systems.
This course (with a grade of C or better) is required for the CS degree. It is also highly recommended to non-majors who want to acquire considerable programming proficiency.
Three hours of lecture per week. At the discretion of the instructor, lecture hours may be used for discussions, for team meetings, etc., after the major lecture material has been covered. A considerable amount of out-of-class work is required from the students.
Course lectures should include at least an introduction to the material
indicated below. Additional lectures on the programming projects may
be necessary. The intent of the projects for this course is to apply
the lecture material to large projects providing both experience and reinforcement.
The number of projects used within the course will vary from one to many;
however, the number and size should allow students to complete their projects
at a highly polished level, thus reinforcing the techniques involved.
I. Program Design modular programming bottom-up versus top-down structured programming step-wise refinement decision-hiding decomposition goto controversy II. Program Style III. Program Correctness IV. Program Efficiency execution time profile methods V. Program Testing and Debugging VI. Program Documentation
CS 333 provides an introduction to automata theory and discusses its applications in areas such as parsing, pattern recognition, and natural language processing.
CS 325 is required, to give the student additional mathematical maturity and familiarity with mathematical proofs and symbolism.
None at the undergraduate level; CS 385 at the graduate level.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
This course is recommended for students who intend to do graduate work, or who are interested in the areas of artificial intelligence and natural or computer language processing.
Three hours of lecture per week.
A. Brief Introduction to Automata Theory (5-6 weeks) Definition of grammar Types of grammars Type 3 grammars Definition of Finite State Machines Correspondence between Finite State Machines and Type 3 languages. Correspondence between deterministic and non-deterministic Finite State Machines Correspondence between Regular Languages and Type 3 languages Equivalence of Finite State Machines Pumping Lemma Closure properties of regular languages Type 2 grammars Derivation trees Ambiguity Definition of Pushdown Automaton Correspondence between Pushdown Automata and Type 2 languages Chomsky Normal Form Pumping Lemma Closure properties of context-free languages Deterministic PDA Pushdown Transducers Syntax Directed Translation Schemes Type 0 languages Definition of Turing machine Correspondence between Turing machines and Type 0 languages Correspondence between deterministic and non-deterministic Turing Machines Type 1 languages Definition of Linearly Bounded Automaton Correspondence between LBA and type 1 languages There is a language which is not Type 0. More about Turing Machines Universal Turing Machine Halting Problem B. Application to Parsing (Chapter 6, 2-3 weeks) LL parsing LR parsing C. Application to Pattern Recognition (Chapter 4, 2 weeks) D. Application to Natural Language Processing (Chapter 10, 2 weeks) E. Application to Computer Vision (Chapter 11, 1 week) F. Application to Biology (Chapter 12, 1 week)
This course is intended for students who want to learn a programming language either not taught in another course or independent from the other content of the core course in which it is taught. CS 135 is intended to introduce students who already have programming experience to another programming language and hence is not an introduction to programming.
Programming experience and consent of the instructor or the CS undergraduate advisor.
None.
This upper-division course (with a grade of C or better)
may be used to fulfill the computer sciences major requirement,
except that not both of the following may be used:
a. CS 135 - APL and CS 345 b. CS 135 - LISP and CS 426 c. CS 135 - PASCAL and CS 426 d. CS 135 - COBOL and STAT 333
CS 135 COBOL (or STAT 333) is highly recommended for students who intend to terminate their studies with a Bachelor's degree and look for employment in computer programming.
Two laboratory hours per week.
The syllabus depends upon the language covered and is to be defined by the instructor.
This course is intended as an introduction to the field of artificial intelligence, giving a survey of the problems considered, the objective sought and the techniques used. Programming assignments are intended to give an appreciation of AI programming and experience in the use of a programming language suitable for AI work, such as LISP.
CS 426 is required. Content needed from CS 426 includes elementary LISP programming and the definitions, representations, and uses of various data structures.
None at the undergraduate level; CS 389 at the graduate level.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
Three hours of lecture per week. Programming assignments are completed out of class.
I. Computers and intelligence II. Problem Solving state-space searching (breadth first, depth first, heuristic) problem reduction (GPS, STRIPS) AI languages (LISP, PLANNER, QA-4, SAIL, etc.) examples III. Game Playing (students are easily attracted to game playing; don't let it get over-emphasized) alpha-beta and minimax procedures learning (Samuel, Waterman) examples IV. Vision perceptrons scene analysis and learning (Guzman, Waltz, Winston) V. Theorem Proving logic resolution non-resolution theorem proving (Fisher Black, PLANNER) applications to problem solving and question answering VI. Natural Language Processing parsing (Woods, Winograd) question answering speech perception psychological simulation (ELIZA, PARRY) semantic representations (logic, case structures, conceptual dependency, procedures, semantic networks) VII. Robots mobile (Shakey, Turtles) hand-eye systems (Freddy, Butterfingers) industrial robots
This course is intended to give the survey of significant programming language features and concepts as described in the catalogue description above.
CS 410 and CS 426 are required. The content needed includes elementary LISP and PASCAL programming and the definitions, representations, and uses of various data structures. The student is expected to know FORTRAN and some assembly language.
CS 375 requires CS 345. The content needed from CS 345 includes a familiarity with BNF notation and syntax diagrams and with the concepts of binding time, dynamic storage, block structured languages and scopes of variables and labels.
The graduate course CS 386L also requires this course.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
This course is recommended for students intending to do graduate work in computer sciences or interested in the basic concepts of computer languages.
Three hours of lecture per week. Some programming in several different programming languages.
This course is an introduction to data base management systems, including the rationale behind them; their architecture, capabilities and implementation; and current systems.
CS 426 is required for its content on data structures.
None at the undergraduate level; CS 386 at the graduate level.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
This course is recommended for students who are interested in or intend working in the field of data management/retrieval. It is particularly recommended for students who intend to go into computer programming for business applications.
Three hours of lecture per week.
I. The rationale of data base management 1. What is generalized data base management? Data Sharing Program sharing Data independence 2. Some consequences of the technology Programmer productivity Information control System control 3. The user spectrum Programmer users Non-programmer users Casual users User levels and system design II. DBMS in action - case studies III. DBMS architecture and capabilities 1. The gross anatomy of a DBMS 2. Functional capabilities of a DBMS Defining a data base Loading Retrieval/Report generation Updating Software utilities 3. Alternative design considerations for a DBMS 3.1 Alternative data models Hierarchical models Network models Relational Models Entity set models 3.2 Language interfaces Procedural Non-procedural 3.3 Implementation environment Host language versus self-contained systems Batch versus interactive systems Distributed versus central systems 3.4 Application environment Query oriented systems Update oriented systems Transaction oriented systems IV. Definition languages, schemas and data models: Organizing a data base A hierarchical: System 2000 Data definition language Data model constructs Schemas from the case studies A network system: Data Base Task Group Data definition language Data model constructs Schemas from the case studies A relational system Data definition language Data model Schemas from the case studies V. Data manipulation languages: interacting with a data base System 2000 - an eclectic approach Nonprocedural interface language and operations Procedural language interface Examples from the case studies DBTG Subschema concept The applications context The data manipulation language Examples from the case studies Relational systems - the casual user SEQUEL LSL Examples from the case studies VI. Implementing a DBMS Internal schemas and storage structure A DBTG implementation A hierarchical implementation - RFMS A relational implementation - LSL Memory management and DBMS requirements VII. Hardware for DBMS Processor and mass storage technology Associative processing Distributed computing systems Distributed files Distributed functions VIII. The DBMS in an operating environment The emergent data base administrator function Control over applications Data base integrity Data base security IX. Evaluating a DBMS Evaluation methodology Evaluation criteria
This course gives a survey of computational problems arising in applications and representative numerical techniques for solving such problems. The course is intended to emphasize techniques and uses of numerical methods rather than the theory and proofs of theorems giving rise to these methods.
CS 404 is required for its content on algorithms and FORTRAN programming.
M 808 or (M 608E and M 325) are required for a basic knowledge of calculus. Some knowledge of ordinary differential equations is helpful.
CS 368K and (through CS 368K) CS 368L require this course.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
CS 348 is recommended for students who intend to terminate with a Bachelor's degree.
Three hours of lecture per week
Course content will include discussion, explanation and use of realistic methods for (at least) linear systems, function approximation, integration (quadrature), and initial-value problems for ordinary differential equations. Realistic methods include Gauss elimination with partial pivoting, adaptive Simpson's, Runge-Kutta-Fehlberg with step-size control, etc.
This is a survey course intended to give an understanding of the hardware necessary for various computer sciences. The course explores the technology necessary for arithmetic operations, memory, instruction sequencing, and communications with the outside world. Microprogramming is covered in some depth as an aid to understanding control sequencing and instruction-set implementation. Examples of currently available machines are discussed, including microcomputers, minicomputers, mainframes and supercomputers.
CS 410 is required for its content on basic computer organization, computer instructions, instruction execution, representation of numbers, and characters and binary arithmetic.
CS 372 requires either this course for an understanding of elementary logical and computer architecture, particularly interrupts, I/O device characteristiCS (drum, disc) and associative registers.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
This course is highly recommended to all students for gaining the basic knowledge of computer hardware needed in most applied and research areas.
Three hours of lecture per week, in small to medium sized classes. A small amount of extra-class work in the computer hardware laboratory and a term paper requiring library research are required.
I. Review Basic machine organization instruction execution number and character representation binary arithmetic II. Basic Digital Circuits Basic gates switching algebra rudimentary minimization Karnaugh maps flip flops busses registers and information transfer decoders shift registers clocks, arithmetic and logic units serial and parallel adders simple multipliers a look at a standard ALU (e.g. 74181 integrated circuit) III. Memory Technology and organization of core and semiconductor memories past technologies (delay lines, Williams tubes, rotating drums) emerging technologies (charge-coupled devices, magnetic bubbles, beam-addressable memories) content-addressed memories memory hierarchies moving magnetic technologies (discs, tapes, strips) magnetic recording techniques archival memories IV. Control and Sequencing Description of a simple machine in gate logic A simple microprogrammed machine Excruciatingly detailed examples of instruction decode and execution development of more complicated instructions survey of microprogramming V. Addressing Modes indexing indirection stacks base registers paging and segmentation interprocess protection VI. I/O and interrupts Gate logic for simple accumulator I/O Interrupt-driven I/O Interrupts for error handling, traps process control and real-time applications channel controllers and cycle-stealing DMA channels asynchronous communication VII. Microprocessors Trend toward general-purpose logic ROMs Programmable logic arrays the microprocessor as general purpose logic microprocessor architecture at PLA-ROM level currently prevalent microprocessors VIII. Minicomputers 1 or 2 common minicomputers discussed in detail IX. Larger General-Purpose Computers (Usually a discussion of IBM 360/370) X. Number-Crunchers CharacteristiCS of machines for large scientific applications Discussion of typical machine (Usually CDC 6600/7600) XI. Advanced Topics Stack machines and high-level-language architectures concurrency in memories and processors distributed machines and networks etc.
This course is intended as an introduction to switching theory and its application to digital computer design.
CS 404 and nine additional hours of computer sciences or mathematics (to assure that a basic knowledge of the applications of computers are known); or EE 338; or upper-division standing and consent of instructor.
None, in Computer Sciences.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
CS 360 and EE 360L may not both be counted on any degree.
This course is taught on a self-paced basis without lectures. Students must complete 19 study units and pass a test on each unit. Two laboratory units are also required. CS 360 meets with EE 360L.
Combinational Logic number systems and conversion Boolean algebra algebraic simplification diode and transistor logic derivation of truth tables and logic equations Quine-McCluskey procedure Karnaugh maps multi-level and multi-output gate networks NAND and NOR gates combinational network design (lab problem) Sequential Logic flip-flops counters and similar sequential networks analysis of clocked sequential networks derivation of state tables state equivalence and reduction of state tables state assignment sequential network design (lab problem) iterative networks Applications networks for addition and subtraction networks for multiplication and division control networks
This course is intended to give a rigorous development of basic numerical methods and to evaluate these methods from the standpoint of efficiency, accuracy and suitability for use on digital computers.
This course requires CS 348, for Fortran programming and algorithm design and M 665A, for concepts of advanced calculus; or the consent of instructor.
CS 368L requires this course.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences degree requirement. Both CS 368K and M 368K cannot be counted towards the degree since they are the same course.
This course is recommended to students who intend doing graduate work or mathematical programming.
Three hours of lecture per week. This course meets with M 368K.
Not available.
Not available
This course is a survey of computational methods in linear algebra.
This course requires CS 368K.
None at the undergraduate level.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences degree requirement. Both CS 368L and M 368L cannot be counted, since they are the same course.
This course is recommended to students who intend doing graduate work or mathematical programming.
Three hours of lecture per week. This course meets with M 368L.
Not available.
This course introduces the elements of stochastic processes, queueing theory and simulation, to give the student the ability to make reasoned decisions on probabilistic problems, with emphasis on scheduling decisions in computer and communication systems.
This course requires CS 426, for an understanding of the structures and programming required in simulation and M 808 for the mathematical background required for probability theory.
None at the undergraduate level. Graduate courses in the theory of Operating Systems and Systems Modeling require CS 369.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences major requirement. It is not required.
This course is relevant to operating systems, problem solving, and to some extent data base systems. It is recommended to students interested in systems analysis.
Three hours of lecture per week. The course material is primarily learned through discussion and solution of a sequence of problems which propose questions of increasing difficulty.
Axioms of Probability Theory
Simulation: a tool for solving simple stochastic problems
Discrete and Continuous Random Variables
Generating random variables on a digital computer; An introduction to the Chi-Square
Bernoulli and Poisson Processes
Simulation of Bernoulli and Poisson Processes
Markov Processes
Simulation of queueing systems with an emphasis on understanding the impact of service disciplines and distributions on systems behavior
Elements of queueing network theory. Use of queueing network program packages. Application to operating systems. A non-trivial simulation of a computer and/or communication system
This course is intended to give students an opportunity to study in areas not offered in the normal undergraduate curriculum.
Upper-division standing and consent of the supervising instructor and the undergraduate adviser. A student wanting to take this course must propose the topic and find an instructor willing to supervise the student's study.
None
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences degree requirement. It is not required and although the course may be repeated for credit when the topics vary, no more than one CS 370 course may be used to fulfill the computer sciences degree requirement.
This course is recommended only when the student has fulfilled most of the degree requirements and wants to work in an area not available in the undergraduate curriculum.
By individual arrangement with the supervising instructor. It is recommended that at least one meeting or progress report be required each week. The result of this course is generally a paper or report by the student surveying the field of study and sometimes may include a major programming project.
Determined by the supervising instructor.
To be determined by the supervising instructor.
This course is an introduction to the practical use of operating systems and theoretical issues of their design and construction. The major algorithms of operating systems are presented in some detail. Programming problems give experience in both the use and construction of operating systems.
CS 327 is required for programming skills and CS 352 is required for a background in computer hardware.
CS 379H at the undergraduate level. At the graduate level, CS 380L requires CS 372 or EE 380L.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences degree requirement. It is not required.
This course is strongly recommended to all computer sciences students for a basic understanding of computer operating systems.
Three hours of lecture per week. Large programming projects are assigned for completion out of class.
I. Introduction history and goals of operating systems types of operating systems. II. Input/Output control systems, batch systems, spooling, multiprogramming, time-sharing, multiprocessor, networks. Job control languages, user services. III. CPU Scheduling, interrupt handling, long-term and short-term scheduling, FCFS, SJF, priority, round-robin, multi-level queues. Deterministic scheduling, list scheduling, Hu's algorithm. IV. Processes, concurrent programs, communication primitives, mutual exclusion problem, P/V, message systems, coordination. V. Memory Management Overlays, Relocation, Base-Bounds, Paging, Segmentation, Paged-Segmented, Swapping, Demand Paging, Virtual Memory Replacement algorithms, Allocation algorithms, Memory Hierarchies VI. File systems Device Characteristics, space allocation techniques, access methods, disc and drum scheduling, directory structures, VII. Resource Allocation Deadlocks VIII. Protection and Security Hardware protection mechanisms, access matrix, access lists, capabilities, policies versus mechanisms, passwords. IX. Design concepts layering, modules, virtual machines reliability performance evaluation and measurement
This course is intended to introduce humanities students to the use and applications of computers in their areas. It is not intended for students with prior programming experience
Upper-division standing and consent of the instructor or computer sciences undergraduate advisor.
None
This upper-division course cannot be used to fulfill the computer sciences major requirement. It can be used as an upper-division elective.
Three hours of lecture per week, with programming assignments which are completed outside of class.
I. Introduction to a suitable programming language, such as SNOBOL, LOGO, or SPSS. II. Survey of work done in the Humanities, including the following, A. Concordances B. Stylistic Analysis 1. Authorship studies (inter-author analysis) 2. Literary stylistiCS (intra-author analysis) C. Content Analysis (General Inquirer) D. Information Storage and Retrieval 1. Production systems (ERIC, NEW YORK TIMES, MEDLARS) 2. Experimental work a. automatic abstracting b. automatic indexing c. automatic classification
This course is designed to teach the basic concepts of the construction of compilers for algorithmic languages. During the course, an actual compiler is implemented by the students, utilizing the material taught in the course.
CS 327 is required for programming skills and CS 345 is required for the concepts underlying the structures of algorithmic languages, including dynamic storage.
CS 379H at the undergraduate level.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences degree requirement. It is not required.
This course is recommended for students intending to do graduate work.
Three hours of lecture per week, with a major project completed out of class.
The construction of an actual compiler is a major project
which requires some amount of class discussion. The syllabus
presented below covers only the project-independent lecture
material for the course and does not include topics related to the
project.
I. Introduction general overview II. Language Theory Foundations finite-state grammars and regular expressions context-free grammars, syntax trees, ambiguity, relations, BNF-notation restricted context-free grammars, precedence, LR, parsing III. Analysis symbol tables approaches, syntax-driven, top-down, bottom-up, recursive descent lexical scanning, regular expressions syntactic parsing, precedence or LR, generation of tables semantic analysis, table information, timing of checks error recovery internal forms, tuples, trees IV. Synthesis code optimization, folding, eliminating redundant expressions, invariant operations. storage allocation, temporaries, static, dynamic, common run-time support, input/output, stacks code generation, addressing operands, register allocation
Topics courses are intended to permit faculty to give courses covering areas not regularly included in the undergraduate curriculum or to introduce proposed new courses on a trial basis.
Upper-division standing and consent of the instructor and the undergraduate adviser. Given topics may require certain prerequisites defined when the topics course is announced.
None.
This upper-division course (with a grade of C or better) may be used to fulfill the computer sciences degree requirement. It is not required. Provided the topics differ, CS 378 may be counted more than once.
The format depends on the topic, but is usually three hours of lecture per week, often with outside assignments or labs.
To be determined by the course instructor.
To be determined by the course instructor.
This course is intended for students who want to graduate with Honors in computer sciences, to indicate that such students are capable of independent (although supervised) work in the field.
Admission to the Honors Program, CS 372, CS 375 and approval of the Undergraduate Advisor. Majors who are candidates for Special Honors in Computer Sciences should apply to the Undergraduate Advisor for admission to the Honors Program before registering for their final semester.
Whenever possible, students should make their own arrangements with a faculty member in the area of interest to the student.
None.
This upper-division course (with a grade of B or better) is required for graduation with Special Honors in Computer Sciences. It is not required otherwise.
The requirements for graduation with Special Honors, which are in addition to the requirements for the major, are:
By individual arrangement with the supervising faculty member. It is recommended that at least one meeting or progress report be required each week.
Determined by supervising instructor. The Honors thesis must be submitted to the reading committee at least one week before the final examination period begins, to permit time for the readers to read and evaluate it.
To be determined by the supervising instructor.