(Last Revision: 08/17/98)

COURSE INFORMATION FOR DATA STRUCTURES AND ALGORITHMS:

CS 3100 SECTION 1
MWF 11:15-12:13; P-101 (Professional Schools Building)

TERM:

FALL 1998

CLASS CODE:

40686 CS 3100 Section 001

INSTRUCTOR:

John Sarraille, Professor of Computer Science

OFFICE:

P-286, Professional Schools Building, Cal State Stanislaus

OFFICE HOURS:

MWF 9:00-10:00; Tu-Th 10:00-11:00; or by appointment

PHONE NUMBERS:

Office: 667-3345; CS Dept: 667-3185

E-MAIL:

john@ishi.csustan.edu

HOMEPAGE:

http://www.cs.csustan.edu/~john/jsHomepage.html

BASIC SCHEDULE INFO:

Each class session is a mixture of laboratory, lecture, and discussion.  
The goal is to do whatever is necessary to learn the material.

My expectation is that everyone will attend all the classes and keep 
current with everything that is happening in class.

PREREQUISITES:

It is important that you are adequately prepared for taking this course, 
CS 3100.  Check with me if you have not passed:

CS 2500 (Computer Programming II), or the equivalent.

REQUIRED TEXT:

"Data Structures, Algorithms, and Applications in C++" by Sartaj Sahni, 
published by WCB/McGraw-Hill, (ISBN 0-07-109219-6)

RECOMMENDED TEXT:

If you have no experience using Unix computers, you ought to get a copy 
of:

"Learning the Unix Operating System" by Grace Todino, Jerry Peek, and 
John Strang (4th Edition).  

The book is very inexpensive.  Look in the CS 2500 textbook section for 
it if you don't see it in the CS 3100 section.

PROGRAMMING LANGUAGE:

Our text is C++ oriented, and I will present most code samples in C++. If 
you want to do a programming assignment in a different computer language, 
basically I am willing to accept that, but you must speak with me in 
advance and reach an agreement on some ground rules.

COMPUTER EQUIPMENT
SUN Ultra Workstations:

Each of you will have an account that gives you access to all the 
Computer Science Department Sun Ultra 10 and Sun Ultra 30 computers.  
These computers have been specially networked so that you get the same 
environment, including home directory of your personal files, regardless 
of which Sun Ultra you log on to.  

If you had an account on our old Sun network, then it was probably ported 
to the Sun Ultra network.  If so, try to login to one of the Ultra's.  In 
any case, if you don't seem to have access to the Ultra's, then let me 
know right away, preferably by e-mail.  Give me your full name and the 
name of the class.  I'll see to it that an account is created for you, 
and I'll give you the account information at the next class meeting.

We'll have a special lab session to teach you what you need to know in 
order to use the Ultra's for class assignments.

The Ultra's are located in the new Computer Science Lab: P-288.  P-288 is 
in the Professional Schools Building, in the extreme northwest corner of 
the north wing.  

I will test the programs that you write for this course by compiling and 
executing them on a Sun Ultra.  Therefore you must write programs that 
will compile and run without errors on these machines.  If you are 
accustomed to a different computing environment, you will have to be 
careful about this.

Generally, the Ultra's are available for access and use on a 24-hour 
basis.  However the campus computer labs do not remain open at all hours.  
Therefore sometimes network and modem connections will be the only means 
available for connecting to the Ultra's.  For more information about 
network and modem connections, see the sections below entitled "MODEM 
CONNECTIONS" and "INTERNET CONNECTIONS".  Also see the document entitled 
"loginDirections".

P-288 will be open basically mid-morning until about 5:00 p.m..  During 
these times, you can be physically present in the CS Department Lab while 
using a department computer.  This can be very beneficial because you 
then have the opportunity to work and communicate with fellow students 
and members of the faculty.

Due to budgetary constraints beyond our control, the hours during which 
P-288 is open are subject to change on short notice.  Please check the 
postings of the lab hours that are included in the "message of the day" 
that is printed on your screen when you login to your Sun Ultra account.

