Sonoma State University | ||
Algorithm Analysis
|
||
Instructor: Henry M. Walker
Lecturer, Sonoma State University |
Although CS 415 has been well developed for several years, the CS faculty are discussing a significant, long-term curricular change regarding SSU's Upper Division GE Area B Requirement.
Historically, CS Majors could satisfy this requirement by taking CS 454, Theory of Computation, and CS 454 will continue in this role for the next several semesters.
At some time in the future (but not Spring 2025), CS 415, Algorithm Analysis, will allow students to satisfy SSU's Upper Division GE Area B Requirement.
During an anticipated time of transition:
For future semesters, students should check with the CS faculty regarding which course(s) (CS 415 and/or CS 454) will satisfy SSU's Upper Division GE Area B Requirement.
Following SSU's Upper Division GE Area B Requirement, this Signature Project has two parts: a computer-science-specific Report and a Self Reflection
The description and instructions for the content-specific elements of a Signature Project Report are organized into several sections.
As described below, this Project has a substantial overall scope. However, to help make this work manageable, students will work in groups of four or five, and groups will meet for discussion and feedback. Specific assignments for individual student work are posted on Canvas.
At a high level, course work in computer science at SSU studies a wide range of topics regarding the design, implementation, efficiency, and testing of algorithms. Although many questions arise naturally during this work, the Signature Project focuses on several of the following, with specific assignments described in the small-group and individual assignments specified on Canvas.
"Practice" Data versus "Real" Data: In many classes, students gain practice with algorithms and problem-solving approaches using simplified data and structures. What changes must be made when problems focus on "Real" Data, and how might those changes impact both program structure and efficiency?
Code Clarity versus Efficiency: Software development principles often highlight the importance of code clarity and readability to aid debugging and program maintenance. Although such principles and approaches can aid program development and maintenance, to what extent do these extra procedure calls impact efficiency.
Stability of Sorting Algorithms: A sorting algorithm is said to be stable, if two data elements with the same key appear in the sorted array in the same order as in the original array. In practice, three categories of sorting algorithms can be identified:
How might tests be developed to determine the stability of a sorting algorithm, how might implementations or algorithms be categorized, and how could implementations in category 2 be fixed?
In order for students to gather sufficient data related to the motivating questions, students will be organized into teams of four or five, and each student will be assigned several distinct project components, involving writing/modifying, testing, and running code. In addition, each student will write a report describing elements of programs and analyzing test runs. With this work completed (in a reasonably complete draft form), team members will meet to discuss their own findings, to give feedback to others, and to discuss potential answers to the motivating questions.
The following schedule identifies due dates for this overall work. Note there are substantial point penalties for missing any of these due dates, and work submitted after 1:00 pm Pacific Time on a specified date will be considered late. (Since email is involved, time stamps will be used for identifying work submitted late.)
If you do not want to share your email with others in the class, contact the instructor (before Thursday, April 24) about an acceptable alternative.
Individual student work requires completion of three components. Students should consult the course page on Canvas to determine which track(s) must be completed individually within a team.
The following table summarizes the components and tracks within a component, and indicates which motivating question(s) the components help address.
Component | Description | Motivating Question(s) Addressed | Checklist of Required Work |
---|---|---|---|
1 |
When transitioning from an array of integers (or other
primitive data type) to more complex data elements, it is
natural to declare an object with multiple data fields. For
this project, a
At the level of coding, the non-numeric fields within
a
When ordering an array of
For these orderings equality and ordering are handled by
different methods within the
Although constructors and public methods for variations in
the
Note: Behind the scenes, both
programs Work for this project component:
Note: Be sure your completed code for this project component is correct, as it will be used in other components. | Initial part, Motivating Question 1 |
All students should complete and email the following to group
members (and the instructor) on Tuesday, April 29:
For each student, the final report should contain sections for the following:
|
2 |
Program sortAlgsForInts.c
provides C code for several sorting algorithms applied to
integers, and for testing those algorithms. This component of
the Signature Project explores what changes might be needed to
translate these algorithms to arrays of objects of
the
Program sortAlgsForPersons.cpp
contains a framework for timing versions of the Insertion Sort
and two other sorting algorithms for random
When you have completed your assigned work on the sorting algorithms (just handling one of case A, B, C, or D, as specified on Canvas), follow these instructions.
| Motivating Question 1 (continued) and Motivating Question 2 (regarding code design for clarity) |
Based on the assignment posted on Canvas, (A, B, C or D), each
student should complete and email the following to group members
(and the instructor) by Tuesday, April 29:
For each student, the final report should contain a section for the following:
|
3 |
This component examines the relative efficiency of recursive
versus iterative implementations of code by comparing two
versions of the same sorting algorithm. For this component, all
students will start by considering
program sortAlgsForInts.c,
which provides C code for several sorting algorithms applied to
integers, and for testing those algorithms. Further,
program sortAlgsForPersons.cpp
contains a framework for timing versions of the Insertion Sort
and two other sorting algorithms for random
When you have completed your assigned work on the sorting algorithms (just handling one of case A, B, or C, as specified on Canvas), follow these instructions.
| Motivating Question 3 regarding efficiency of recursive versus iteratie implementations |
Based on the assignment posted on Canvas, (A, B, or C), each
student should complete and email the following to group members
(and the instructor) on Tuesday, April 29:
For each student, the final report should contain a section for the following:
|
4 |
As introduced in component 2,
program sortAlgsForPersons.cpp
runs versions of three sorting algorithms, Selection Sort,
Insertion Sort, and Merge Sort for several For this Project component, check the Project page on Canvas to determine which sorting algorithm you should utilize and whether you should consider sorting by name or by location. Your assigned sorting algorithm utilizes the following letter code:
| Motivating Question 4 | Based on the assignment posted on
Canvas, (A, B, or C), each student should complete and email the
following to group members (and the instructor) on Tuesday, April
29:
In class on Tuesday, April 29, each student should be able to discuss the following:
For each student, the final report should contain a section for the following:
|
Overall, the final Compuer-Science-Specific Report needs to contain two types of material:
In principle, these answers may be organized in whatever way each student finds appropriate, although an introductory section (likely just a couple paragraphs) should identify the overall subject of the Report and indicate how the rest of the report is structured.
In practice, much technical writing is organized into sections, as follows:
Since this type of organization may be new to [some?][many?] CS 415 students, the following two outlines are presented as two formats that might be considered for the Report, although other approaches are fine as long as the organization is included as part of the Introduction.
Section 1: Introduction
Section 2: Component 1: Choose a Title
Section 3: Component 2: Choose a Title
Section 4: Component 3: Choose a Title
Section 5: Component 4: Choose a Title
Section 6: Conclusions regarding the Motivating Questions |
Section 1: Introduction
Section 2: "Practice" Data versus "Real" Data
Section 3: Code Clarity versus Efficiency
Section 4: Iteration versus Recursion
Section 5: Stability of Sorting Algorithms |
Summary: Write a self reflection that connects work done in this course with other course work in computer science and with the application and/or use of computing in contemporary life.
Due Date (e-mail Before Class): Thursday, May 15
Target Audience: This paper may be shared with the SSU General Education Committee, the CS faculty, and some SSU administrators. As the SSU GE Committee and SSU administrators include people from a variety of disciplines, one should not assume readers will have substantial background in computing. (Pending instruction to the contrary from the SSU Committee or CS faculty, it is not intended that this paper will be distributed to students.)
Assignment Details: Since this course has been designated to meet SSU's Upper Division GE Area B: Scientific Inquiry and Quantitative Reasoning, including a Signature Assignment with a self reflection, this course requires that you write about what you have learned from this course, and how it carries over into your broader studies and experiences at SSU and beyond. To meet this requirement, please include answers to the following:
Note: You should devote at least one paragraph (each with at least 6 sentences) addressing each question, yielding at least a full page,
created September 10, 2024 revised October-November, 2024 refined April, 2025 |
![]() ![]() |
For more information, please contact Henry M. Walker at walker@cs.grinnell.edu. |
![]() |
Copyright © 2011-2025
by Henry M. Walker.
|