Computer Science CoursesSee page 27 for Key to Course Descriptions For Distribution Requirement purposes (see page 22), all CSC courses
are classified as SCIENCE courses. NOTE: No late registration is permitted in any CSC course after the
first two weeks of classes. Prerequisites and exclusions are enforced. The deadline for prerequisite
waivers is the Monday after the deadline to add courses. No extensions
will be granted. Exclusions cannot be waived. |
SCI199Y1 Undergraduate seminar that focuses on specific ideas, questions, phenomena or controversies, taught by a regular Faculty member deeply engaged in the discipline. Open only to newly admitted first year students. It may serve as a distribution requirement course; see page 40. CSC104H1 Computer parts and their interconnection. Software: operating systems, files, interfaces. Hardware: storage media, memory, data representation, I/O devices. History of computing. Problem solving with computers: algorithms and basic programming concepts. Science and computer science; graphics, artificial intelligence. Common computer applications: databases, simulations. Implications for society: computers and work, office automation, computer security. (Students work with various applications and software, but the aim is to discuss general concepts of computer applications, not to serve as a tutorial for specific packages.) CSC107H1 Through independent study, students learn the material at their own pace. Structure of computers; the computing environment; programming in an object-oriented language such as Java. Program structure in an object-oriented language: classes, objects, methods, fields. Internal structure of methods: elementary data types, statements, control flow. Arrays; searching, sorting and complexity. Not offered every year. CSC108H1 Structure of computers; the computing environment. Programming in an object-oriented language such as Java. Program structure in an object-oriented language: classes, objects, methods, fields. Internal structure of methods: elementary data types, statements, control flow. Arrays; searching, sorting and complexity. Practical (P) sections consist of supervised work in the computing laboratory. These sections are offered when facilities are available, and attendance is required. CSC148H1 Abstract data types and data structures for implementing them. Linked data
structures. Encapsulation and information-hiding. Object-oriented programming
in a language such as Java. Specifications. Analyzing the correctness
and efficiency of programs using mathematical reasoning. Recursion.
Recurrence relations for analyzing the efficiency of recursive code.
This course assumes programming experience in an object-oriented language
such as C++ or Java, as provided by CSC108H1.
Students who already have this background may consult the Computer Science
Undergraduate Office for advice about skipping CSC108H1.
Practical (P) sections consist of supervised work in the computing laboratory.
These sections are offered when facilities are available, and attendance
is required. NOTE: It is recommended that CSC148H1/CSC150H1
and CSC165H1/CSC240H1
be taken at the same time, since each course relies on material from
the other. If you take one before the other, it is preferable to take
CSC148H1/CSC150H1
first. In any case, you will be at a modest disadvantage in the first
of the two courses, and will be expected to pick up the relevant material
from the other course on your own. CSC150H1 An accelerated course covering all the material of CSC148H1
and also object-oriented topics (classes, objects, methods and fields,
and program design). Suitable for students with a solid programming
background in Turing, C, Pascal or a similar language, who are willing
to accept a heavier workload than in CSC108H1
and CSC148H1. NOTE: It is recommended that CSC148H1/CSC150H1
and CSC165H1/CSC240H1
be taken at the same time, since each course relies on material from
the other. If you take one before the other, it is preferable to take
CSC148H1/CSC150H1
first. In any case, you will be at a modest disadvantage in the first
of the two courses, and will be expected to pick up the relevant material
from the other course on your own. CSC165H1 Introduction to abstraction and rigour. Understanding, using and developing
precise expressions of mathematical ideas, including definitions and
theorems. Informal introduction to logical notation and reasoning. Representation
of floating point numbers and introduction to numerical computation. NOTE CSC207H1 An introduction to software design and development concepts, methods, and tools. Core topics: object-oriented design and programming; the role of scripting in the software development process; unit testing; version control; build management. CSC209H1 Software techniques in a Unix-style environment, using scripting languages and a machine-oriented programming language (typically C). What goes on in the operating system when programs are executed. Core topics: creating and using software tools, pipes and filters, file processing, shell programming, processes, system calls, signals, basic network programming. CSC236H1 The application of logic and proof techniques to Computer Science. Mathematical induction; correctness proofs for iterative and recursive algorithms; recurrence equations and their solutions (including the "Master Theorem"); introduction to automata and formal languages. CSC240H1 The rigorous application of logic and proof techniques to Computer Science.
Propositional and predicate logic; mathematical induction and other
basic proof techniques; correctness proofs for iterative and recursive
algorithms; recurrence equations and their solutions (including the
"Master Theorem"); introduction to automata and formal languages. This
course covers the same topics as CSC236H1,
together with selected material from CSC165H1,
but at a faster pace, in greater depth and with more rigour, and with
more challenging assignments. Greater emphasis will be placed on proofs
and theoretical analysis. Certain topics briefly mentioned in CSC165H1
or CSC236H1 may be covered in more
detail in this course, and some additional topics may also be covered. CSC258H1 Computer structures, machine languages, instruction execution, addressing techniques, and digital representation of data. Computer system organization, memory storage devices, and microprogramming. Block diagram circuit realizations of memory, control and arithmetic functions. There are a number of laboratory periods in which students conduct experiments with digital logic circuits. CSC260H1 Problems in transforming continuous mathematical models to discrete computational models. Inadequacy of naive computer solutions, and techniques to remedy inadequacies. Symbolic computation, plotting, 3-D graphics, and conventional programming languages. Intended for students from computer science, sciences and mathematics: for computer scientists, introduction to design and implementation of robust algorithms; for scientists, techniques in transforming scientific problems into computational solutions; for mathematicians, insight into differences between mathematical models and computational solutions. CSC263H1 Algorithm analysis: worst-case, average-case, and amortized complexity. Standard abstract data types, such as graphs, dictionaries, priority queues, and disjoint sets. A variety of data structures for implementing these abstract data types, such as balanced search trees, hashing, heaps, and disjoint forests. Design, implementation, and comparison of data structures. CSC265H1 Algorithm analysis: worst-case, average-case, and amortized complexity. Standard abstract data types, such as graphs, dictionaries, priority queues, and disjoint sets. A variety of advanced data structures for implementing these abstract data types, such as AVL trees, self-adjusting data structures, perfect hashing, and binomial heaps. Design and comparison of data structures. This course covers the same topics as CSC263H1, but at a faster pace, in greater depth and with more rigour, and with more challenging assignments. Greater emphasis will be placed on proofs, theoretical analysis, and creative problem-solving. Certain topics briefly mentioned in CSC263H1 may be covered in more detail in this course, and some additional topics may also be covered. CSC300H1 Privacy and Freedom of Information; recent Canadian legislation and reports. Computers and work; employment levels, quality of working life. Electronic fund transfer systems; transborder data flows. Computers and bureaucratization. Computers in the home; public awareness about computers. Robotics. Professionalism and the ethics of computers. The course is designed not only for science students, but also those in social sciences or humanities. CSC309H1 An introduction to software development on the web. Concepts underlying the development of programs that operate on the web; survey of technological alternatives; greater depth on some technologies. Operational concepts of the internet and the web, static client content, dynamic client content, dynamically served content, n-tiered architectures, web development processes, and security on the web. Assignments involve increasingly more complex web-based programs. Guest lecturers from leading e-commerce firms will describe the architecture and operation of their web sites. CSC310H1 Measuring information. The source coding theorem. Data compression using ad hoc methods and dictionary-based methods. Probabilistic source models, and their use via Huffman and arithmetic coding. Noisy channels and the channel coding theorem. Error correcting codes, and their decoding by algebraic and probabilistic methods. CSC318H1 User-centred design of interactive systems; methodologies, principles, and metaphors; task analysis. Interdisciplinary design; the role of graphic design, industrial design, and the behavioural sciences. Interactive hardware and software; concepts from computer graphics. Typography, layout, colour, sound, video, gesture, and usability enhancements. Classes of interactive graphical media; direct manipulation systems, extensible systems, rapid prototyping tools. Students work on projects in interdisciplinary teams. Enrolment limited, but non-computer scientists welcome. CSC320H1 A unified introduction to image synthesis and image analysis aimed at students with an interest in computer graphics, computer vision or the visual arts. Focus on three major topics: (1) visual computing principles - computational and mathematical methods for creating, capturing, analyzing and manipulating digital photographs (raster algorithms, image acquisition, basic image processing, image warping, anti-aliasing); (2) digital special effects - applying these principles to create special effects found in movies and commercials; (3) visual programming - using C/C++ and OpenGL to create graphical user interfaces for synthesizing and manipulating photographs. CSC321H1 Supervised neural networks: the perceptron learning procedure, the backpropagation learning procedure and its applications. Elaborations of backpropagation: activation and error functions, improving speed and generalization, Bayesian approaches. Associative memories and optimization: Gibbs sampling, mean field search. Representation in neural networks: distributed representations, effects of damage, hierarchical representations. Unsupervised neural networks: competitive learning, Boltzmann machines, sigmoid belief nets. CSC324H1 Major topics in the development of modern programming languages. Syntax specification, the evolution of programming languages (including abstract data types and object orientation, and contributions of C++ to language design) design and implementation of subprograms (including parameter passing techniques, and scope and lifetime of variables), run-time storage management (including garbage collection), and programming paradigms. Two non-procedural programming paradigms: functional programming (illustrated by languages such as Lisp, Scheme, ML or Haskell) and logic programming (illustrated by languages such as Prolog, XSB or Coral). CSC330H1 Logic and its use as a declarative language in computer science. Syntax and semantics of propositional and predicate calculus. Proving entailment and non-entailment rigorously. Formal derivations. Satisfiability. Applications, including information systems, program verification, artificial intelligence, software engineering. Computational tools, including Prolog. Other logics. CSC336H1 The study of computational methods for solving problems in linear algebra, non-linear equations, approximation, integration, and ordinary differential equations. The aim is to give students a basic understanding of both floating-point arithmetic and the methods used to solve numerical problems as well as a familiarity with the types of subroutines found in typical software packages. CSC340H1 Theory, tools and techniques of information systems analysis and design. Topics include: theory of systems and organizations; structured analysis and design; user interface design. CSC343H1 Introduction to database management systems. The relational data model. Relational algebra. Querying and updating databases: the query language SQL. Application programming with SQL. Integrity constraints, normal forms, and database design. Elements of database system technology: query processing, transaction management. CSC350H1 Floating-point arithmetic. The efficiency and stability of solution techniques for systems of linear equations and least squares problems, including LU- and QR-based methods. Eigenvalue and eigenvector calculations. Algorithms for systems of non-linear equations and optimization problems, including linear programming. CSC351H1 Analysis of methods for approximation, integration and the solution of ordinary differential equations. Emphasis on the convergence and stability properties of the algorithms, rather than on their implementation. CSC354H1 Simulation and mathematical analysis of models of queuing systems. Concentration on dynamic, stochastic, discrete-event systems. Simulation topics: selecting input probability distributions, generating random numbers and random variates, output data analysis for one or more system configurations, variance reduction techniques. Analysis topics: queuing characteristics, transient and steady-state behaviour, performance measures, the M/M/1 queue in detail, some non-Markovian queues. CSC363H1 Introduction to the theory of computability: Turing machines, Church's thesis, computable and noncomputable functions, recursive and recursively enumerable sets, reducibility. Introduction to complexity theory: models of computation, P, NP, polynomial time reducibility, NP-completeness, heuristics and approximation algorithms, lower bounds on the complexity of problems. CSC365H1 This course covers the same topics as CSC363H1, but at a faster pace, in greater depth and with more rigour, and with more challenging assignments. Greater emphasis will be placed on proofs, theoretical analysis, and creative problem-solving. Certain topics briefly mentioned in CSC363H1 may be covered in more detail in this course, and some additional topics may also be covered. CSC369H1 Principles of operating systems. The operating system as a control program and as a resource allocator. The concept of a process and concurrency problems: synchronization, mutual exclusion, deadlock. Additional topics include memory management, file systems, process scheduling, threads, and protection. CSC372H1 Development of reliable efficient software for controlling and monitoring an environment. Concurrent programming techniques, such as interrupt handling, buffer management, polling and time outs. Projects use microprocessors to control equipment (such as a robot arm) and to read sensors. Design, implementation and testing of software using high level software, such as Turing or C. CSC373H1 Standard algorithm design techniques: divide-and-conquer, greedy strategies, dynamic programming, linear programming, randomization, and others (such as local search). Students will be expected to show good design principles and adequate skills at reasoning about the correctness and complexity of algorithms. CSC375H1 This course covers the same topics as CSC373H1, but at a faster pace, in greater depth and with more rigour, and with more challenging assignments. Greater emphasis will be placed on proofs, theoretical analysis, and creative problem-solving. Certain topics briefly mentioned in CSC373H1 may be covered in more detail in this course, and some additional topics may also be covered CSC384H1 A broad introduction to the sub-disciplines of AI. Core topics: search methods, game playing and rule-based systems. Overview of: natural language understanding, knowledge representation, reasoning, planning, vision, robotics, learning and neural networks. Assignments provide practical experience, both theory and programming, of the core topics. LISP or Prolog programming is required for at least one assignment. ECE385H1 A hardware-oriented course dealing with microprocessor systems. Microprocessor components, memory devices, input/output techniques, bus structure, peripheral device controllers, hardware system and programming considerations. Laboratory experiments provide "hands-on" experience. CSC401H1 Introduction to techniques involving natural language and speech in applications such as information retrieval, extraction, and filtering; intelligent Web searching; spelling and grammar checking; speech recognition and synthesis; and multi-lingual systems including machine translation. N-grams, POS-tagging, semantic distance metrics, indexing, on-line lexicons and thesauri, markup languages, collections of on-line documents, corpus analysis. PERL and other software. CSC407H1 An introduction to the development of system-level architectures and class-level object-oriented designs for software systems. Special emphasis on the study of architecture and design patterns: the core of solutions to commonly occurring design problems. Representations of design/architecture (with emphasis on the use of UML as a class-level design notation), architectural assessment, product lines, architecture extraction, and re-factoring. There is no major project, but there is a series of smaller design and architecture exercises requiring some programming. A knowledge of UML as used for requirements analysis and a working knowledge of both the C++ and Java languages are assumed. CSC408H1 The structure and unique characteristics of large software systems. The software process and software project management including project planning, risk management, staffing and organizational issues. Review of requirements analysis and specification. Software development techniques, version control, configuration management, system construction tools. Software system testing and quality assurance. Software maintenance and product delivery strategies. A course project is used to illustrate software engineering techniques. CSC411H1 An introduction to methods for automated learning of relationships on the basis of empirical data. Classification and regression using nearest neighbour methods, decision trees, linear models, and neural networks. Clustering algorithms. Problems of overfitting and of assessing accuracy. Problems with handling large databases. CSC412H1 Representing uncertain knowledge using probability and other formalisms. Qualitative and quantitative specification of probability distributions using graphical models. Algorithms for inference with graphical models. Statistical approaches and algorithms for learning models from experience. Application of these models in other areas of artificial intelligence and to problems such as medical diagnosis. CSC418H1 Identification and characterization of the objects manipulated in computer graphics, the operations possible on these objects, efficient algorithms to perform these operations, and interfaces to transform one type of object to another. Display devices, display data structures and procedures, graphical input, object modelling, transformations, illumination models, primary and secondary light effects; graphics packages and systems. Students, individually or in teams, implement graphical algorithms or entire graphics systems. CSC420H1 Introduction to fundamental concepts in image understanding, the subdiscipline of artificial intelligence dealing with the automation of visual tasks by computer. Exploration of a number of real-world image interpretation problems, as motivation for key low- and intermediate-level vision algorithms. A course project will include the construction of a number of practical vision systems. CSC428H1 Understanding human behaviour as it applies to user interfaces: work activity analysis, observational techniques, questionnaire administration and unobtrusive measures. Operating parameters of the human cognitive system, task analysis and cognitive modelling techniques and their application to designing interfaces. Interface representations and prototyping tools. Cognitive walkthroughs, usability studies and verbal protocol analysis. Case studies of specific user interfaces. CSC438H1 Computable functions, Church's thesis, unsolvable problems, recursively enumerable sets. Predicate calculus, including the completeness, compactness, and Lowenheim-Skolem theorems. Formal theories and the Gödel Incompleteness Theorem. CSC443H1 Implementation of database management systems. Storage management, indexing, query processing, concurrency control, transaction management. Database systems on parallel and distributed architectures. Modern database applications: data mining, data warehousing, OLAP, data on the web. Object-oriented and object-relational databases. CSC446H1 Finite difference methods for hyperbolic and parabolic equations; consistency, convergence, and stability. Finite element methods for 2-point boundary value problems and elliptic equations. Special problems of interest. CSC448H1 Regular, deterministic, context free, context sensitive, and recursively enumerable languages via generative grammars and corresponding automata (finite state machines, push down machines, and Turing machines). Topics include complexity bounds for recognition, language decision problems and operations on languages. CSC454H1 Overview of the software industry, and principles of operation for successful software enterprises. Software business definition and planning; market and product planning; management of innovation, research and software development; software marketing and sales management; software manufacturing and support; financial management of high-technology ventures; human resource management and development in high-technology industries. (Ordinarily offered in alternate years.) CSC456H1 Computationally-intensive applications in science and engineering are implemented on the fastest computers available, today composed of many processors operating in parallel. Parallel computer architectures; implementation of numerical algorithms on parallel architectures. Topics from: performance evaluation; scientific visualization; numerical methods; applications from science and engineering. For students in computer science, applied mathematics, science, engineering. CSC458H1 Computer communication network design and operation. Representation of information on physical channels; error detection and recovery; local area networks; deadlock and congestion avoidance; internetworking and gateways; network naming and addressing; remote procedures. Emphasis on fundamental principles rather than case studies, but with examples from real networks. CSC465H1 The use of logic as an aid to programming. Formal semantics of programming languages: imperative programs, functional programs, parallel processes, communicating processes. Partial and total correctness. Refinement theorems: by steps, by parts, by cases. Semantics of recursion and the least-fixed-point construction; monotonicity, continuity. Semantics of data types; data refinement. CSC469H1 An in-depth exploration of the major components of operating systems with an emphasis on the techniques, algorithms, and structures used to implement these components in modern systems. Project-based study of process management, scheduling, memory management, file systems, and networking is used to build insight into the intricacies of a large concurrent system. CSC485H1 Computational linguistics and the understanding of language by computer. Possible topics include: augmented context-free grammars; chart parsing, parsing in Prolog, statistical parsing; semantics and semantic interpretation; ambiguity resolution techniques; discourse structure and reference resolution; machine translation. Emphasis on statistical learning methods for lexical, syntactic and semantic knowledge. CSC486H1 Representing knowledge symbolically in a form suitable for automated reasoning, and associated reasoning methods: first-order logic, entailment, the resolution method, Horn clauses, procedural representations, production systems, description logics, inheritance networks, defaults and probabilities, tractable reasoning, abductive explanation, the representation of action, planning. CSC487H1 Introduction to vision, visual processes, and image understanding. Brief biological motivation for computational vision. Camera system geometry and image acquisition, basic visual processes for recognition of edges, regions, lines, surfaces. Processing colour, stereo images, and motion in image sequences. Active vision methods such as visual attention and interpretation-guided imaging system geometry changes. Object recognition. Applications of visual systems. CSC488H1 Compiler organization, compiler writing tools, use of regular expressions, finite automata and context-free grammars, scanning and parsing, runtime organization, semantic analysis, implementing the runtime model, storage allocation, code generation. ECE489H1 Theoretical and practical aspects of building modern optimizing compilers. Topics: intermediate representations, basic blocks and flow graphs, data flow analysis, partial evaluation and redundancy elimination, loop optimizations, register allocation, instruction scheduling, interprocedural analysis, and memory hierarchy optimizations. Students implement significant optimizations within the framework of a modern research compiler. (This course is a cross-listing of ECE540H1, Faculty of Applied Science and Engineering.) CSC490H1/491H1 This full-year half-course gives students experience solving a substantial problem that may span several areas of Computer Science. Students will define the scope of the problem, develop a solution plan, produce a working implementation, and present their work using written, oral, and (if suitable) video reports. Class time will focus on the project, but may include some lectures. The class will be small and highly interactive. See www.cs.utoronto.ca/~csc490h and www.cs.utoronto.ca/~csc491h for this year's topic themes and required preparation. CSC494H1/495H1 This half-course involves a significant project in any area of Computer Science. The project may be undertaken individually or in small groups. The course is offered by arrangement with a Computer Science faculty member. |
Calendar Home ~ Calendar Contents ~ Contact Us ~ Arts & Science Home Copyright © 2004, University of Toronto |