Incidentally, the CS Department is looking for volunteers and work-study 
students to help keep the lab open longer hours.  For further 
information, ask our system administrator, Julie Gorman: P-288C,  667-
3273, julie@siggraph.csustan.edu.

While you are in the CS Lab, you will be able to access Sun Ultra 
workstations by logging in directly at the console, or by using telnet 
from some other kind of computer in the lab, such as a Macintosh or a 
"Wintel".  

Telnet makes it possible for many people to use a given workstation 
simultaneously.  Let me know if you need a demonstration of how to get a 
telnet connection. (You can probably learn how just by asking someone in 
the lab.)  You can also access the Sun Ultra's via a telnet connection 
from most any computer on the campus local network, such as those in P-
106, P-120, L-125 and L-145.  Generally those labs are open during the 
same hours that the campus library is open.  Please check postings at the 
labs or ask lab personnel in order to get further information about lab 
hours.  Lab assistants (wearing red vests) should be able to show you how 
to telnet to a CS Department workstation.

MODEM CONNECTIONS:

Some phone numbers for making modem connections are: from Turlock 667-
3130, 667-3794 & 664-7072 (28.8K); toll-free from Modesto 523-2173; toll-
free from Merced 723-2810 & 723-2826; and toll-free from Stockton 467-
5399.  Check with the computer center's (OIT's) help desk to get the 
latest information.  The help desk is in L-150, and the telephone number 
is 667-3687.

INTERNET CONNECTIONS:

