CSC Computer Science CoursesCSC104H1 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.) 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; user interfaces and event-driven
programming. 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 analysing the efficiency of
recursive code. This course assumes programming experience in an object-oriented language
such as C++ or Java, as provided by CSC108H. Students
who already have this background may consult the Computer Science Undergraduate Office for
advice about skipping CSC108H. CSC209H1 Software development techniques, typically in the UNIX environment. Particular emphasis
on what happens in the system when programs run. Core topics: software utilities (e.g.
pipes, filters) shell programming, system calls, signals, file processing, introduction to
concurrency (e.g. synchronization, mutual exclusion, race conditions, producer-consumer
problem), processes. Additional topics may include: scripting languages, Internet
programming languages, network programming (e.g. sockets). CSC228H1 An introduction to techniques for storing, accessing and managing long-term data in
computer systems. Hardware and software aspects of data processing: processors, storage
devices, communications, file I/O control. Techniques for organizing and managing files:
serial files, direct files, indexed files, multikey files, integrated files, file systems.
Introduction to data base management systems with emphasis on relational data base
systems. CSC238H1 A rigorous treatment of certain aspects of discrete mathematics with applications to
Computer Science. Emphasis on the basic properties and fundamental algorithms concerning
integers (including induction, Euclidean algorithm, modular arithmetic), and on logic
(including propositional and predicate calculus and simple formal theories). Application
to topics such as program correctness, formal program verification, algorithms from graph
theory, and elementary set theory. 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. CSC270H1 Standard programming methods, with an introduction to C and C++. Use of classes to
represent abstract data types. Graph representation and graph algorithms. Simulation: data
structures and program organization for event-driven models. Representation of
floating-point numbers; introduction to numerical methods. Optimization using dynamic
programming. Programming assignments stress both the proper use of abstract data types
(lists, stacks, trees, heaps) and approaches to writing larger, more complex programs. CSC299Y1 Credit course for supervised participation in faculty research project. See page 42 for details. 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. 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. CSC324H1 Alternative paradigms for programming, illustrated by particular programming languages.
Students already familiar with the procedural approach of languages such as Turing or C
will learn about functional programming (illustrated by Lisp or Scheme) and logic
programming (illustrated by Prolog). Additional topics in principles of programming
languages. 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 both a basic understanding of 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. 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. CSC364H1 Measuring algorithm performance. Techniques of efficient algorithm design: divide and
conquer, greedy method, dynamic programming, graph traversal, change of representation.
Introduction to complexity theory: models of computation, P, NP, polynomial time
reducibility, NP-completeness. Introduction to the theory of computation: Church's thesis,
computable and noncomputable functions, recursive and recursively enumerable sets,
universality, many-one reducibility. 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. CSC378H1 Abstract data types such as priority queues and dictionaries. Advanced data structures
for main memory resident information, such as binomial heaps, leftist trees,
self-adjusting lists and balanced search trees. Algorithm analysis: worst case, average
case, and amortized complexity. Introduction to lower bounds. Emphasis is given to problem
solving and a theoretical treatment of the data structures. 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. 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. CSC408H1 The structure and unique characteristics of large software systems. Concepts and
techniques in the design and implementation of large software systems. Requirements,
definition, and specification. Software modularity and programming languages for system
implementation. Debugging, testing and software quality assurance. Software project
management. Formal methods in software engineering. A course project is used to illustrate
software engineering techniques. 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. 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. CSC434H1 Concepts, approaches, and techniques in data base management systems (DBMS): data and
information management; logical models of data bases: relational, network, and
hierarchical DBMS's; operational requirements; implementation considerations; DBMS
architecture; data base design. 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 Gdel Incompleteness Theorem. 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. CSC468H1 Principles of operating systems. The operating system as a control program and as a
resource allocator. The concept of a process is central: synchronization, mutual
exclusion, deadlock. Additional topics include memory management, file systems, process
scheduling, and protection. Some treatment of multiprocessor issues, such as threads and
scheduling. Case studies from systems such as Unix and Mach. Experimentation with a simple
operating system using a concurrent programming language. CSC478H1 Algebraic theory that underlies symbolic and algebraic manipulation by computer.
Chinese Remainder and interpolation theory, fast algorithms for computations with
integers, polynomials and power series. Newton and Hensel iteration, polynomial and
integer gcd algorithms, factorization of polynomials, the Fast Fourier transform, prime
number tests, public-key cryptosystems. The Maple computer algebra system. CSC485H1 Computational linguistics and the understanding and generation of natural language by
computer. Syntactic processing: transformational grammar, ATNs. Semantics and semantic
interpretation. Pragmatics: speech acts, pronouns, definite descriptions, discourse
context. 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. 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 and Science Home
Copyright © 1999, University of Toronto