Computer Science Courses

Key to Course Descriptions

For Distribution Requirement purposes, all CSC courses are classified as SCIENCE courses.

Enrolment notes

NOTE: the University of Toronto Mississauga computer science Minor subject POSt is not recognized as a restricted CS subject POSt for St. George courses enrolments.

NOTE: No late registration is permitted in any CSC course after the first two weeks of classes.

Enrolment in most CSC courses abOVE 100-level is restricted. Consult the Calendar or the Arts and Science Registration Handbook and Timetable for details.

Prerequisites and exclusions

Prerequisites and exclusions are enforced. Please refer to the 2009-20010 Registration Handbook and Timetable for prerequisite waiver deadlines.

Dropping down from enriched to regular courses

Students may go to their college to drop down from enriched courses to regular courses. the courses are as follows:
from CSC148H1 to CSC108H1, from CSC150H1 to CSC108H1, from CSC240H1 to CSC165H (or to CSC236H1 if you have already passed CSC165H1), from CSC265H1 to CSC263H1, from CSC365H1 to CSC363H1, and from CSC375H1 to CSC373H1.

Drop down deadlines:

  • Fall session – October 9, 2009
  • Winter session – January 29, 2010

Students with transfer credits

If you have transfer credits in Computer Science or a similar subject for courses done at another university or college, contact our Undergraduate Office (BA4252/4254) for advice on choosing courses. Ask for advice also even if you don’t have transfer credits yet but are considering degree study at the University of Toronto. Without advice, you risk poor course choice or other adverse consequences.

| Course Winter Timetable |


INX199H1
First-Year Seminar [24S]

INX199Y1
First-Year Seminar [48S]

SCI199H1
First Year Seminar [24S]

SCI199Y1
First Year Seminar [48S]

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; Details here..


CSC104H1
T he Why and How of Computing [24L, 12T]

An introduction to computing for non-computer scientists. History of computing machinery; representation of data and their interaction with operations; hardware, software, operating systems; problem solving and algorithms; social issues in computing; a gentle introduction to programming. This course is an introduction to becoming actively engaged with computing, not a tutorial on using particular computer applications.

Exclusion: SMC104H1 (as taught before 1990); VIC104H1 (as taught before 1990); any CSC course.




Choosing first year courses:
To help you select the programming course that is right for you, see http://web.cs.toronto.edu/dcs/index.php?section=71.

CSC108H1
Introduction to Computer Programming [36L, 12T, 12P]

Structure of computers; the computing environment. Programming in a language such as Python. Program structure: elementary data types,statements, control flow, functions, classes, objects, methods, fields. Lists; 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.

Exclusion: CSC107H1, CSC120H1, 139H1, CSC148H1, 149H1, CSC150H1.
NOTE: You may not take this course after or concurrently with CSC148H1, but you may take CSC148H1 after CSC108H1.


CSC120H1
Computer Science for the Sciences [24L, 12P]

An introduction to computer science for students in other sciences, with an emphasis on gaining practical skills. Introduction to programming; web programming; database design; software tools; examples and exercises taken from the sciences. At the end of this course you will be able to develop computer tools for scientific applications, such as the structuring and analysis of experimental data. Practical (P) sections consist of supervised work in the computer laboratory. No programming experience is necessary. Students who wish to do more can progress directly to CSC150H1.

Exclusion: any CSC course.


CSC148H1
Introduction to Computer Science [24L, 12T, 12P]

Abstract data types and data structures for implementing them. Linked data structures. Encapsulation and information-hiding. Object-oriented programming. Specifications. Analyzing the efficiency of programs. Recursion. This course assumes programming experience in a language such as Python, 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: Students may go to their college to drop down from CSC148H1 to CSC108H1. See above for the drop down deadline.

Exclusion: CSC139H1, 149H1, CSC150H1; you may not take this course after taking more than two CSC courses at the 200-level or higher.
Prerequisite: CSC108H1; MHF4U(advanced functions)/MCV4U(calculus and vectors)


