**Meeting:**Tuesdays and Thursdays, 2 – 3:50pm, Room 1406

**Instructor:**Kanat Tangwongsan (kanat dot tan at mahidol dot edu)

**Office Hours:**Tue/Thu 12 - 2pm or by appointment

This course aims to teach methods for designing, analyzing, and programming algorithms and data structures. It focuses on fundamental concepts that can be applied across problem domains, programming languages, and computer architectures. There will be a significant programming component, which will be in Java.

Topics covered in this class include: problems and abstractions, contracts and interfaces, performance analysis (asymptotic notation and analysis), basic data structures (stacks, queues, lists, double-ended queues), sorting, searching (linear search, binary search, collection), divide and conquer techniques, (search) trees, hashing, basic graph representations, and graph algorithms.

- Java for Python Programmers (Free Access)
- Duane A. Bailey, Java Structures. (Free Access)
- Clifford A. Shaffer, Data Structures and Algorithm Analysis. (Free Access)
- Frank M. Carrano and Timothy M. Henry, Data Structures and Abstractions with Java, 4th Ed (Global Edition).
- Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser, Data Structures and Algorithms in Java 6th Ed.

LaTeX turns out to be one of the best options for creating your PDF handin. Here is a template, which will look like this after you compile it.

LaTeX is built from Don Knuth's TeX typesetting language, and has grown through community support to be both extremely powerful and easy to use. There are any number of excellent resources about how to use LaTeX; a few are listed here for your convenience.

- The Wikipedia page, for more general information and history
- Adam Blank's excellent LaTeX guide.
- The Wikibook on LaTeX
- A (Not So) Short Introduction To LaTeX2e
- The Comprehensive TeX Archive Network (users group)
- The TeXLive Homepage
- detexify is a learning-based symbol classifier that will help you figure out the right LaTeX command to produce a symbol you can draw but not name.

LaTeX source files can be created with any text editor, so emacs and vim are excellent choices. There are several LaTeX specific IDEs that you may find more comfortable to use, depending on your working environment:

- kile, the KDE LaTeX IDE
- TeXStudio, a LaTeX IDE
- TeXworks
- TeXclipse, an Eclipse plugin for LaTeX
- TeXnicCenter, an IDE for Windows

Your final letter grade will be determined as follows:

- Assignments (~ 8 sets) · 16%
- Mastery-style coding exams (3 tests) · 42%
- Theory quizzes (5 sets) · 35%
- Participation and in-class activities · 7%

Students are expected to maintain the highest standards of academic integrity. Academic dishonesty will not be tolerated and will be reported to the Academic Dishonesty committee.

In this course, we interpret collaboration very liberally. You may work with other students. However, each student must write up and hand in his or her assignment separately. Let us repeat: you need to write your own code, answers, and proof. You must not look at or copy someone else's code or writeups. The fact that you can recreate the solution from memory is taken as proof that you actually understood it, and you may actually be interviewed about your answers.

Unless stated otherwise, assignments are due electronically
at 11:59PM Bangkok time. You are, however, encouraged to
hand them in well ahead of the deadline. For the whole
term, you are allotted FIVE (5) late days at no grade
penalty. But at most **ONE** (1) late day may
be used per assignment. If you have used up these late days
or used more than one for a given assignment, your
submission will not be graded.