FSU Seal - 1851

    COURSE SYLLABUS

    COP 4530 / CGS 5425, Sections 1 and 2
    Data Structures, Algorithms, and Generic Programming

    Fall Semester 2004


Prerequisites:

COP 3330: Object-Oriented Programming, and MAD 2104: Discrete Mathematics. Pre or Corequisite: CDA 3101: Computer Organization. The pre-requisites will not be waived.

Class Schedule:

Activity Day Time Location
Lecture - Sec 01 TR 2:00 pm - 3:15 pm LOV 301
Lecture - Sec 02 TR 3:35 pm - 4:50 pm LOV 301
Recitation - Sec 01 F 8:00 am - 8:50 am MCH 128
Recitation - Sec 02 F 9:05 am - 9:55 am MCH 128

Contact information:

Instructor: Ashok Srinivasan
Office hours: WR 1 pm - 2 pm. I am also usually available in my office, and you can feel free to meet me in the afternoons, except before class Tuesday. Alternatively, you may schedule an appointment, either by email or by phone.
Office: 169, Love Building
Phone: 644-0559
Email: asriniva@cs.fsu.edu

Teaching Assistant: Huey Ling, Toh

Office hours: F 10:15 am - 11:15 am
Office: CS Majors lab
Phone: TBA
Email: toh@cs.fsu.edu

Course material:

Required Material:
Optional reference material:
Online resources:
Computer accounts:

Course rationale:

So far, you have acquired proficiency in programming. This course will start the process of your transformation from a programmer to a computer scientist. One of the important tasks of a computer scientist is to make efficient use of computational resources. This course will teach you about different ways of organizing the data to facilitate such efficient use, and will also discuss efficient techniques to perform some fundamental operations in computer science. A subsequent course on Algorithms, COP 4531, will teach you to use the techniques discussed in this course to solve commonly encountered computer science problems efficiently. Both these courses will also teach you to analyze the efficiency, and prove the correctness, of your program in a mathematically rigorous manner. Material you learn in these two courses is critical to your becoming a good software developer later.

Course description:

This IS NOT a course in object-oriented programming!

This is a course about efficiency of programs and programming. In this course, we will pursue various meanings of "efficient". It is efficient to:

Furthermore, in many applications, correctness is the ultimate form of efficiency, while in others efficiency means getting the best result possible in the limited time (or space) available.

Efficiency can happen at different levels. Take code:

All these ideas of efficiency are central to this course. It is also true that all of these ideas of efficiency are fundamental to the design and specification of the C++ language, which is one of many reasons C++ is a good choice for the core language in our curriculum and for this course.

The three topics mentioned in the title of the course are:

Data structures
We will discuss data structures in abstract terms, as abstract data types (ADTs), but we will also implement them concretely, using C++.
Algorithms
Algorithms are formalizations of processes that result in predictable and desirable outcomes. They are used in a variety of contexts. Particularly, data structures are made usable by implementing algorithms for searching, sorting, and indexing the structures.
Generic programming
Generic programming is the science of component re-use. We will explore coding for re-use of both data structures and algorithms in C++. Coding for re-use and re-use of code are important aspects of software engineering.

We will also have several substantial programming projects that involve the implementation and use of data structures, algorithms, and generic programming.

Learning objectives:

At the end of this course, you should be able to accomplish the objectives given below. Furthermore, since the tasks mentioned below are those that every computer scientist is expected to be familiar with, it will help you if you learn it well enough that you have a permanent working knowledge of the material discussed.

Data Structures Algorithms

You should be able to accomplish the following:

Generic Programming

You should be able to accomplish the following:

Attaining these objectives will enable you to:

Your responsibilities:

Deadlines and instructions
Following the same professional guidelines that you will encounter in business, there are strict deadlines, and instructions that must be followed. Please read instructions carefully, and schedule your activities so that you submit assignments well in time. You should check your garnet email account and the class web page regularly, and note other announcements, on-line and in class.