CSC150H1
Accelerated Introduction to Computer Science [36L, 12T, 12P]

An accelerated course covering object-oriented topics from CSC108H1 (classes, objects, methods and fields, and program design), as well as all the material of CSC148H1. Suitable for students with a solid programming background in Turing, C, Scheme, or a similar language, who are willing to accept a heavier workload than in CSC108H1 and CSC148H1.

Exclusion: CSC107H1, CSC108H1, 139H1, CSC148H1, 149H1; you may not take this course after taking more than two CSC courses at the 200-level or higher.
Prerequisite: MHF4U(advanced functions)/MCV4U(calculus and vectors). Students should thoroughly understand arrays, searching, sorting, functions/procedures/subprograms, arguments and parameters, and modular design.

NOTE: Students may go to their college to drop down from CSC150H1 to CSC108H1. See above for the drop down deadline.


CSC165H1
Mathematical Expression and Reasoning for Computer Science [36L, 24T]

Introduction to abstraction and rigour. Informal introduction to logical notation and reasoning. Understanding, using and developing precise expressions of mathematical ideas, including definitions and theorems. Structuring proofs to improve presentation and comprehension. General problem-solving techniques. Unified approaches to programming and theoretical problems. Representation of floating point numbers and introduction to numerical computation.

Exclusion: CSC236H1, 238H1, CSC240H1; MAT102H5 (University of Toronto Mississauga); You may not take this course after taking more than two CSC courses at the 200-level or higher.
Prerequisite: CSC108H1/(CSC148H1/CSC150H1 taken concurrently); MHF4U(advanced functions)/MCV4U(calculus and vectors). Recommended preparation: first term of MAT135Y1/MAT137Y1/MAT157Y1.

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.



Note

To enrol in any CSC course at the 200-level or higher, you must have a cumulative GPA of at least 1.50 (3.00 for 300-and 400-level courses) or be enrolled in a restricted subject POSt sponsored by the Department of Computer Science. the University of Toronto at Mississauga Computer Science Minor is not a restricted subject POSt. If you are in your first year of studies at the University, the GPA requirement does not apply.

CSC207H1
Software Design        [24L, 12T]

An introduction to software design and development concepts, methods, and tools using a statically-typed object-oriented programming language such as Java. Topics from: version control, build management, unit testing, refactoring, design patterns, advanced IDE usage, regular expressions, markup languages, parsing using finite state machines, and reflection.
Prerequisite: CSC148H1/CSC150H1; CGPA 1.5/enrolment in a CSC subject POSt.


CSC209H1
Software Tools and Systems Programming [24L, 12T]

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.

Exclusion: CSC372H1, 408H1, CSC369H1, 468H1, CSC469H1.
Prerequisite: CSC207H1/enrolment in Bioinformatics and Computational Biology (BCB) subject POSt; CGPA 1.5/enrolment in a CSC subject POSt.


CSC236H1
Introduction to the theory of Computation [24L, 12T]

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.

Exclusion: CSC238H1, CSC240H1.
Prerequisite: CSC148H1/CSC150H1, CSC165H1/(CSC148H1 as given before FALL 2003); CGPA 1.5/enrolment in a CSC subject POSt.


CSC240H1
Enriched Introduction to the theory of Computation [24L, 12T]

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.

Exclusion: CSC236H1, 238H1.
Prerequisite: OAC Calculus and one of Algebra & Geometry or Finite Mathematics OR U Advanced Functions and Introductory Calculus, and one of U Geometry and Discrete Mathematics or U Mathematics of Data Management, with high grades; CGPA 1.5/enrolment in a CSC subject POSt
Recommended preparation: first term of MAT137Y1/MAT157Y1.
Co-requisite: CSC148H1/CSC150H1

NOTE: Students may go to their college to drop down from CSC240H1 to CSC165H1 (or to CSC236H1 if you have already passed CSC165H1). See above for the drop down deadline.


CSC258H1
Computer Organization [24L, 13P, 12T]

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.

