About CSC 172
Introduction to Algorithms and Data Structures
Spring, 1999
This course picks up where CSC 171, which most of you took last
semester, left off. We'll learn more features of the Java language,
but more importantly we'll continue studying algorithms and data
structures for computational problem-solving.
- Algorithm
- A specification of how to accomplish a particular task.
Many books use the example of a recipe in a cookbook, which specifies
how to convert raw materials (eggs, flour, etc.) into a desired end
product (a batch of cookies); other examples would be the procedure
you go through to start your car, or to multiply two large numbers
together, or the quadratic formula. Most books also define an algorithm
as a sequence of operations, but the notion of sequence is not
essential: the quadratic formula, for example, doesn't look like a
sequence of operations at first glance, and in fact it can be evaluated
in several different orders with no impact whatsoever on the result.
An algorithm is more or less independent of the language in
which it is expressed: one can write essentially the same algorithm in
Java, Pascal, C++, Visual Basic, and Scheme, although they will all look
cosmetically different (with different sequences of semicolons, commas,
braces, keywords, etc).
- Data Structure
- A specification of how to represent a particular kind of information
in a computer. Most languages provide several "primitive" data
types, e.g. integers, characters, and perhaps strings, functions, etc.
But if the information you need to manipulate isn't exactly one of those
kinds of information, you need to figure out how to represent it. For
example, last semester we defined a class CartesianPoint to
represent an ordered pair of integers, wrapped up together as a
single object; and we defined a class Shish to represent an
ordered list of kebabs of various sorts (lamb, tomato, etc.)
We'll use the same two textbooks for this course as we did last
semester:
Introduction
to Programming using Java, by Arnow and Weiss, ISBN
0-201-31184-4, published by
Addison Wesley
Longman, and
A Little
Java, a Few Patterns, by Felleisen and Friedman, ISBN 0-262-56115-8,
published by MIT Press.
Other documentation will be provided
on-line or in handouts. For example, see my
List of Adages on Software Development and Design,
the
Object
Oriented Programming FAQ, and
the Free Online Dictionary of
Computing.
The
syllabus
is available in LaTeX,
DVI, and
Postscript.
An
updated schedule will
contain
the latest updates to homework due dates, lecture topics, etc.
Please check the schedule regularly and keep up on the assigned reading!
Who should Take This Course?
This course is the second half of Adelphi's first-year programming
sequence. It assumes you have taken the first half, CSC 171, or the
equivalent. If you took the first half in a language other than Java,
you'll have some catching up to do, and you may also have already seen
some concepts that will be presented in this semester.
The course will be of some
benefit to people who know a procedural programming language like
Pascal, C, or Basic, and want to learn Java and/or object-oriented
programming (OOP).
I expect the class to
include some computer science majors, some computer science minors,
and some people here for just one or two courses.
If you want to learn how to use a computer (for word processing,
spreadsheets, databases, Web browsing, email, etc.) and perhaps
create your own Web page, but not write real computer programs yourself,
you should probably take
CSC 170,
"Introduction to Computers and Their Applications", instead.
Homework Assignments
I'll try to give a homework assignment every week, due the following
week. This means they'll have to be pretty short, becoming more
ambitious and building on one another as the semester progresses.
Last modified:
Tue Jan 5 14:00:29 EST 1999
Stephen Bloch / sbloch@boethius.adelphi.edu