Calendar


Search
Contact Info

UR Home PageDouglas C. Szajda


Home
Research
Current Projects
Security Issues
Spatial Location
Cycle Synch.
Past Projects
Isotach
Spectral Multiplicity

Teaching
Current Courses
Elementary Prog.
Algorithms
Systems Seminar
Past Courses
Spring 2007
Algorithms
Calculus I
Fall 2006
Computer Security
Calculus II
Spring 2006
Networks
Core 102
Fall 2005
Core 101
Calculus I
Spring 2005
Algorithms
Fall 2004
Algorithms
Computer Security
Fall 2003
Intro. to Computing
Algorithms
Spring 2003
Algorithms
Networks
Wireless Networks
Fall 2002
Security
Intro. to Computing
Spring 2002
Networks
Intro. to Computing
Fall 2001
Intro. to Computing
Math&CS Home
Math&CS Colloquiua

Home | Lecture Notes | Homework | Useful Links

 

CMSC 315 Class Web Page (Spring 2008)




Any sufficiently advanced technology is indistinguishable from magic - Arthur C. Clarke




    General Course Information


  • Instructor: Doug Szajda, dszajda@richmond.edu, 219 Jepson Hall, (804)-287-6671 (campus ext. 6671).

  • Meeting Times:
    • Lecture: MWF 10:25-11:15am in Jepson 103.

  • Required Text:
    • Algorithm Design: Foundations, Analysis, and Internet Examples by M. Goodrich and R. Tamassia.

  • Office Hours: MWF 9:25-10:25am. Other days and times by appointment.

    You are welcome to drop by my office at any time, but be aware that there will be occasions on which I will be unable to see students. Also, though I usually keep my office door open during office hours, at other times I may keep my door closed for either noise or climate control purposes. You should be sure to knock before concluding that I am not in my office!
  • Course Summary: This is a 4 credit course on computer algorithms. We will discuss and participate in the design and analysis of algorithms and their associated data structures. This is among other things a course in advanced problem solving. Algorithms will be motivated by examples from several application domains, including (but not limited to) operating systems, network coding, security, bioinformatics, and computational geometry. Specific topics will not be revealed in advance, but instead will be revealed at the time they are covered so that students gain a true problem solving experience. (In English: If you read about these topics beforehand, then you're not really solving the problem but instead just parroting the solution).
  • Pre-requisites: The pre-requisite for this course is CMSC 222 (Discrete Structures for Computing). In addition, a comfort with mathematical reasoning and the Java programming language are essential. I expect that you are familiar with the following data structures and concepts covered in the data structures and discrete mathematics courses.
        Data Structures
      • stacks
      • linked lists, doubly linked lists
      • dictionaries and hash tables
      • trees, including binary trees, search trees, and various balanced trees
      • heaps
      • merge sort, heap sort, insertion sort
        Mathematics and Proof Techniques
      • basic probability (random variables, expected value, variance, conditional probability)
      • matrices and basic matrix operations (addition, multiplication)
      • induction (know it well!)
      • proofs by contradiction and proofs by contraposition
      • summation notation, arithmetic and geometric series
    Most of these topics are covered in Chapters 1-3 and parts of Chapter 4 in the text. Though we will use two lectures early in the semester to review some of the important concepts from this material, this will merely be review. I thus recommend that you take the time to (re)familiarize yourself with any of these concepts with which you are not comfortable.
  • Class Formats: I use two basic class formats for this course. The first is expository: I present material from either PowerPoint slides (which will be posted on the web page prior to lecture) or at the blackboard. The second involves problem solving. Specifically, I will pose a problem (perhaps more than one), and as a class we will develop and analyze potential solutions. Some of these problems will have relatively straightforward solutions, some will have partial solutions, and some will be research problems that have no known solution (or solutions that are unsatisfactory at present). You won't know which are which when we start the problems. (In a real world situation, you might very well find yourself in such a situation.)


  • Attendance Policy:

    Regular attendance for the entire class time is expected! If you should miss a class due to illness, you are responsible for obtaining class notes! (That is, I will not give you a private encore of the lecture).


  • Labs:

    There is no formal laboratory component to this course. Instead I will hold a special office hour each week for the exclusive use of CS 315 students.
  • Grades:

    Grade Component Date Percent of Grade
    Exam 1 distributed February 15, due February 22 15%
    Exam 2 distributed March 28, due April 4 15%
    Quiz Avg. N/A 15%
    Programming Assignments Avg. N/A 20%
    Final Programming Project due April 25 15%
    Final Examination distributed April 25, due May 2 20%




  • My Grading Philosophy: When it comes to the final course grade, I am merely the scorekeeper. I feed the value of each component of your grade into a computer program, and it gives me the final average that determines your course grade. If you have turned in (on time), say, three of five programming projects, and done them well, my grading program will still give you a programming project average of zero because you failed to turn in two projects. I'm not saying this to intimidate you, but to be clear that there are consequences for failing to complete assignments, and you should be aware of this up front.

  • My "Managerial" Philosophy Some professors will chase you around reminding you that you have failed to turn in an assignment or asking why you've missed class. This is not my style. I treat you as the responsible adults that you are. If you perform poorly on an exam, I expect that you will come to my office hours (or make an appointment for another time) to discuss any questions you may have on the material. If you are having problems with a programming assignment, I expect that you will bring these problems to my attention far enough in advance of the deadline so that you have time to absorb whatever advice or hints I give, implement them, and still turn the project in on time. And it is not my responsibility to be available for the entire afternoon before a project is due because you waited until the last minute to work out the kinks. So you are aware of this up front, MOST of the time spent on your projects will be devoted to working out the kinks! It's just the nature of the beast.

    Also, I apologize to the 99% of you who are responsible enough to know these things and all of the similar rules on this page without me having to put them down in writing. Unfortunately, every semester there seems to be one student who needs this kind of clarification, and it is for them that I spell things out.


  • Exams: All examinations in this class will be take-home. There is no limit on the amount of time you may spend working these exam, provided you submit the completed exam on time. Unlike homework and programming assignments, you may not receive any assistance in solving the problems, with the exception of advice I may offer.

  • The Other Student Criteria : When grading tests and homework, I use the Other Student Criteria (OSC). All solutions must meet this. The Other Student Criteria states that a solution should provide enough written explanation so that another student in the class (who could not complete the assignment) could read the submitted material and, without asking questions, understand a correct answer.

  • My ``take-home exam discussion policy": Once a student has begun a take-home exam, I will answer (for that student) only those questions that concern clarification of the intent of a problem. That is, I will not answer questions that seek to determine whether the problem was done correctly, or whether a particular approach is wise (or unwise).


  • Missing Exams : On rare occasions a situation will arise where a student cannot take a test during the specified time. In this case, the student should contact me well before the scheduled exam time. In the event of a sudden illness or emergency, it suffices to notify me sometime prior to the examination time (all numbers listed above are equipped with answering machines or voice mail, and I do check them before exams). Unless previously negotiated with me, any person who fails to turn in a take home exam by the assigned due date and time will receive a zero grade for that exam. The only exception is for extreme sudden illness or emergency.
  • Consulting Old Exams: Prior to the distribution of take-home exams, you may consult old exams from any class (regardless of professor). Once the take-home exams have been distributed, old exams can no longer be consulted.


  • Quizzes: There will be short (about 10 minute) quizzes at the start of each Friday class, with the exception of those weeks during which take home exams have been distributed. (For this class this means no quiz on either February 22 or April 4). Questions will be chosen from homework problems corresponding to the material covered the prior week (so, for example, the quiz on January 25 will cover material that we discuss the week of January 14-18). I create quizzes under the assumption that you have completed all the assigned homework. Thus a problem that requires an hour of analysis, but only five minutes of writing once the solution is understood, is fair game for a quiz.

  • Homework: I have listed, on the homework page of the class web, all assigned problems for each section in the text. From time to time, additional questions may be assigned on a given topic. Though homework will be assigned each week, it will not be collected or graded. You should do them all, however, since the quiz problems come directly from the homework, and since all homework problems, no matter how difficult, are fair game for quizzes and exams.


  • Programming Assignments: There will be three programming assignments in addition to the final programming project. You will be required to write these programs using the Java programming language. Unlike some of the lower level CS courses, in this course (and any other senior level course) a program must both compile without errors and run according to specification to receive any credit! There are a number of other factors that may influence the grade that a program receives. Here are some of them:

    • Is the program "user-friendly"? That is, does the user have to guess at how to use the program, or does the program somehow provide this information to the user?

    • Is the code readable? (One letter variable names, other than for loop indices, are strictly prohibited!)

    • Is the code well documented? Every program assignment grade will have a significant documentation component. No one should have to dig through poorly documented code (try it some time)!

    • Is the code "well-structured"?

    • Is the code robust? For example, how does the program react if the user supplies the wrong number of command line arguments?

    The good folks at Sun have written a nice document on Java code conventions. I suggest you take a good look at it. You should also be aware of the following:
    • When I grade your programs, I use the emacs editor. So when I judge the code for readability, it is in this context. If you choose to use an IDE such as Kawa or JBuilder, your code may not look very good in other editors. Both of these have features that allow you to reformat your code (so it will look good anywhere), and I encourage you to use them (if you use an IDE). Regardless, if you code using an IDE and it ends up looking bad in emacs, then you get a bad style grade. That is, it is your responsibility to ensure that your code looks good in emacs.
    • If you happen to submit an old version of your code by accident, or you submit binaries instead of source code, or you've mistakenly misnamed one of your classes the same thing as a Java built in class (which causes it to fail to compile on my machine even though it compiles on yours) then your code is graded accordingly. That is, if it doesn't compile on my machine, it gets a zero grade. If it's an old version, that's what I grade. If it's binary rather than source code, then it gets a zero grade. Bottom line: You should consider me a client who is purchasing your code. As the developer, it is your responsibility to ensure that I receive the latest working version of your source code and that it compiles correctly on my machine.
    • The version of the code you submit to me should have all debugging output removed. This does not mean that you have to remove the debugging code from the source. It does mean that when the code runs, I should not be getting debugging output.

  • Using Java Swing classes:Some of the programming projects will require that you are able to use some of the Java Swing classes. For those of you who are not familiar with these, they are the classes that allow Java coders to build graphical user interfaces. The Swing skill level required for the project will not be terribly advanced, but it is a good idea to get a jump on this now. The best source for introductory Swing information is the text The JFC Swing Tutorial: A Guide to Constructing GUIs by Kathy Walrath and Mary Campione. As you can tell by the link, the entire text is available (for free) online. Also, I have a hardcopy of it in my office, as well as a CD which contains the entire text (and which you may borrow to copy or download). Unfortunately, it seems that every Swing reference promotes a different technique for coding using these classes. For this reason, one of our first lectures will discuss a good consistent style to use when building relatively simple GUIs using Swing. I expect that all students will follow this. You are free to use your own techniques if you like (I know that some of you have used these classes for a while now) but if you follow your own technique and get stuck, you're on your own!

  • Program Submission Procedure: Programs are to be submitted to me via email (dszajda@richmond.edu). All projects consisting of more than a single file must be sent as a jar file. The jar file must include:
    • ALL source code you have written for the project.
    • ALL .java or .class files needed to build the executable, including any source or class files that I may have given you to aid in completion of the project.
    The idea is that I should be able to unpack your jar file, compile a single source file, and then run the program. I should not need to add other files to get your project to compile.
  • The Final Programming Assignment: The final programming project may or may not require that people work in groups. I am well aware of the potential difficulties that may arise with such a format, but I feel that the benefits gained from implementing a substantial project outweigh the potential costs of dealing with difficult group dynamics. If it is a group assignment, I will allow you to (for the most part) form your own groups. Groups will be limited to four members or less, with groups of size four optimal. You will not need to choose groups until just before Fall Break, but be especially careful to choose wisely, since I will not be sympathetic to any complaints at the end of the semester about how your group-mates failed to do any of the work! Working in groups is an essential part of computer science (whether working in academia or industry), so consider this necessary career training.

  • The Programming Environment: We will be coding in the Java programming language, and because of the relative portability of Java, you are welcome to program using whatever operating system, programming environment and/or editor you choose. All programming assignments must satisfy and/or include the following:
    • They must be written in Java, and specifically in a version of Java at or later than Java 1.5.
    • They must compile using the compiler provided with the current Sun Java Standard Development Kit.
    • If a project consists of several source code files, then the project must be submitted as a single zipped or tar file which is structured so that all source files are in a single directory (this saves me from having to fool with my classpath for every potential class subtree I receive).
    • All files contained in the tar file, or the single file you submit if there is just one source code file, must be in ASCII format. This should not be a problem, since you will only be submitting source files as opposed to class files.



  • Programming Help: I am happy to discuss programming and debugging techniques, as well as the semantics of particular functions calls. I am happy to direct you to appropriate packages. And I will at times provide you with shell code (such as when using Swing for the first time) so that you can work from a solid foundation. With regards to programming, I am in general happy to help you in whatever way is necessary. I will not, however, debug your code for you! If you describe your programming issue with me, I will be happy to suggest potentially useful debug strategies. But debugging is an important part (and in fact the majority part) of the programming process. As such, you need to be comfortable with doing it on your own!


  • General Assignment Policies: It is computer science department policy that No late homework/programming projects are accepted! Do not test me on this (you won't like the outcome). If, for example, you have spent the last 12 hours working on an assignment and it's done beautifully, but you left it in your dorm room, or brought the wrong notebook to class, or emailed it to the wrong address, or any of a number of similar laments, then you have just learned a valuable lesson on dealing with the consequences of your actions (however unintentional they may be)!

    At the end of the semester, any student who has missed two or more programming assignments will receive a programming component grade of zero for the course! Similarly, any student who has missed two or more quizzes will receive a zero for the quiz average component of the course grade! Though it's not an official policy, no student has passed my course after receiving either a zero programming project component grade or a zero quiz average component grade.

    Penmanship: If I have even the least bit of difficulty interpreting (because of poor handwriting or organization) your solution to a problem on any written assignment (including take-home and in-class exams), that problem will receive a grade of zero! If your penmanship is poor enough that this causes you concern (for many, it does), then I recommend you learn how to use a typesetting program (i.e. Latex or Word) and hand in only typeset solutions.

  • Collaborating on homework/programming assignments: Programming projects and homework may be discussed with others subject to the


    ``Empty Hands'' policy --- you may freely discuss ideas and approaches with other students subject to the restriction that each student must leave the discussion without any written or otherwise recorded material. In your homework write-up or source code, you must also document any person or source that you consulted for that project. Failure to comply with this policy will be treated as an Honor Code violation.

    Please also be aware that it is one thing to watch and understand a person solving a problem and another thing to be able to solve the problem yourself. Since it will be necessary to answer test questions without the aid of books or notes, I highly recommend that you write final homework solutions without using either.

    One final note: some, but not all, of the programming assignments for this semester will have been assigned in previous semesters. While you may consult previous class members concerning projects, you are not permitted, under any circumstances, to receive or view either hard copies or electronic copies of all or parts of their project submissions! You can use your friends to get help, but they should not be providing you with their code (just as in an English class, you might discuss the works of Dickens with a friend, but should not use the paper that they submitted as the basis for your own submission).


  • A Few Other Points:

    • READ THE TEXT!!!! I cannot stress this enough. The text is both informative (at the appropriate level) and readable. READ IT!!! I will sometimes only touch on a topic in lecture, while the text discusses it in great detail. Specifically, if I mention that you are to read a specific section of the text, you are responsible for all of the material in that section regardless of whether I have even mentioned it during lecture! READ THE TEXT!!!! It's really a great way to learn. Any lecture, no matter how polished or well prepared, will proceed at a pace that is too fast for some in the audience, and too slow for others. When you read a text, you are given the opportunity to absorb the material at your own pace. READ THE TEXT!!!! You'll do better in this course and gain a better grasp of the subject if you do.

    • The Class Web Page: Obviously you know what it is or you wouldn't be reading this. Nonetheless, I list it here for completeness. The URL is http://oncampus.richmond.edu/~dszajda/classes/cs315/Spring_2008/main.html. It is also accessible through my home page: http://oncampus.richmond.edu/~dszajda. You are expected to the web page regularly, since I often post announcements there. In addition, there are some helpful links.
    • Class Discussion Group: I'll be setting up a Blackboard account for this class so that you can use the discussion board. I encourage you all to use it to discuss programming difficulties and other course related material and issues.
    • Blackboard: There is a blackboard page for this course. I use it to record your grades. I mention this so that you are sure to check it from time to time, to make sure that the recorded grades match the grades you received.



  • Academic Honesty:

    I take it VERY seriously, and so should you. If I even suspect that a student has violated the University Honor Code, I will not hesitate to report this to the appropriate authorities.


  • Syllabus: The topics are not listed in the order we will discuss them (nor is this an exhaustive list).
    • Asymptotic Analysis
    • Review of Basic Data Structures (heaps, balanced binary trees)
    • Selected topics concerning sorting
    • Fundamental Techniques: The Greedy Method
    • Fundamental Techniques: Divide-and-Conquer
    • Fundamental Techniques: Dynamic Programming
    • Fundamental Techniques: Backtracking and Branch-and-Bound
    • Graphs and graph traversals
    • Weighted Graphs
    • Network Flow and matching
    • Text Processing
    • Distributed Algorithms
    • Computational Geometry
    • NP-completeness
    • Approximation algorithms

  • Preliminary Calendar:
    January
    14 16 18 Programming Project 1 Assigned
    21 23 25
    28 30 Programming Project 1 due
    February
    1 Programming Project 2 Assigned
    4 6 8
    11 No class 13 No Class 15 Programming Project 2 due; Exam 1 distributed
    18 20 22 Exam 1 due
    25 Programming Project 3 Assigned 27 29
    March
    3 5 7
    10 Spring Break 12 14
    17 19 21
    24 Programming Project 3 due 26 Final Programming Project assigned 28 Exam 2 distributed
    31
    April
    2 4 Exam 2 due
    7 9 11
    14 16 18
    21 23 25 Final Programming Assignment due; Final Exam distributed; Last Class
    28 30
    May
    2 Final Exam due

Last Modified:  08-May-2008 Contact: Doug Szajda
Arts & Sciences | Business | Leadership | Law | Continuing Studies