Exclusion: CSC257H1 as given before 1985.
Prerequisite: CSC148H1/CSC150H1, CSC165H1/CSC240H1/(CSC148H1 as given before FALL 2003); CGPA 1.5/enrolment in a CSC subject POSt.


CSC260H1
Introduction to Scientific, Symbolic, and Graphical Computation [24L, 12T]

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.

Exclusion: CSC160H1 as taught in SprING 1992; after taking CSC270H1/CSC263H1/CSC265H1 and ANY 300-/400-level CSC course, you may not take CSC260H1 without Departmental permission in writing.
Prerequisite: CSC108H1/computing experience, as from a good high school programming course; CGPA 1.5/enrolment in a CSC subject POSt.
Co-requisite: MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1.


CSC263H1
Data Structures and Analysis [24L, 12T]

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. Introduction to lower bounds.

Exclusion: CSC265H1, 378H1.
Prerequisite: CSC207H1, CSC236H1/238H1/CSC240H1; STA247H1/STA255H1/STA257H1; CGPA 1.5/enrolment in a CSC subject POSt.


CSC265H1
Enriched Data Structures and Analysis [24L, 12T]

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. Students without the exact course Prerequisites but with a strong mathematical background are encouraged to consult the Department about the possibility of taking this course.

Exclusion: CSC263H1, 378H1.
Prerequisite: CSC240H1; CGPA 1.5/enrolment in a CSC subject POSt.
Co-requisite: STA247H1/STA255H1/STA257H1
NOTE: Students may go to their college to drop down from CSC265H1 to CSC263H1. See above for the drop down deadline.


CSC290H1
Communication Skills for Computer Scientists [36L]

Targeted instruction and significant practice in the communications required for careers in computer science. the curriculum covers written, oral, and interpersonal communication. Students will hand in short pieces of writing each week, will make oral presentations several times in the semester, and will work together in simulated project meetings and other realistic scenarios of pair and small group interaction.
Prerequisite: enrolment in a CSC subject POSt in year 2, 3, or 4.


CSC300H1
Computers and Society [24L, 12T]

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.

Exclusion: PSCD03H (University of Toronto Scarborough)
Prerequisite: Any half-course on computing; CGPA 3.0/enrolment in a CSC subject POSt.


CSC301H1
Introduction to Software Engineering [24L, 12T]

An introduction to agile development methods appropriate for medium-sized teams and rapidly-moving projects. Basic software development infrastructure; requirements elicitation and tracking; estimation and prioritization; teamwork skills; basic UML; design patterns and refactoring; security, discussion of ethical issues, and professional responsibility.
Prerequisite: CSC209H1, CSC263H1/CSC265H1/378H1; CGPA 3.0/enrolment in a CSC subject POSt


CSC302H1
Engineering Large Software Systems [24L, 12T]

An introduction to the theory and practice of large-scale software system design, development, and deployment. Project management; advanced UML; reverse engineering; requirements inspection; verification and validation; software architecture; performance modeling and analysis.
Prerequisite: CSC301H1; CGPA 3.0/enrolment in a CSC subject POSt


CSC309H1
Programming on the Web [24L, 12T]

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.
Prerequisite: CSC209H1, CSC343H1/228H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC310H1
Information theory [24L, 12T]

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.
Prerequisite: CSC148H1/CSC150H1/CSC260H1; STA247H1/STA255H1/STA257H1/STA107H1; MAT135Y1/MAT137Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC318H1
the Design of Interactive Computational Media [24L, 12T]

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.
Prerequisite: Any CSC half-course; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: CSC300H1 provides useful background for work in CSC318H1, so if you plan to take CSC300H1 then you should do it before CSC318H1.


CSC320H1
Introduction to Visual Computing [24L, 12P]

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.
Prerequisite: CSC209H1/(CSC207H1,proficiency in C or C++); MAT137Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC321H1
Introduction to Neural Networks and Machine Learning [24L, 12P]

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.
Prerequisite: CSC207H1; MAT137Y1, MAT223H1/MAT240H1; STA247H1/STA255H1/STA257H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC324H1
Principles of Programming Languages [24L, 12T]

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).

