Syllabus
CSCI 2530
Algorithms and Data Structures
Sections 001 and 002
Fall 2019

Meeting times Section 001: 1:00–1:50 MWThF
Section 002: 3:00–3:50 MWThF
Meeting location Section 001: Austin 302
Section 002: Austin 302
Instructor Karl Abrahamson
Office Sci&Tech C-113
Office hours
MWF 2:00–2:50pm
Th 9:30–11:30am
or by appointment
Phone 328-9689
Email abrahamsonk@ecu.edu
Course web page www.cs.ecu.edu/~karl/2530/fall19/
My web page www.cs.ecu.edu/~karl/
Lecture notes CSCI 2530 Notes (www.cs.ecu.edu/~karl/2530/fall19/Notes/).

Contents

  1. Preamble
  2. Prerequisites
  3. Course objectives
  4. Student competencies
  5. Grading
  6. Programming assignments
  7. Attendance policy
  8. Recommendations for success
  9. Lecture schedule and reading assignments
  10. Additional information

Preamble

This class will interfere with your social life. It will cut into your leisure time. It has a high D/F/W rate. In order to pass this course, you will need to be committed to putting in the time to

  1. attend class,
  2. read the notes,
  3. do the exercises in the notes,
  4. do the assignments and submit high quality work.
All of that will take more time than you estimate. If you can not or will not put in the time to do those things, you are strongly advised to drop this course right away.

Working efficiently

The amount of time that you need to spend will depend greatly on how efficiently you work, and that will depend largely on whether you follow the instructions. I will show you how to work efficiently. It is up to you to put what I show you into practice.

In the past, many students have followed my advice and done well. Unfortunately, many other students have ignored my advice (and even their own common sense) and used software design methods that are proven time wasters. Those students have fared poorly.

Prerequisites

CSCI 1010 (Algorithmic Problem Solving) is a prerequisite and CSCI 2400 (Discrete Structures I) is a prerequisite or corequisite for CSCI 2530. You should be familiar with the basics of a programming language such as Java, C++ or C#.

IMPORTANT
This course offers more advanced material on the general topic covered in CSCI 1010, and so, according to university policy, you cannot repeat CSCI 1010 for credit after completing CSCI 2530. If you received a grade of less than C in CSCI 1010, or if you need to retake CSCI 1010 for any reason, do not take CSCI 2530 without consulting me.

Course objectives

The focus of this course is advanced computer programming techniques and algorithms, primarily those that rely on data representation schemes. The language is C++, with emphasis on the C subset. Students are not expected to have used C or C++ before. Part of this course is an introduction to C++, covering all aspects needed in this course.

This course emphasizes concrete aspects of data structures and algorithms, also called physical data structures. Data abstraction, the other side of data structures, is emphasized in CSCI 2540, although we introduce some of its most basic ideas in this course.

This course also introduces software design, development and debugging techniques. You will learn how to work more like an expert.

For many of you, the material in this course is the closest you will come to machine language, an important topic for software developers to understand. This course therefore concentrates on the C subset of C++, with only a few features of C++ used. We will not use C++ libraries such as the Standard Template Library. We will see how things are done at a level close to machine architecture without relying on others do have implemented the ideas for us.

You will come out of this course able to write working multi-module C++ programs using complex data structures. You should be able to offer arguments concerning the correctness of your programs, and be aware of algorithmic and efficiency issues. For more, see student competencies below.

Topics

The following is a partial list of topics to be covered (though not exactly in the order listed).

  1. Basics of C++. Variables, expressions and statements. Control structures. Functions. Recursion. Types and data, including structures and arrays.

  2. Pointers and memory management. Dynamic memory allocation and deallocation.

  3. Physical data structures, including linked lists, trees and hash tables.

  4. Algorithms on physical data structures, including both iterative and recursive algorithms. Correctness and efficiency of algorithms.

  5. Modeling of data by diagrams and graphs.

  6. Abstract data types.

  7. Designing, developing, understanding, testing and debugging programs and components of programs.

Student competencies

After successfully completing this course, students will have the following abilities.

Grading

Midterm exams and the final exam

There will be 5 midterm exams, on the following dates.

  1. Friday, September 6
  2. Friday, September 27
  3. Friday, October 18
  4. Friday, November 8
  5. Friday, November 22

