Data structures is an essential area of study for computer scientists and for anyone who will ever undertake any serious programming task. This course deals with the fundamentals of organizing and manipulating data efficiently using clean conceptual models. Students study many of the important conceptual data types, their realization through implementation, and analysis of their efficiency. Implementations in this course are carried out in the Java programming language, but the principles are more generally applicable to most modern programming environments.
Students should have at least one semester of
programming experience (two semesters is even better) with either Java or C++.
An overview of the Java essentials will be provided at the beginning of the
course, but students with less Java experience are expected to familiarize
themselves appropriately with Java during the first two weeks. This course is a
prerequisite for all more advanced programming courses.
The lectures will provide an overview of Java, the tools
for analyzing data structures and algorithms, and a number of the most common
data structures. Topics include:
Required text:
Goodrich and Tamassia. Data Structures and Algorithms in
Java, 4th edition. John Wiley and Sons,
Inc. 2004. ISBN 0-471-46983-1.
Optional Java texts:
Arnold, Gosling, and Holmes. The Java Programming
Language, 3rd edition. Addison-Wesley.
2000. ISBN 0201704331.
Flanagan.
Java in a Nutshell. O'Reillly, 4th
edition, 2002. ISBN 0596002831
The tentative grading break-down (subject to change) is as
follows:
All assignments will be turned in electronically and are due
by the date and time specified on the assignment. Assignments may be turned in
up to 5 days late, with a penalty of 10% for each day late. No credit will be
given after 5 days. Exceptions will be made only for notes from the dean's
office or a physician's office.
The
strength of the university depends on academic and personal integrity. In your
studies, you must be honest and truthful. Ethical violations include cheating
on exams, plagiarism, reuse of assignments, improper use of the Internet and
electronic devices, unauthorized collaboration, alteration of graded
assignments, forgery and falsification, lying, facilitating academic
dishonesty, and unfair competition.
Academic
honesty is required in all work you submit to be graded. Except where the
instructor specifies group work, you must solve all homework and programming
assignments without the help of others. For example, you must not look at any
other solutions (including program code) to your homework problems or similar
problems. However, you may discuss assignment specifications with others to be
sure you understand what is required by the assignment.
If your instructor permits using fragments of source code
from outside sources, such as your textbook or on-line resources, you must
properly cite the source. Not citing it constitutes plagiarism. Similarly, your
group projects must list everyone who participated.
Falsifying
program output of results is prohibited.
Your
instructor is free to override parts of this policy for particular assignments.
To protect yourself: (1) Ask the instructor if you are not sure what is
permissible. (2) Seek help from the instructor or TA, as you are always
encouraged to do, rather than from other students. (3) Cite any questionable
sources of help you may have received.
Students
who cheat will suffer a serious course grade penalty in addition to being
reported to university officials. You must abide by JHU's Ethics Code:
report any violations you witness to the instructor. You may consult the
associate dean of students and/or the chairman of the Ethics Board beforehand.
For more information, see the guide on Academic Ethics for Undergraduates
(http://www.advising.jhu.edu/ethics.html)
and the Ethics Board web site (http://ethics.jhu.edu).
All of the above apply to this class. For exams, the line
is pretty clear: Do not communicate with anyone else or use disallowed
matierials during the exams. For
programming assignments, you may find the line more fuzzy. It's okay to discuss
ideas and concepts with other people, but not to share code. If the programming assignment is designated as a team
project, you may only share code with the other members of your designated
team. To ensure this, do not look at anyone else's code or communicate direct examples from your own code. If you
want to help someone debug a programming problem, do not do it by showing them
how your code looks. Avoid stepping through someone's code with them
line-by-line, because the tendency will be to fix problems by making the code
exactly like yours, or to incorporate identical fixes into your own code. Learn
together by discussing ideas of how things should function in various cases.
All cases of confirmed plagiarism will be reported
to the Student Ethics Board. In addition to receiving 0 credit for the
assignment in question, you could receive an F for the course and even be
expelled from the university. In addition to human review, we apply
sophisticated software to find cases of plagiarism among students of the
current semester as well as those of previous semesters. So don't do it.
This syllabus is available on the world-wide web at:
http://www.cs.jhu.edu/~hager/Teaching/cs226/syllabus.html
March 8, 2005