Exclusion: CSC248H1.
Prerequisite: CSC207H1, CSC236H1/238H1/CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC330H1
Logical Specifications [24L, 12T]

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.

Exclusion: CSC230H1.
Prerequisite: CSC236H1/238H1/CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC336H1
Numerical Methods [24L, 12T]

the study of computational methods for solving problems in linear algebra, non-linear equations, approximation, and integration. the aim is to give students a basic understanding of both floating-point arithmetic and the implementation of algorithms used to solve numerical problems, as well as a familiarity with current numerical computing environments.

Exclusion: ACT323H1, 335H1; CSC350H1, CSC351H1.
Prerequisite: CSC207H1/(CSC260H1,CSC148H1/CSC150H1); MAT133Y1(70%)/MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC343H1
Introduction to Databases [24L, 12T]

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.

Exclusion: CSC434H1.
Prerequisite: CSC263H1/CSC265H1/(228H1,238H1)/378H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC350H1
Numerical Algebra and Optimization [24L, 12T]

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.

Exclusion: CSC336H1; ACT323H1, 335H1.
Prerequisite: CSC207H1/(CSC260H1,CSC148H1/CSC150H1); MAT223H1/MAT240H1, MAT237Y1/MAT257Y1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC351H1
Numerical Approximation, Integration and Ordinary Differential Equations [24L, 12T]

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.

Exclusion: ACT323H1, 335H1; CSC336H1.
Prerequisite: CSC350H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC358H1
Introduction to Computer Networks [24L, 12T]

Introduction to computer networks with an emphasis on fundamental principles. Basic understanding of computer networks and network protocols. Topics include network hardware and software, routing, addressing, congestion control, reliable data transfer, performance
analysis, local area networks, and TCP/IP.
Prerequisites: CSC209H1, CSC258H1, CSC263H1/CSC265H1/378H1, STA247H1/STA255H1/STA257H1/ECO227Y1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC363H1
Computational Complexity and Computability [24L, 12T]

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, further topics in complexity theory.

Exclusion: CSC364H1, CSC365H1.
Prerequisite: CSC236H1/238H1/CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt.
NOTE: Although the courses CSC363H1 and CSC373H1 can be taken in any order, we recommend that CSC373H1 be taken first.


CSC365H1
Enriched Computational Complexity and Computability [24L, 12T]

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. Students without the exact course Prerequisites but with a strong mathematical background are encouraged to consult the Department about the possibility of taking this course.

Exclusion: CSC363H1, 364H1.
Prerequisite: CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt.
NOTE: Students may go to their college to drop down from CSC365H1 to CSC363H1. See above for the drop down deadline.
NOTE: Although the courses CSC365H1 and CSC375H1 can be taken in any order, we recommend that CSC375H1 be taken first.


CSC369H1
Operating Systems [24L, 12T]

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.

Exclusion: CSC468H1.
Prerequisite: CSC258H1, CSC209H1, CSC207H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC372H1
Microprocessor Software [24L, 12T, 36P]

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 a language such as C.
Prerequisite: CSC209H1;CSC258H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC373H1
Algorithm Design & Analysis [24L, 12T]

Standard algorithm design techniques: divide-and-conquer, greedy strategies, dynamic programming, linear programming, randomization, network flows, approximation algorithms, and others (if time permits). Students will be expected to show good design principles and adequate skills at reasoning about the correctness and complexity of algorithms.

Exclusion: CSC375H1, 364H1.
Prerequisite: CSC263H1/CSC265H1/378H1; CGPA 3.0/enrolment in a CSC subject POSt.
NOTE: Although the courses CSC373H1 and CSC363H1 can be taken in any order, we recommend that CSC373H1 be taken first.


CSC375H1
Enriched Algorithm Design & Analysis [24L, 12T]

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. Students without the exact course Prerequisites but with a strong mathematical background are encouraged to consult the Department about the possibility of taking this course.