There will be no makeups for missed midterm exams.

You can bring one prepared 8.5x11" piece of paper, written on both sides, to each midterm exam. You can write anything that you like on that paper. I will not collect it.

I will drop your lowest midterm exam grade and count the remaining 4.

The final exam dates and times are as follows.

11:00-1:30 Friday, December 6 for section 001 (1:00–1:50)
2:00-4:30 Wednesday, December 11 for section 002 (3:00–3:50)

The final exam will cover all of the material for the course. You can bring two prepared 8.5x11" pieces of paper to the final exam.

Computing grades

Grades will be computed as follows.

Grading
4 midterm exams (best 4 of 5) 36% (9% each)
A comprehensive final exam 22%
Eight programming assignments 34% total. There are a total of 3150 points for assignments, broken up as follows among the 8 assignments.
(0: 50) (1: 250) (2: 400) (3: 400) (4: 350) (5: 600) (6: 400) (7: 700)
Attendance 8%

You will start with 8 points for attendance and lose one point for each unexcused absence. On days when I do not take attendance you are assumed to be present, with two exceptions.

  1. On days when there is an exam, you are counted absent if you did not take the exam.

  2. I will return exams in class. If you do not pick up your exam, you are counted as absent.

Tentative cutoffs for grades will be as follows. These cutoffs will not be raised.

Grade cutoffs
A 93% C+ 76%
A– 90% C 72%
B+ 87% C– 68%
B 83% D+ 64%
B– 80% D 60%
    D– 56%

IMPORTANT

It is not possible to learn the material of this course effectively without actually "getting your hands dirty" and doing the programming assignments. Accordingly:

In order to pass this course, you must receive at least a 50% overall grade in the programming assignments.
This supersedes the score computed by adding grades together.

Consequence: If you do not do submit the programming assignments, you automatically receive a grade of F.

Incompletes

No incompletes will be issued in this course except for extraordinary circumstances, and even then only if you are nearly done already and have done work of acceptable quality and quantity, so that it is realistic that you can pass the course. An incomplete will not be given simply because a student could not find the time to do the course work. By registering for this course, you are committing to finding time to do the work.

Programming assignments

Writing and running programs

The programming assignments are available from the course web page.

The programming assignments for this course are probably larger than you have done before. Expect them to take time to complete. If you start on the due date, you will not be able to complete an assignment. Starting late on programming assignments is a sure way to fail this course. Start early, and plan for unexpected difficulties. If you have two weeks to do an assignment, there is a reason. Start immediately.

The first few assignments are considerably shorter than later assignments. Do not become complacent. You will need to use the first few assignments to learn how to develop, test and debug software in C++. If you do not complete the early assignments, you will find yourself in a hole that is difficult to get out of.

Each assignment is intended to exercise a particular set of abilities. Follow the instructions. If you ignore the instructions, then you will not learn the targeted abilities, and you will find yourself in a hole.

I will compile and run programs using the g++ compiler on Linux. I will use the following flags when compiling programs:

     -g -Wall -W -Wshadow -O
I strongly urge you to test your programs using the same compiler with the same flags. Students who do inadequate testing can expect poor grades.

Never make a modification, no matter how trivial, without testing your work before submitting it.

Grading of submissions

Grading of submissions is explained in the notes. Read that page about how programs will be graded so that you are aware of expectations.

An important point concerns programs that do not compile without fatal errors. I expect you to write working computer programs. I expect you to test your programs on several inputs. If your program does not compile, I know that you have not tested it even once. Accordingly,

IMPORTANT
A program that does not compile without fatal errors receives a grade of 0, regardless of how much work you have put into it or how close it is to working.

Do not expect me to fix your software.

Plagiarism

Plagiarism of programming assignments is a serious problem. Never submit someone else's work as your own.

Plagiarism is much more than putting your name on someone else's completed work. Do not get a copy of a singl function definition from someone else and insert it into your program. You are expected to do all of your own work. If your submission is 50% your work and 50% someone else's work, then your work is considered to be plagiarized. That includes all work that you have got over the internet, whether you found it yourself or someone else helped you with it.

An exception for this course is material that I explicitly say you are allowed to copy and put into your submission. You are allowed to copy any text that you like from programming assignments into your programs. (Please make sure that what you copy makes sense in the context of your program.) But the exception does not extend to material written by anyone else, including other students, even if you have their permission.