Participation
I will ask you questions in class: (i) review questions on the previous lecture, and (ii) questions on the material currently being discussed, in order for me to obtain feedback on how well you understand the material. You should be prepared to answer these questions, and should also participate by asking questions, suggesting ideas, and performing in-class assignments that I give. Of course, you cannot participate in class unless you attend it! The recitations too form an important component of the course. You will also be asked to write small programs and perform other tasks during recitations. These too count toward class participation.

Group work
There will be two types of group work in this course. (i) Study groups: We will organize study groups, which will assist you in understanding lecture material, and in preparing for lectures. More details on this are available at: www.cs.fsu.edu/~asriniva/courses/cop4530/studygroups.html. (ii) Group assignments: You will have at least one group programming assignment. You should participate in both types of group activities and make a fair contribution to the effort of the group. You can learn more about working in groups at: www.cs.fsu.edu/~asriniva/courses/cop4530/groupwork.html.

Reading assignments
After each lecture, you will be given a reading assignment from the text and from the online lecture notes, pertaining to that lecture. You should read these, and also practice with example codes that we supply. New material builds on the old ones. So, if you have trouble with some material, please get help through the discussion board on Blackboard, or from a teaching assistant or me, before the next class. You should also peruse the material for the next lecture, and be prepared to answer questions on it, which I will provide in advance. I expect that you will need to spend between one and two hours studying, for each lecture. The programming assignments and exams will consume additional time. The following learning components are important, and you may want to verify if you do satisfactorily on these, after studying the material.

  • Knowledge: Do you understand the terminology used? Given a data-structure and some data or operations, can you tell how the data is represented? Given an algorithm and its input, can you describe the steps carried out by the algorithm and the output? Given a data structure or algorithm, can you write C++ code for it? Given a data-structure and some operations on it, or an algorithm, can you give the time and space complexity?
  • Understanding: If some aspect of a data-structure, an operation on it, or an algorithm, were modified, can you analyze the time complexity? If some aspect of an operation on a data-structure, or an algorithm, were modified, can you prove or disprove its correctness? In order to answer these questions, you need to understand how each component of an algorithm affects the time complexity, and why each component of an algorithm is important for its correctness. After you learn about what an algorithm does (and have, thus, acquired "knowledge"), it will be useful for you to think of different things that can be changed, and see how that will affect the time complexity or correctness.
  • Application: Given a real life, or artificial, problem, can you decide on suitable data structures and algorithms from those we have studied, to solve that problem?
  • Creativity: Can you modify algorithms that we have studied, to make them more efficient for special situations? Given a problem for which our algorithm is not valid as designed, can you modify the algorithm to solve the problem, and then prove the correctness of your solution, and analyze its time complexity? Can you use multiple data structure and algorithms from those that we have studied, to solve a new problem?

Homework assignments
You will have three programming assignments and three written assignments in this course, and you will have around ten days to work on each one. At least one of these (the second programming assignment), will be a group project. The projects will be announced on the Blackboard course web site under "Assignments". We will also discuss it during the recitations. Assignment submission instructions are available at www.cs.fsu.edu/~asriniva/courses/DS04/HWinstructions.html

The assignment schedule is as follows:

Assignment    Release Date    Due Date
1 Sep 8 Sep 22 (10 am)
2 (Program) Sep 21 Oct 5
3 Oct 5 Oct 12
4 (Program) Oct 12 Nov 1
5 (Program) Nov 1 Nov 15
6 Nov 16 Nov 23
Exam schedule
Exam    Coverage Dates    Exam Date   
Quiz Pre-requisite material and 24 Aug - 1 Sep Sep 2
Midterm Aug 24 - Oct 11    Oct 14
Final Aug 24 - Dec 6 Dec 7 5:30 pm - 7:30 pm, section 1
Dec 9 7:30 am - 9:30 am, section 2

Note that the final exam is comprehensive -- it includes material from the entire semester.