Exclusion: CSC373H1, 364H1.
Prerequisite: CSC265H1; CGPA 3.0/enrolment in a CSC subject POSt.
NOTE: Students may go to their college to drop down from CSC375H1 to CSC373H1. See above for the drop down deadline.
NOTE: Although the courses CSC375H1 and CSC365H1 can be taken in any order, we recommend that CSC375H1 be taken first.


CSC384H1
Introduction to Artificial Intelligence [24L, 12T]

theories and algorithms that capture (or approximate) some of the core elements of computational intelligence. Topics include: search; logical representations and reasoning, classical automated planning, representing and reasoning with uncertainty, learning, decision making (planning) under uncertainty. Assignments provide practical experience, both theory and programming, of the core topics.

Exclusion: CSC484H1.
Prerequisite: CSC324H1; STA247H1/STA255H1/STA257H1; CGPA 3.0/enrolment in a CSC subject POSt.


ECE385H1
Microprocessor Systems [24L, 36P]

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.
Prerequisite: CSC258H1; CSC209H1/proficiency in C; CGPA 3.0/enrolment in a CSC subject POSt.


CSC401H1
Natural Language Computing [24L, 12T]

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.
Prerequisite: CSC207H1/CSC209H1/228H1; STA247H1/STA255H1/STA257H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: MAT223H1/MAT240H1 is strongly recommended.


CSC404H1
Introduction to Video Game Design        [24L, 12T]

Concepts and techniques for the design and development of electronic games. History, social issues and story elements. the business of game development and game promotion. Software engineering, artificial intelligence and graphics elements. Level and model design. Audio elements. Practical assignments leading to team implementation of a complete game.
Prerequisites: One of CSC301H1, CSC318H1, CSC384H1, CSC418H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC410H1
Software Testing and Verification [24L, 12T]

Concepts and state of the art techniques in quality assessment for software engineering; quality attributes; formal specifications and their analysis; testing, verification and validation.
Prerequisite: CSC301H1; CGPA 3.0/enrolment in a CSC subject POSt


CSC411H1
Machine Learning and Data Mining [24L, 12T]

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.
Prerequisite: CSC263H1/CSC265H1; MAT137Y1, STA247H1/STA255H1/STA257H1, STA248H1/STA250H1/STA261H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: CSC336H1/CSC350H1.


CSC412H1
Probabilistic Learning and Reasoning [24L, 12T]

An introduction to probability as a means of representing and reasoning with uncertain knowledge. Qualitative and quantitative specification of probability distributions using probabilistic graphical models. Algorithms for inference and probabilistic reasoning with graphical models. Statistical approaches and algorithms for learning probability models from empirical data. Applications of these models in artificial intelligence and machine learning.
Prerequisite: CSC411H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC418H1
Computer Graphics [24L, 12T]

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.
Prerequisite: CSC336H1/CSC350H1/CSC351H1/CSC363H1/364H1/CSC365H1/CSC373H1/CSC375H1/378HI, MAT137Y1, CSC209H1/proficiency in C or C++ ; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: MAT237Y1, MAT244H1.


CSC420H1
Introduction to Image Understanding [24L, 12P]

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.
Prerequisite: CSC260H1/CSC263H1/CSC265H1, MAT135Y1/MAT136Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: CSC320H1.


CSC428H1
Human-Computer Interaction [24L, 12T]

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.
Prerequisite: CSC318H1; STA247H1/STA255H1/STA257H1, (STA248H1/STA250H1/STA261H1)/(PSY201H1, PSY202H1)/(SOC202H1, SOC300H1); CSC209H1/proficiency C++ or Java; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: A course in PSY; CSC209H1, 407H1.


CSC438H1
Computability and Logic [24L, 12T]

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.

