Home
Syllabus
Schedule
Labs
Projects
Resources

Syllabus

Instructor

Name Office Phone Email Sections Office Hours
Xiannong Meng Dana 212 570-577-1214 xmeng 01, L62 Please check Professor Meng's schedule
Edward Talmage Dana 329 570-577-1518 elt006 02, L61 MWF 3-4PM, Th 10AM-12PM, 1-3PM

(all emails are at bucknell.edu)

Course Catalog Description

Introduction to data structures and algorithms using an object-oriented approach. Topics include software-engineering principles, object-oriented programming, recursion, basic data structures, algorithm analysis, and team programming. Prerequisite: CSCI 203 or permission of the instructor. Corequisite: MATH 201 or equivalent.

Course Outcomes

  1. Students will be able to explain and use fundamental data structures, data types, and programming techniques; (EAC 1, 6) (CAC 1)
  2. Students will be able to explain and use introductory algorithm analysis techniques; (EAC 1, 6) (CAC 1)
  3. Students will be able to design, implement, and test programs for problems using algorithms and data structures. (EAC 1, 6) (CAC 2)

Textbook

The course textbook is Data Structures and Algorithms Using Python by Rance Necaise, Wiley 2011

The textbook is not required for the course. We will have some copies on reserve for students at the library.

Expectations

Students are expected to actively participate in the learning. Attending class is an important part of this, but just showing up does not constitute participation. In class, you should actively participate in discussion of course topics and related content. You should regularly ask and answer questions, both of the professor and of other students or the class as a whole.

Students are expected to finish homework, labs, and projects on time.

Students are expected to pursue information on their own when there are questions or issues. Students are encouraged to use help whenever is needed. The Teaching & Learning Center holds help sessions and students are encouraged to come to instructors' office hours.

Courses at Bucknell that receive one unit of academic credit have a minimum expectation of 12 hours per week of student academic engagement. (See this page for details.) Student academic engagement includes both the hours of direct faculty instruction (or its equivalent) and the hours spent on out of class student work. This course meets five hours a week (classroom and lab) so you should expect to spend at least seven hours a week working on it outside of class.

Course Description

The following are the major topics to be covered in the course.

Standard Data Structures A data structure is a particular way of organizing and manipulating data (for instance, Python's list introduced in CSCI 203 is an example of a data structure). Smart choice of data structures can dramatically speed up program execution (and poor choice of data structures may render a program so slow that it becomes unusable). We are going to learn organization and proper use of classical data structures (stack, queue, array, linked list, tree).

Data Abstraction Throughout the course, we will be familiarizing ourselves with a very powerful notion of separating abstract properties of data types from their concrete implementations in Python. We will learn to view complex programs as combinations of individual pieces and reason about the behavior of those pieces independently of their actual implementation. This will ultimately help you develop more versatile software that is easy to update and reuse.

Algorithms and Algorithm Analysis Programs are often judged by how fast they run and how effectively they utilize the available memory space. Interestingly, how fast one program runs compared to another program can be established by looking at their underlying algorithms in theory only (without bothering with the actual implementation, or characteristics of a particular computer on which the programs are run). We will study the way to describe the efficiency of algorithms and evaluate various approaches to implementing data structures and algorithms. This will allows us to make an intelligent choice and alter of a data structure suitable for a particular program.

Advanced Python Programming This course builds on the foundation established in CSCI 203 and provides you with further programming experience in Python. You will be implementing the abstract data types that we discuss, and algorithms involving them, and utilize object-oriented programming concepts (such as instance variables, methods, constructors, inheritance, and overriding).

Locations for Course Information

The course uses various sites for contents and management. Please visit these sites often, e.g., daily.

Grading

The course grade consists of the following components.


Participation/Professionalism 8%
Projects 16%
HW 10%
Labs 16%
Mid-term Exams     30% (15% each)
Final Exam 20%

Total 100%

Professionalism and Engagement

Professionalism is defined by many criteria, most of which are common sense and common courtesy rules. As a general guideline, behave as you would in your dream workplace. To encourage a professional, respectful atmosphere that is conducive to maximal learning in the classroom:

Projects

There will be several programming projects during the semester. Each project is broken into phases as appropriate. Each phase is due by 11:55 P.M. on the due date. You will submit projects to the course Moodle site.

Late projects will receive a 10% penalty per day overdue. You get three free late days to use on projects as you see fit. You do not have to inform the instructor when you are using a late day, when your work comes in late, it will be assumed you are using a late day.

Projects are individual work! While discussion is encouraged, giving or receiving code segments is not allowed. You may not copy code for the ADTs off the internet or from sources outside of the course.

Homework

Some weeks there will be a short homework. No late homework will be accepted unless previous arrangements have been made.

You may not copy code for the ADTs off the internet or from sources outside of the course. You may communicate with other people about the homework so that you understand it. You may NOT show your code to other people outside the group. (Not on email, text, yikyak, twitter, github, paper, public space, the web, etc.)

Labs

We will have a total of 12 labs. Typical lab assignment should be completed within four hours, some may be a bit shorter, others may be a bit longer. The labs are due on Moodle 11:55 p.m. on the Wednesday after the lab is assigned.

We will drop the one lowest grade lab from your lab grades.

There will be no assigned lab during the week of mid-term exams. However, students are required to come to the lab hours to work on their projects or ask questions on any course topics.

Lab attendance is mandatory. If you do not attend a lab, your maximum grade for that lab assignment is 80%.

Lab are individual work. While discussions are encouraged, each student must work on their own assignment. You may not copy code for the ADTs off the internet or from sources outside of the course. You may SHOW your code to other people in CSCI 204. Do all of the typing yourself. Do not make a copy of your code available to other people. (Not on email, text, yikyak, twitter, github, paper, public space, the web, etc.)

Exams

There will be two mid-term exams and one final exam. The dates for the mid-term exams are published in the course schedule. The final exam is at the time specified by the university. The mid-term exams are cumulative. The final exam is comprehensive.

If you need special accommodation for exams, you must notify the instructor at least one week before the exam with sufficient evidence, e.g., letter from the Office of Accessibility Resources.


Last modified: Tue Jan 07 11:20:55 EST 2020