You may want to purchase Internet connectivity.  This is *not* a 
requirement and *not* necessary for success, but it can be a great time-
saver and a convenience once you have gotten past the hurdle of setting 
everything up.  There are several Internet service providers (ISP's) that 
serve this area.  You can find many of them by entering the keywords 
"internet service providers ISP" in a WWW search engine.  

Also, you can find ads in the yellow pages and newspapers.

If you get an Internet connection, make sure you get "telnet" and "ftp" 
capability so that you can login remotely to your computer account at the 
college and also transfer files back and forth.  To be ready to do telnet 
and ftp, you may need to get some special add-on software from your ISP.

NETWORK AVAILABILITY OF COURSE MATERIALS:

Most course documents, assignments, supplements, and so on will be made 
available via gopher.  To access my gopher server, you can do the command 
"gopher ishi" from most any networked Unix computer on campus, or you can 
open the URL "gopher://ishi.csustan.edu" from any web browser on any 
computer connected to the campus network or Internet.  From there, just 
select "Classes" and then "CS3100_DataStructures" to get to the area 
containing the class information.

COURSE OBJECTIVES:

The highest aim of this course is for you to learn how to create good 
abstract data structures and good algorithms for computer programs.  One 
way to work toward that aim is to study the abstract data structures and 
algorithms that are widely-known to be "good" for common programming 
problems, seeking to understand what it is that makes them good.  Such a 
study is another goal of this course.

To understand what makes one data structure or algorithm good for 
performing a given task, and another not as good, it is necessary that we 
know how to analyze the potential efficiency of an algorithm using the 
counting methods of discrete mathematics, elementary probability and 
statistics, and, occasionally, calculus.  So analysis of algorithms is a 
course objective too.

It is also quite important that you take on and complete challenging 
programming assignments -- ones that require considerable organizing 
and/or problem-solving skill on your part.

To learn good techniques of software development is another goal of this 
course.  This includes the use of our campus computers and network.

Finally, it needs to be said that "surviving" this course is an important 
objective for computer science majors!  It is an important prerequisite 
to many other CS courses.

COURSE CONTENT:

I will assign "background" reading from chapters 1-3 of Sahni's book.  
Most of that material is review.  We will cover in depth a lot of the 
material in chapters 4-9 and 11.  If time allows we will also cover some 
of the material in chapters 12-14.  We will study many, though not 
necessarily all, of the following data structures:

arrays, records, structures, classes, pointers, linked lists, stacks, 
queues, lists, trees, graphs, strings, and sets.

You have some familiarity with many of them. You will be studying them in 
greater depth.

TESTS & GRADING:

There will be two in-term exams and a final exam.  Each exam will count 
20% of your grade.  The other 40% of your grade will come from your score 
on programming assignments.

There will be about 5 programming assignments.

I will require you to design each program using a top-down design 
methodology, modular data structures, and information hiding.  You will 
use the top-down method not only to design the instructions of your 
program, but also to design the data structures, the documentation, and 
the test data.  A programmer using the top-down method develops the 
program level by level.  The programmer starts with a very simple first-
level program design, and works down, step-by-step, to more detailed 
levels.  

I will typically require you to turn in two or three "levels" of your 
programming assignments so that I can check your progress in employing 
the top-down design method.  For example, for a programming assignment 
worth 8% of your overall grade, the top and second levels might count 2% 
each and the final level 4%.

EXCEPTION:

In order to pass this course, you must pass both the programming part and 
the classroom test part.  Also, you must turn in a working solution to 
each of the programming problems.  Late assignments are not accepted, so 
solutions to programming problems have to be turned in by the (final) due 
date for the project in order to receive credit. 

LATE ASSIGNMENTS:

Due to many constraints, I can't tolerate late assignments. You get 
credit only for what you turn in on time.

On the other hand, we can have class discussions about due dates and I 
may be willing to move a due date back if doing so can be justified to my 
satisfaction.  If you are uncomfortable with a scheduled due date, please 
bring this to my attention as soon as possible, and not at the last 
minute.

If you are not finished with an assignment on the due date, please turn 
in whatever you *have* done.  It may be possible to get up to about half 
credit, depending on the quality of the work and the circumstances.  If 
you turn in nothing, you get no credit.

NOTE: Please bear in mind that you can fail this course just by missing 
some due dates.  If you get bogged down on some aspect of an assignment, 
come and get some help from me in office hours well before the assignment 
is due.

SPECIAL PROBLEMS:

If you think you are going to be unable to take a test or turn in an 
assignment on time due to circumstances beyond your control, then let me 
know at the very earliest time possible.  I'll try to make some fair 
arrangement with you.

RESPONSIBILITY FOR YOUR OWN WORK:

I encourage you to discuss programming assignments with your classmates 
or whomever you wish.  It is very appropriate and worthwhile for students 
to get together to test their understanding of an assignment, to discuss 
advantages and disadvantages of alternative approaches to solving the 
problem, to talk over the pro's and con's of different ways of organizing 
the program, and to give each other pointers to helpful published 
materials.

You are welcome to use algorithms or segments of source code that you get 
from me, from text books, or from publications available in our library 
or through inter-library loan. (Don't expect all of it to work perfectly!  
You'll have to adapt and even debug some of it.)  Aside from the 
foregoing exceptions, you must be the sole author of all the source code 
that goes into the programs you turn in for this course.

During quizzes and exams, you are allowed to come forward and ask me to 
clarify the meaning of a test question.  It will be up to me to decide 
how to answer, or whether to answer at all. The members of the class will 
be told any new information that arises from such an exchange.  Aside 
from that, you must write quizzes and exams without the help of other 
people or the help of any reading materials.

If there is compelling evidence that programs, or tests were not done 
according to the above criteria, credit will be withheld.

PARTICIPATION:

I hope to be accessible, helpful, and responsive to your needs during 
this course.  You can do well, and I want that. 

To optimize your likelihood of success, consider participating fully in 
the class:  Attend all classes.  Faithfully listen and take notes.  
Finish all assignments on time.  Review your notes before each class.  
Reply to questions or remarks addressed to you.  Ask questions.  When you 
are not getting anywhere on some problem, and it's not the kind of thing 
you can get resolved in class, seek my help during office hours.  

Do all this, even when things are not going well.  And have fun!