Exclusion: MAT309H1; PHL344H1.
Prerequisite: CSC363H1/364H1/CSC365H1/CSC373H1/CSC375H1/MAT247H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC443H1
Database System Technology [24L, 12T]

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.
Prerequisite: CSC343H1/434H1, CSC369H1/468H1, 364H1/CSC373H1/CSC375H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC446H1
Computational Methods for Partial Differential Equations [24L, 12T]

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.
Prerequisites: CSC351H1/(CSC336H1 (75%))/equivalent mathematical background; MAT237Y1/MAT257Y1; APM346H1/351Y1/(MAT244H1/MAT267H1 and exposure to PDE’s); CGPA 3.0/enrolment in a CSC subject POSt.


CSC448H1
Formal Languages and Automata [24L, 12T]

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.
Prerequisite: CSC236H1/238H1/CSC240H1, CSC363H1/364H1/CSC365H1/MAT247H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC454H1
the Business of Software [24L, 12T]

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.)
Prerequisite: Five CSC half-courses at the 200-level or higher; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: MGT120H1.


CSC456H1
High-Performance Scientific Computing [24L, 12T]

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.
Prerequisite: CSC350H1/(CSC336H1 (75%))/equivalent mathematical background; CSC209H1/proficiency in C, C++ or Fortran; CGPA 3.0/enrolment in a CSC subject POSt.


CSC458H1
Computer Networks [24L, 12T]

Computer communication network design and implementation. Packet switching systems; socket programming; network software, hardware, and protocols; congestion control schemes; traffic generation and measurement; network security; wireless networks. Emphasis on programming and experimental analysis of real network components.
Prerequisite: CSC358H1; CGPA 3.0/enrolment in a CSC subject POST.


CSC465H1
Formal Methods in Software Design [24L, 12T]

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.
Prerequisite: CSC236H1/238H1/CSC240H1/MAT309H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: CSC363H1/364H1/CSC365H1.


CSC469H1
Operating Systems Design and Implementation [24L, 12T]

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.

Exclusion: CSC468H1.
Prerequisite: CSC369H1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC485H1
Computational Linguistics [24L, 12T]

Computational linguistics and the understanding of language by computer. Possible topics include: augmented context-free grammars; chart parsing, ,statistical parsing; semantics and semantic interpretation; ambiguity resolution techniques; discourse structure and reference resolution. Emphasis on statistical learning methods for lexical, syntactic and semantic knowledge.
Prerequisite: STA247H1/STA255H1/STA257H1 or familiarity with basic probability theory; CSC209H1 or proficiency in C++, Java, or Python; CGPA 3.0/enrolment in a CSC.subject POSt. Suggested preparation: CSC324H1/CSC330H1/CSC384H1.


CSC486H1
Knowledge Representation and Reasoning [24L, 12T]

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.
Prerequisite: CSC384H1, CSC363H1/CSC365H1/CSC373H1/CSC375H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: CSC330H1.


CSC487H1
Foundations of Computer Vision [24L, 12T]

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.
Prerequisite: CSC320H1/CSC420H1; MAT235Y1/MAT237Y1/MAT257Y1; CGPA 3.0/enrolment in a CSC subject POSt.


CSC488H1
Compilers and Interpreters [24L, 12T]

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.
Prerequisite: CSC258H1, CSC324H1, CSC263H1/CSC265H1/378H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: Proficiency in C such as from CSC209H1.


ECE489H1
Compilers II [24L, 36P]

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.)
Prerequisite; CSC488H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended preparation: ECE385H1, proficiency in C.


CSC490H1
Capstone Design Project [48L]

CSC491H1
Capstone Design Project [48L]

This 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. Project themes change each year. In 2007/08 the theme was User interfaces for video games. At the time of printing, the theme for 2009/10 had not been chosen but see www.cs.utoronto.ca/~CSC490H1 for information about this year’s topic themes and required preparation.
Prerequisite: Permission of the instructor; CGPA 3.0/enrolment in a CSC subject POSt.


CSC494H1
Computer Science Project [TBA]

CSC495H1
Computer Science Project [TBA]

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.
Prerequisite: Three 300-level Computer Science half-courses, a CGPA of 3.00 (2.50 for students in a CSC Program), and permission of the Program Director, Undergraduate Studies.