This syllabus was submitted to the Rhodes College Office of Academic Affairs by the course instructor. Uploaded by Archives RSA Josephine Hill.
• 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.
• You will learn to use the techniques discussed in this course to solve commonly encountered
computer science problems efficiently. This course will also teach you to analyze the efficiency
your program in a mathematically rigorous manner. Material you learn in this course is critical to
your becoming a good software developer later.
CS 241, Fall 2010
2 of 5
• This course will focus on algorithms, analysis, and the use of basic and advanced data structures.
Among the specific data structures covered are strings, stacks, records, linked lists, trees and
graphs. Recursion will also be covered. Sequential and random files, hashing and indexed
sequential access methods for files will be discussed. Finally, some standard computer science
algorithms (sorting and searching) will be discussed.
• You are free to develop the code for the assignments on your own computer. However, keep in
mind that the source code that you submit for the homework assignments must run successfully
on the computers in the on-campus lab.
• This IS NOT a course in object-oriented programming!
o This is a course about efficiency of programs and programming. In this course, we will
pursue various meanings of "efficient". It is efficient to:
• minimize the run time of code, especially code that is destined for re-use.
• minimize the memory and storage needs of code, recognizing that there may be
a trade-off between speed and memory requirements.
• spend less time writing a program of equal quality. In fact, it is even more
efficient to spend the same time writing a program of higher quality.
• re-use code, instead of re-writing code.
• select only the linguistic features you need without having to use costly extra
features you do not need.