Course calender:

Week Lecture Chapter Assignments
1 24 Aug 1. Introduction None
26 Aug 2. C++ review: Templates and deep copy; Up to sec 1.6 (excluding 1.3 and 1.5)
Recitation Using a debugger, header files
2 31 Aug 3. STL, containers and iterators; Sec 1.7. None
2 Sep 4. Vectors; Sec 1.8, Quiz
Recitation Compilation and makefiles.
3 7 Sep 5. FSU closed. Assignment 1 announced Sep 8
9 Sep 6. Complexity analysis; Chapter 2, up to sec 2.3
Recitation Discuss assignment 1, Performance analysis
4 14 Sep 7. Complexity analysis -- sec 2.4 - 2.7. None
16 Sep 8. FSU closed.
Recitation Lecture review, discuss assignment 1
5 21 Sep 9. Review of complexity analysis. Assignment 1 due Sep 22 (10 am)
Assignment 2 announced Sep 21
23 Sep 10. Linked lists -- Up to sec 3.2
Recitation Discuss assignment 2
6 28 Sep 11. Self-organizing lists, STL lists; sec 3.5, 3.7 None
30 Sep 12. Complexity analysis -- sec 2.8 - 2.9.
Recitation Lecture review, discuss assignment 2
7 5 Oct 13. Deques; sec 3.8 Assignment 2 due Oct 5
Assignment 3 announced Oct 5
7 Oct 14. Stacks and queues; Up to sec 4.3.
Recitation Stacks and queues in STL; sec 4.4 - 4.6, discuss assignment 3
8 12 Oct 15. Midterm review Assignment 3 due Oct 12
Assignment 4 announced Oct 12
14 Oct 16. Midterm
Recitation Lecture review, discuss assignment 4
9 19 Oct 17. Recursion; up to sec 5.8 None
21 Oct 18. Binary trees, searching, and traversal; up to sec 6.4, except sec 6.4.3.
Recitation Iterators, Discuss assignment 4
10 26 Oct 19. BST insert and delete; sec 6.5-6.6 None
28 Oct 20. AVL trees; sec 6.7 introduction and 6.7.2
Recitation Lecture review, discuss assignment 5
11 2 Nov 21. Self-adjusting trees; sec 6.8 Assignment 4 due Nov 1
Assignment 5 announced Nov 1
4 Nov 22. Heaps; sec 6.9
Recitation Lecture review, Discuss assignment 5
12 9 Nov 23. Heap initialization, page 277 - 278, and class notes. None
11 Nov Veterans day -- no class.
Recitation Lecture review, discuss assignment 6
13 16 Nov 24. Proving properties of trees, and algorithms on them, class notes. Assignment 5 due Nov 15
Assignment 6 announced Nov 16
18 Nov 25. Hashing; up to sec 10.2.1
Recitation Discuss assignment 6
14 23 Nov 26. Hashing; sec 10.2.2, sec 10.3 Assignment 6 due Nov 23
25 Nov Thanksgiving -- no class
Recitation No recitation.
15 30 Nov 27. Graphs; up to sec 8.2 None
2 Dec 28. Finals review
Recitation Lecture review, finals review
16 7 Dec 5:30 pm - 7:30 pm, Final exam (for section 1)
9 Dec 7:30 am - 9:30 am, Final exam (for section 2)

Grading criteria:

The overall grade for COP 4530 is an average of two equally weighted parts: (i) Exams and class participation, and (ii) Assignments. Exams consist of a quiz, a midterm, and a final exam. Class participation consists of answering questions correctly in class, and other positive contributions, discussed in greater detail at www.cs.fsu.edu/~asriniva/courses/cop4530/classparticipation.html. Assignments consist of six (6) programming projects.

