(Latest Revision -- 2015/08/07)
[2015/08/07: Initial Version]
TERM: Fall 2015
for Data Structures + Algorithms: CS 3100
CLASS INFO FROM SCHEDULE:
Mon-Wed 3:30P Class:
♥40515 CS 3100 001 Data Structures and Algorithms Lec 3.0 MW 3:30P-4:45P P-101
INSTRUCTOR: John Sarraillé, Professor of Computer Science
Professional Schools Building (aka: Demergasso-Bava Hall), Cal State Stanislaus
(The first day of scheduled office hours is Thursday, August 27, 2015, and
the last is Thursday, December 10, 2015.)
- Wednesdays 10:00-13:00 (10 a.m. to 1:00 p.m.)
- Thursdays 10:00-12:00 (10 a.m. to 12:00 p.m.)
- or ask me for an appointment at a time that works for you
CS 3100 HOMEPAGE:
It is important that you be adequately prepared for taking this
course, CS3100. Check with me if you have not passed:
- Computer Programming II, (CS 2500), or the equivalent,
The highest aim of this course is for you to learn how to choose
and design good abstract data structures and good algorithms
for computer programs. To work toward that aim we will study
abstract data structures and algorithms that are widely-known
to be "good" for common programming problems.
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. Therefore, 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 you to bring to bear considerable organizational and problem-solving skill.
Among other things, this will demand that you be proficient
using our Unix computers and campus network.
Finally, it must be said that passing this course is an important
milestone on the road to acquiring a CS degree. What you learn
here will be applied in many other CS courses.
Data Abstraction and Problem Solving with C++: walls and mirrors
writen by Frank M. Carrano and Timothy Henry;
published by Pearson;
Learning the Unix Operating System (5th edition);
by Jerry Peek, Grace Todino-Gonguet and John Strang;
published by O'Reilly and Associates, 2001;
You should also consider getting a more comprehensive Unix book. Here are a
Mac OS X for Unix Geeks (Leopard), 4th Edition,
by Ernest E. Rothman, Brian Jepson, & Rich Rosen,
published in 2008 by O'Reilly & Associates,
ISBN 10: 0-596-52062-X,
UNIX: The Complete Reference, Second Edition,
by Richard Rosinski, Kenneth Rosen, Douglas Host, & Rachel Klee
published in 2006 by McGraw Hill,
ISBN 10: 0072263369
ISBN 13: 9780072263367
UNIX in a Nutshell, Fourth Edition,
by Arnold Robbins,
published in 2005 by O'Reilly & Associates,
UNIX System V: A Practical Guide, 3/e,
by Mark G. Sobell,
published in 1994 by Addison Wesley,
My intention is to cover the following material in the text
It may or may not be necessary to make some adjustments to that list.
- Chapter 5: Recursion as a Problem-Solving Technique
- Chapter 10: Algorithm Efficiency
- Chapter 11: Sorting Algorithms and Their Efficiency
- Chapter 11: C++ Interlude 4: Class Relationships and Reuse
- Chapter 15: Trees
- Chapter 16: Tree Implementations
- Chapter 17: Heaps
- Chapter 18: Dictionaries and Their Implementations
- Chapter 19: Balanced Search Trees
- Chapter 20: Graphs
I will eventually fill out the schedule
with all the weekly reading assignments, and more.
BASIC INFORMATION ABOUT CLASS SESSIONS AND TIME REQUIREMENTS:
Each class session will be some mixture of laboratory and lecture activities.
Mainly the purpose of class sessions is twofold: to help students absorb the
readings and related material, and to help them complete the programming
Students are responsible for working on programming assignments outside of
class time. Doing the assignments can fill up a lot of hours. To keep the
pace, you will need to "work smart." In addition to class time, expect
to work up to 7.5 hours per week on this class.
My expectation is that everyone will attend all the class sessions and keep
current with everything that is happening in class. I will keep track of
TESTS & GRADING:
Your course grade will be based on two components:
My plan is to have
- Your scores on tests, and
- Your scores on programming assignments.
To pass the course you must:
- two quizzes,
- five programming assignments, and
- a comprehensive final examination.
If you meet the requirements above, I will compute your Course Grade by giving
a weight of 60% to your Test Component Score,
and a weight of 40% to your Average Program Score. In other words:
- Receive a passing Test Component Score,
- Turn in a working solution to every one of the programming problems, and
- Receive a passing Average Program Score.
Course Grade = (0.60)(Test Component Score) +
(0.40)(Average Program Score)
To compute your Test Component Score, I will first compute
your Quiz Average and your Final Exam Score. I will then compute the
MAXIMUM and MINIMUM of your Quiz Average and Final Exam Score.
Your Test Component Score will be:
Test Component Score = (0.70)(MAXIMUM) + (0.30)(MINIMUM)
This way, if your performance on the quizzes and final exam differ, I
will give much more weight to what you did better.
MISSED EXAMS AND LATE ASSIGNMENTS:
When you sign up for this course, and when you remain in this course,
you have agreed to be available during all the class meeting times
and the final exam time. You have also agreed to follow all
the course rules and guidelines. Therefore, I will ordinarily not grant
requests to change the way the course is conducted. For example,
I don't ordinarily give make-up tests to individual students, or allow individual students to take tests before or after the rest of the class.
Having said that, it is possible that there could be a compelling reason why I
should make a special accommodation for you. If it has to do with a disability,
you should probably discuss it with someone in the
Disability Resource Center. You can also discuss the matter with me, if that
seems like the more appropriate option, and I'll do my best to make the right decision
Get started early on assignments. That way, if you run into difficulty, you
can seek help in class and/or office hours in a timely fashion.
I will assess a
late penalty of 10% credit per calendar day
(including holidays and weekends) on programming assignments turned in between
one and five days late.
I will not accept programming assignments late more than 5 days.
We can have class discussions about which dates the class will take tests,
and which dates the programs will be due. I may be willing to change
some of these dates. If you want a change in the schedule, please bring
this up (in class, preferably) as soon as possible, and not at the last minute.
(It's usually a good idea for class members to try to work out some
consensus before bringing the subject up with me.)
If you find yourself in difficulty with some aspect of an assignment,
seek help from me promptly. Maybe I can clear things up
if you ask me a question in class. Other students may benefit from
hearing the discussion. You may speak to me after class or during my office hours.
You may send me a message by e-mail. You are entitled to get help this way.
Office visits and such are a normal part of a college education.
Whatever you do, please don't subvert your chances of success
by continuing to spin your wheels when you are stuck in a rut.
To get through a class like this successfully, you may have to get over
foolish pride, stubbornness, and/or shyness.
When things take a bad turn:
If you cannot finish a programming assignment on time,
do damage control:
Under those circumstances, I'll try to give you what credit I can for your
work. However, keep in mind that it is a course requirement that you complete
all the programming assignments. So, in the scenario we are discussing here,
you will be in a position where you will need to pull yourself out of a hole.
You should not expect to get much credit for an unfinished assignment
and you should try very hard to get back on track.
- On the due date, turn in whatever you have done on the assignment
- Then, in the next five days, do all you can to finish up the assignment, including
getting all the help you can from me.
- If you finish the assignment before the last late day
(the fifth day after the due date), then turn in the assignment
on the day you finish it.
- If you are still not completely finished with the assignment
on the last late day (the fifth day after the due date),
then turn in whatever you have done on that fifth day.
Please understand that if you fail to turn in
any one of the assigned programs by the fifth day after the due date,
you will get a failing grade in CS 3100. There will be no way to salvage
or make up the grade.
PROGRAM DESIGN METHODOLOGY:
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 to design the instructions of your program, 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
I will sometimes require you to turn in two or three preliminary versions or
levels of your programming assignments, so that I can check
your progress in creating your top-down design. If so, I may assign
some fraction of the total credit for the program to each version that
you turn in. For example there might be a scheme like this:
01% level two program
01% level three program
06% final version of program
08% total credit for the program
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. (By "in advance" I mean very near the time students
start working on the assignment, not close to the due date.)
I hope to be accessible and helpful to you during this course. I want you to
get as much as possible out of it.
Remember that you are a member of a class, a group, a team.
People intentionally designed the university education to be a group activity.
If you scrunch down in your seat and sew your mouth shut, you make your education and
the education of the other students more difficult. Don't be worried about seeming ignorant,
because we are all lacking in education. A college education is self-help for ignorant people,
and that includes the instructors, by the way.
To do well in the class, and to help the rest of the class, read everything
I assign as soon as possible, and read with care. Read difficult material
more than once! Attend all classes. Pay close attention. Take notes - yes,
write things down on paper, or key into a computer.
that people who write
notes learn better. It has to do with the actual activity of writing
while listening and thinking. Review your notes before each class. Get started on assignments
early. Do a little each day, and bring your questions and problems concerning
these assignments to class each day.
Finish assignments and reading on time. Do what you can to keep class
discussion lively and to the point. Reply to questions. Ask questions and
make remarks if you feel you have something to add, or if you feel something
needs to be explained better.
RESPONSIBILITY FOR YOUR OWN WORK:
Sometimes it can be difficult for the student to figure out the difference
between 'cheating' and 'working smart.' Here is some guidance:
Programming Assignments: When you discuss your programming assignments
with classmates or with other people besides me or a designated tutor for the class,
limit the discussion to:
In your programming assignment solutions,
you may incoporate algorithms or segments of code from:
- clarifying the meaning of the assignment and its specifications, and
- determining the relative merits of different approaches
to designing and engineering solutions.
You may share such material, as described in 1-3 above, with
other members of this class.
- any printed material available for student check-out in our library,
- our course text, or
- any programming textbooks to which you have access.
You may ask me for help and hints on programming assignments.
You may ask tutors employed for this purpose by the university
for help and hints on programming assignments.
When feasible, I prefer that you ask questions in class, so that everyone in the
group has a chance to benefit from the discussion that takes place.
On the other hand,
Tests: You must write your tests, exams, and quizzes with no discussion
or help from anyone. The one exception is that you are allowed to come
forward and ask me to clarify the meaning of a test question, if you wish.
It will be up to me to decide how to answer, or whether to answer at all.
I will tell the class any new information that arises from such an exchange.
- You must not give or accept any other kind of help on programming
- Except for using code as described in 1-3 above, and except for
whatever help you get from me or an approved tutor, you must
write all the code for a programming assignment all by yourself.
- You must not allow any part of a solution you write for
a programming assignment to be shared with another member of the class,
or allow such material to be communicated to you.
- You must not allow printouts of your code to be left where others
could get access to them, or allow others to see your code by looking
at your files, your computer screen, or other media.
If caught cheating, expect to be dealt with to the full extent
allowed under University policy. Cheating degrades the integrity and the core values
of our shared educational system. There are always better alternatives. Be open to them.
NETWORK AVAILABILITY OF COURSE MATERIALS:
I will make course documents, assignments, supplements, and so on available on
the world wide web. To access the on-line CS 3100 materials, you can open the
There is also a miscellaneous collection of information that you may want to
use from time to time. It is located here:
Each of you is supposed to have an account that gives you access to all the
Computer Science Department Lab computers. Most of the computers share a
networked file system, and you get the same home directory, regardless of
which which one you log into.
If you don't seem to have access to those computers, then let me know right
away, preferably by filling out and submitting this
Otherwise send me an e-mail or give me a piece of paper containing the
answers to the questions on the
We'll have a special lab session to help the class learn the procedures for
using the lab computers to complete my programming assignments.
The CS computers are located in the Computer Science Lab:
P-288 is in the Professional Schools Building (aka:
Demergasso-Bava Hall), in the extreme northwest corner of the second
floor of the north wing.
I will test the programs that you write for this course by compiling and
executing them on a
CS Department Macintosh Computer.
you must write programs that will compile and run without errors on these
If you are accustomed to a different computing environment, you will have to
be careful about this.
Generally, CS Department workstations are available for access 7 days a week
and 24 hours per day. However campus computer labs do not remain open at all
hours. Therefore sometimes network connections are the only means available
for connecting. See the section below entitled "INTERNET CONNECTIONS" for
more information. Also see the course document entitled
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
staff and 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 at the entrance to the lab, in the "message of
the day" that is printed on your screen when you log on to your CS computer
check on the web.
Incidentally, the CS Department often seeks volunteers and work-study
students to help keep the lab open longer hours. For further information,
ask our system administrator, Deep Gill:
You can access many CS Department Lab computers via an ssh or sftp
connection from anywhere on the Internet. When the CS Lab is closed, you
may wish to login from a host on the campus local area network, such as
those in the
University open labs.
Generally those labs are open during the
same hours that the campus library is open. Please check postings online, or
at the labs, or ask lab personnel in order to get further information about lab
hours. Lab assistants should be able to show you how to establish ssh or
sftp connections to a CS Department workstation. You'll need to know your
login name and password.
You may want to obtain Internet connectivity for your residence.
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 (ISPs) that serve this area.
Chances are that members of the class can make good recommendations. If you
like, we can devote some time to this topic in class.
One can find many ISPs by doing a web search. ISPs also advertise in the
yellow pages and in newspapers.
If you get an Internet connection, make sure you get remote login
(ssh) and file transfer (sftp) software. This will allow you to log
in from home to your computer account at the college and also transfer
files back and forth. For more information about this, read the
remote login and file transfer help sheet.
For additional information, ask me or the CS Lab Administrator, Deep Gill: