CSCI 3394 - Syllabus


This page is a lot more fun if you have Java 5.0 installed. You only need the JRE.
Syllabus Links Schedule Grades


Location and Time - Halsell 340, 2:10-3:25pm

Professor - Dr. Mark Lewis, Office: HAS 201K, Phone: 999-7022, e-mail: mlewis@trinity.edu. The best way to reach me typically is by e-mail. I check it frequently and try to respond promptly.

Office Hours - 10:00-11:30 MWF, 3:30-6:00 TR, or by appointment. I'm in my office a lot so you should feel free to drop by. If you are coming from lower campus you can always call or write a short e-mail to see if I'm in and available at that time.

Texts - "Introduction to Algorithms" by CLRS and "Algorithm Design" by Jon Kleinberg and Eva Tardos. The second book is an optional text but you might strongly consider buying it depending on what you are trying to get from the class.

Course Description - This is an advanced course on algorithms and data structures. In many ways it is a continuation of the Data Abstraction class. The objective of the course is for you to understand advanced algorithms and the data structures that are needed to make them work. You should also gain the ability to design your own algorithms to efficiently solve challenging problems.

As my previous students can attest, the courses that I teach are aggressive. I have one overriding objective in my courses and that is to make you think. If I make you think new thoughts for most of the semester I will have done well. If I give you new ways to think thoughts (old and new), then I will truly have succeeded. This course is not about busy work, though inevitably a fair bit of work will be required. Exactly how much work you have to put in will often be inversely proportional to how much you think about the work that you should be doing. Writing programs on the scale of most of the assignments for this course requires a significant amount of design and thought to make sure that what you are trying to do will actually accomplish what you want it to and that it will do it correctly. Failure to think nearly always leads to more work for you in the end.

Honor Code - If you agreed to the honor code, all work that you submit for this class needs to be pledged. In the case of code, this means that you need to pledge in a comment at the top of each file.

Coding Practices - You are expected to follow certain coding practices for any code that you turn in as work in this course. In this sense I'm fairly lenient. I only require uniform indentation and reasonable documentation, especially in the form of self-documenting code. I will not help you to debug any code that is not well indented. I don't care exactly how you decide to align brackets or put in white space (though some white space is helpful), but you have to be uniform, and all blocks of code should be indented beyond what the surrounding code had been. If you use poor function and variable names and I can't figure out what you are trying to do, it will impact your grade negatively. All submitted code needs to compile and run under Linux as that is where I will be testing them. You can use whatever language you want that will work under Linux though Java and C++ are recommended. If you do something esoteric you should provide at least instructions for making it work or even better provide a makefile that can be used to build your code.

Grades - The grading system for this class is a bit unusual. You will actually have a fair bit of control over what goes into your grade. Over the course of the semester there will be 7 coding assignments and 7 take home mini-exams. Each one will be worth 10 points and only your top 10 will count. Given this, you have a lot of flexibility with what you do. You can choose to focus on the coding of the theory by doing all 7 of one type and only 3 of the other type, or you could put in extra work early and do all the coding and exams early leaving less for late in the semester (you still have to show up to class even if you do the first 5 of each and get good grades).

Coding Assignments - Every two weeks during the semester there will be another assignment that you can do. These will have you implementing the data structures and algorithms that we have discussed in class. The assignments will be due on alternating Tuesdays as shown on the course schedule. Late assignments will be deducted 1 point for each day that they are late. After 5 days they will not be accepted. Each assignment will be given in a format much like the ACM programming competitions where you are expected to process certain inputs sets and produce appropriate output. Some of the assignments will have multiple parts that excercise different aspects of what we have talked about. For each assignment a bonus point will be given to the submission that can process the input set the fastest. Points will also be deducted for submissions that are too slow even if they are correct. Obviously, points will be deducted for incorrect submissions. Code that doesn't compile will get zero points.

Mini-exams - On alternating Thursdays mini-exams will be due in class. The exams will be handed out in class on Tuesday. The exams will focus on theoretical aspects of the discussions that we have had in class. They will include proofs, order analysis, and other concepts.