There are 1000 total points that may be earned in the course, distributed as shown in Table 1. You must earn at least 350 exam + class participation points, and 350 assignment points, to get a course grade of C or better. Once meeting this constraint, the final grade is determined using Table 2.

    Table 1: Course Points
    Item Points/Item Item Total Total
    Class
    Participation
    75 75
    Quiz 25 25
    Midterm 150 150
    Final Exam 250 250 500
    Assignment 1, 3 50 100
    Assignment 2, 4, 5, 6 100 400 1000
    Table 2: Letter Grades
    Points Grade
    920 - 1000 A
    900 - 919 A-
    880 - 899 B+
    820 - 879 B
    800 - 819 B-
    780 - 799 C+
    720 - 779 C
    700 - 719 C-
    680 - 699 D+
    620 - 679 D
    600 - 619 D-
    0 - 599 F

NOTE: You must earn at least 350 points in both components: (i) Exams and class participation, and (ii) Assignments, to be awarded a course grade of C or better. For example, if you obtain 500 points on the assignments, but only 300 in the rest, then you will not get a B-. Instead, you will get a C-, since that is the highest grade for which you will be eligible without obtaining 350 points in each of the two components, assignments and exam+class participation.

Programming assignment Assessment
Programming assignments will be assessed using Table 3 as a guide.

The first four criteria will be assessed objectively through automated testing. A member of the instructional staff will then assess for the latter three criteria. Please note carefully the following important items:

Course policies:

Attendance Policy:

The university requires attendance in all classes, and it is also important to your learning. The attendance record may be provided to deans who request it. If your grade is just a little below the cutoff for a higher grade, your attendance will be one of the factors that we consider, in deciding whether to "bump" you up to the higher grade. Missing three or fewer lectures will be considered good attendance. In rare cases, such as medical needs or jury duty, absences may be excused with appropriate documentation. You should let me know in advance, when possible, and submit the documentation I seek. You should make up for any materials missed due to absences.

Missed exam Policy:

A missed exam will be recorded as a grade of zero. We will follow the university rules regarding missed final exams (see http://registrar.fsu.edu/dir_class/fall/exam_schedule.htm), for all the exams, including the final exam.

Late Assignment Policy:

In order to enable us to provide timely solutions to assignments, we have the following policy regarding submission of late assignments.

Grade of 'I' Policy:

The grade of 'I' will be assigned only under the following exceptional circumstances:

Professional ethics:

You will gain confidence in your ability to design and implement algorithms only when you write the code yourself. On the other hand, one does learn a lot through discussions with ones peers. In order to balance these two goals, I give below a list of things that you may, and may not, do.

Things you may not do: You should not copy code from others. This includes directly copying the files, replacing variable names in their code with different names, altering indentation, or making other modifications to others' code, and submitting it as your own. (You may also wish to note that many of the modifications that make codes look very different in a higher level language, yield lower level representations that are very close, and hence easy to detect.) Furthermore, you should take steps to ensure that others cannot copy code from you -- in particular, you should have all permissions on assignment files and directories set off for others.

Things you may do: You may discuss specific problems related to use of the computer, useful utilities, and some good programming practices, with others. For example, you may ask others about how to submit your homework, or how to use the debugger or text editor. Honor Code: Students are expected to uphold the academic honor code published in "The Florida State University Bulletin" and the "Student Handbook". Please read the provisions of the Academic Honor Code: http://www.fsu.edu/Books/Student-Handbook/codes/honor.html. Also read the section on "Honor code" below.

Plagiarism:

Plagiarism is "representing another's work or any part thereof, be it published or unpublished, as ones own. For example, plagiarism includes failure to use quotation marks or other conventional markings around material quoted from any source" (Florida State University General Bulletin 1998-1999, p. 69). Failure to document material properly, that is, to indicate that the material came from another source, is also considered a form of plagiarism. Copying someone else's program, and turning it in as if it were your own work, is also considered plagiarism.

SYLLABUS CHANGE POLICY:

This syllabus is a guide for the course and is subject to change with advanced notice.


Last modified: 10 Sep 2004