Department of Computer Science

CSCI 311:  Algorithms and Data Structures


Registration Information
Term
 Class 
 Number 
 

 Section 
 

 Act 
 

 Days 
 

 Time 
 

 Room 
 
 2011Sp  3336  CSCI 311-02   ACT  T  0500-0650   OCNL 251 


 CSCI 311-01   LEC  TR  0330-0445   OCNL 254 
 2010Fa  3373  CSCI 311-02   ACT  T  0500-0650   OCNL 241 


 CSCI 311-01   LEC  TR  0330-0445   OCNL 254 
 2010Sp  3254  CSCI 311-02   ACT  T  0500-0650   OCNL 251 


 CSCI 311-01   LEC  TR  0330-0445   OCNL 254 
 2009Fa  3301  CSCI 311-02   ACT  T  0500-0650   OCNL 251 


 CSCI 311-01   LEC  TR  0330-0445   OCNL 254 
 


Prerequisites
CSCI 211(f.k.a. 112), Programming and Algorithms II, with a grade of C- or higher.
MATH 217 recommended.

Current Catalog Description
(4.0 credit units)  This course focuses on object-oriented methodologies in designing and implementing a variety of data structures and algorithms. Coverage includes recursion, trees, search structures, hashing, heaps, sorting algorithms, and graph algorithms. Data structure and algorithm combinations will be studied and analyzed along with their relative merits using both mathematical and empirical measurements. The course includes a number of large programming assignments focusing on object-oriented software engineering and algorithm development. Students will be required to design, implement, test, and analyze their programs in at least one object-oriented language. 2.0 hours activity, 3.0 hours lecture.



Textbook

Click for textbook website ... Algorithms  in a Nutshell, 1/e
G.T. Heineman, G. Pollice, and S. Selkow, 2008.
O’Reilly Media, Inc., Sebastopol, California
ISBN: 978-0596516246
Note: This is a recommended textbook since it is also available from
     Safari books online (some restricted access) for those who do not
     mind reading online books. The source code (ADK) in the text
     is also available online:
          * C++ Doxygen or directory listing
          * Java API or directory listing


Additional Requirements

Students officially registered for the course will have their own Chico State Connection (CSC Portal) account.  Students are responsible for regularly checking their BB Vista account (automatically generated through the CSC Portal) to access an up-to-date on-line calendar of events, current scores, on-line quizzes, etc.
 
Clickers (Student Response Systems) are required in this class; students are required to have their own Clicker (or subscribe to ResponseWare to use their iPhone, iPod Touch, or Blackberry as a Clicker) by the end of the second week of classes to guarantee enrollment in class. Students who do not have a Clicker at the end of the second week of classes may be disenrolled from the course. Details of Clicker use will be covered during the first week of classes.

University information on Clickers is available from here ...

For your reference, check out Dr. J’s Clicker Reference Page, and Dr. J’s Clicker Sessions Page ...
 
Eclipse IDEEclipse IDE for C/C++ Developers

It is recommended that students learn and use the Eclipse IDE for C/C++ developers. The Eclipse IDE is an industry-standard, feature-rich, open development platform; it is the IDE used in the ACM Pacific Northwest Regional Programming Contest. Other recommended IDEs are:
  • Code::Blocks - free, open source, cross platform, free C++ IDE, designed to be very extensible and fully configurable. 
  • Dev-C++ - free, uses a Mingw port of GCC (GNU Compiler Collection) as it’s compiler; it can also be used in combination with Cygwin or any other GCC-based compiler.

For additional information on IDEs, check out Dr. J’s C++ Programming Resources page and Wikipedia’s Comparison of C/C++ IDEs ...
 
 
Unix rules!!!  
All programming assignments must be designed to run on the ECC Unix servers. If you are not familiar with any flavor of Unix, or if you need to review some fundamentals of Unix, these concepts (pertaining to the anticipated software development process for programming assignments in this class) will be discussed in the first few laboratory sessions of this course.

Information on ECC Unix servers and Computer Science facilities is available online at http://csci.ecst.csuchico.edu/facilities ... 


 


UVa Online Judge Students are expected to create and maintain a UVa Online Judge account for use in ACM ICPC-style programming contests in the lab.

Note: This is a third course on object-oriented programming that focuses on data structures and the design and analysis of algorithms. This class is not about studying some programming language. It is expected that the student is familiar with a programming language like C++ or Java, and that the student is capable of improving their programming skills.

Students will also be exposed to ACM ICPC-style programming contests in the lab.
Participation in these activities is required of all students.



Course Objectives
The objectives of this course are to:
  1. help students learn structured problem solving, object-oriented programming techniques, and important data structures;
  2. promote the study/investigation of various data structure and algorithm combinations by analyzing their relative advantages and disadvantages using both mathematical and empirical measurements; and
  3. help students learn tools to develop correct, efficient, and well-structured (logically organized and separately compilable) programs - thereby building a strong foundation for developing large software systems.


Course Outcomes
Upon successful completion of this course, the student shall be able to:
  1. correctly apply techniques of structured problem solving and object-oriented programming, in conjunction with the design and use of important data structures;
  2. interpret and analyze the relative advantages and disadvantages of various data structure and algorithm combinations by using both mathematical and empirical measurements; and
  3. appropriately use tools to develop correct, efficient, and well-structured (logically organized and separately compilable) programs - thereby exhibiting a strong foundation for developing large software systems.



Grade Evaluation
This course is designed to give students an equal opportunity of exposure to both Theory and Practice. Students are expected to demonstrate proficiency on both the theoretical and practical aspects of this course.

Theoretical Component  (50%)
 
   30%    Lecture Participation (recorded via Clickers)   
   30%    Midterm Exam   
   40%    Final Exam (see official Final Exam Schedule)   

Practical Component  (50%)
 
   30%    Lab Participation (via ACM ICPC-like sessions and Lab work)   
   70%    Programming Assignments
  
 

Students are required to earn a C (70%) or better in both the Theoretical and the Practical components; otherwise, the minimum of the scores of the two components will be used to calculate the student’s final grade.


Final Grades
Final grades shall be expressed as a percentage of the maximum possible score of all evaluated materials. Letter grades will be given according to the following scheme:

  Real Interval  
 

  Letter Grade  
 

  University Definition  
 
[96,100]   Superior Work
[90, 96) A-
[87, 90) B+   Very Good Work
[83, 87)
[80, 83) B-
[77, 80) C+   Adequate Work
[73, 77)
[70, 73) C-
[66, 70) D+   Minimally Acceptable Work  
[60, 66)
[ 0, 60)   Unacceptable Work
 


Note:  It is Dr. J’s policy not to assign a final grade of D or D+ to graduate students. Hence,
graduate students with a class standing less than C- (70%) earn a final grade of F.



General Policies
Dr. J has some general policies (see http://www.ecst.csuchico.edu/~juliano/Teaching/Policies.html) that apply to all courses he teaches. Students are expected to read and understand these policies upon registration of this course. 

Programming Assignments
Dr. J uses a software client model in this course. In this setup, programming assignments are treated as job requests from a client who does not know anything about programming (but is the main contact who understands the requirements of the final product). Hence, Dr. J’s office hours will be treated as informal meetings between client and programmer - any programming language specific questions will not be entertained since it is the programmer’s responsibility to figure these problems out.

Please review Dr. J’s Coding Standards for Programming Assignments, available at: http://www.ecst.csuchico.edu/~juliano/Teaching/Coding%20Standards.html