IMPORTANT
If I believe that you have submitted plagiarized work for an assignment that is worth n points, you will receive a grade of −n/2 points on that assignment. For example, if you submit a plagiarized version of an assignment that is worth 500 points, you will get a grade of −250 for that assignment. Yes, your points will be negative.

If you share your work with another student, expect that student to submit your work with his or her name on it. That has happened many times. Both of you will receive a score of −n/2.

To avoid problems with people stealing your work, do not recycle printouts of your program code in a place whether other students can pick them up.

If I say that your assignment is plagiarized and you do not agree, you are welcome to discuss it with me to explain the circumstances. In the end, my determination will be based on the evidence. Pleading for mercy will not change my determination. If you tell me that asking other people to do your work for you is "just the way I do things,", then I will say that giving a negative score for copied assignments is just the way I do things.

What kind of help can I accept?

You can feel free to get help from anyone on the following issues concerning programming assignments.

  1. Understanding the problem description.
  2. Using the system software and hardware.
  3. Understanding the source of compile errors.
  4. Understanding broad issues of program or algorithm design for the problem.

You can copy anything from the assignment into your program.

But, other than from the instructor, it is considered plagiarism to obtain assistance for the following.

  1. Writing your program. This means any discussion about writing code or specifying algorithmic details.

  2. Fixing your program beyond syntax errors except for having someone ask you questions about your code. You must figure out how to change your code when errors are discovered (or talk to the instructor).

Attendance policy

You are expected to attend class. You are responsible for announcements and assignments given in class. If you miss a class, it is up to you to obtain notes and any other information that was provided in the class. Excuses that you did not know about something because you did not come to class and did not obtain the information will not count for anything at all.

Those who do not attend class can count on doing poorly in this course. If you choose not to attend class, then you must live with the consequences of that choice, however bad they are.

Even if you believe you already know what we are covering, come to class. If you don't, you will end up missing material that you did not know we were going to cover and you will fall behind.

If you are having trouble understanding the lectures, do not stop coming to class. Come to office hours or ask for help tutors or from teaching assistants in the lab (Austin 208/209). Get help as early as possible.

Recommendations for success

  1. Resolve to work hard and get a good grade in this class.

  2. Attend class. Arrive on time.

  3. Do not bring distractions to class. If you read your email, listen to music, send and receive text messages or engage in other distracting activities during class, you will get very little out of the class. That will show up in your grade.

  4. Ask questions in class. If you do not understand something, ask a question about it. Ask early.

  5. Ask questions outside of class. If you have a question about an assignment, submit what you have done so far as a question, as explained in the assignment, and send me an email with your question. Ask questions early. Do not wait until the last minute.

    Please use a subject indicating that you are asking a question for CSCI 2530, and always include your name in your email. A reasonable subject for a question about assignment 3 is

    CSCI 2530 question about assignment 3
    Please send email to the address listed on the first page of this syllabus. Do not expect immediate answers. Give yourself time to get answers.

  6. Schedule time to work outside of class.

  7. Do not allow yourself to fall behind. Work on the assignments early. Do not wait until just before the deadline. If you start to fall behind, work right away to catch up. If you are falling behind because you do not understand something, ask for help. Do not just give up!

  8. Read the lecture notes twice. Take a break (a whole day or longer) in between. Work the exercises in the lecture notes. Later in the term, go back over notes that you looked at earlier in the term. You will learn much more that way.

  9. Get adequate sleep. Sleep is important both before and after you learn new concepts. Sleep before enables you to concentrate and think clearly, and sleep afterwards is critical for moving new information into permanent memory.

Lecture schedule and reading assignments

See the notes for a lecture schedule. Under each date you will find links to reading assignments for the material for that day. The schedule is tentative and might need to be adjusted, based on how many questions there are and on how quickly we are able to cover topics. Some of the days have more material assigned than others, and it is expected that there will be some spillover from one day to neighboring days.

Some students will do best by reading the notes before the lecture. Other students will do best by reading the notes after the lecture. Whichever you choose, read the notes.

Additional information

For information about

please see the auxiliary information at http://www.cs.ecu.edu/~karl/2530/fall19/syllabus-aux.html.