Welcome, Fall 2019 Students!
Data structures is so much of what you'll end up doing as a computer scientist. In this course, I'll be doing my best to integrate solid theory on data structures as they pertain to computer programs while also going through practical examples that will hopefully equip you to tackle real-world problems.
I strongly recommend that you bookmark this website for the duration of the course and that you visit it regularly.
See you in class,
—Professor Nadim Kobeissi
Organizing and managing large quantities of data using computer programs is increasingly essential to all scientific and engineering disciplines. Students learn how to design data structures for representing information in computer memory, emphasizing abstract data types and their implementation, and designing algorithms using these representations. Topics include recursion, asymptotic analysis of algorithms, lists, stacks, queues, trees, hashing, priority queues, and graph data structures.
This course is taught using Java programming language, and assumes that students have had at least one semester course in Java programming language (Introduction to CS course). All programming assignments are given in Java and students need to be able to write fairly involved programs from the very first project.
Upon completion of this course, students will have a strong understanding of:
- Java features: abstract classes, interfaces, inheritance, polymorphism, generics, iterators, exception handling, file I/O.
- Core concepts: recursion, worst case asymptotic running time analysis, abstract data types, lists, stacks and queues, trees (binary and binary search trees, AVL trees), sorting algorithms, hashing and hash tables, and priority queues.
Passing CSCI.UA.0101 with a grade of C or better. You are expected to know and remember the material from CSCI.UA.0101 course. If you took the course a few semesters ago and/or do not remember parts of the material, start reviewing it during the summer/winter break. If you took an equivalent of this course at a different school, you need to make sure that you are familiar with Java. We assume you know enough Java to write fairly large programs right at the beginning of the semester.
- Instructor: Professor Nadim Kobeissi (email@example.com)
- Lectures: Tuesdays and Thursdays, 5:45pm to 7:00pm. Room TBD.
- Recitations: Thursdays, 7:15pm to 8:45pm. Room TBD.
- Term Dates: September 2, 2019 until December 13, 2019.
- Office Hours: Email me to make an appointment.
- Online Resources: Discussion Group.
Syllabus and Calendar
→ A PDF copy of the Fall 2019 syllabus is TBD.
Part 0: Introduction
0.1: Introduction (slides available after class)
- Data Structures and Algorithms in Java, Chapters 1, 2
Part 1: Object-Oriented Programming
1.1: Objects, Classes, References, Inheritance (slides available after class)
- Data Structures and Algorithms in Java, Chapters 1, 2.2
1.2: Parameter Passing, Overloading, Abstract Methods and Interfaces, Recursion (slides available after class)
- Data Structures and Algorithms in Java, Chapters 2.3, 5.1—5.5
Part 2: TBD
Every lecture will be accompanied by outside readings that expand on what is discussed in class or present the same material in a different way. Neither the readings nor the lectures are a replacement for each other; deeply understanding the material will likely require attendance as well as reading. It is possible to read before or after class, depending on your learning style.
Aside from the textbooks and materials, students will also require their own personal computer for various parts of this course. Windows, Linux and Mac computers are all suitable.
Data Structures and Algorithms in Java, 6th edition.
- Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser.
- Required. Pick up a copy from the NYU bookstore.
- Despite being an overpriced Wiley publication, it's actually an excellent textbook.
OpenDSA, free online reference.
- Open source course materials for a wide range of Data Structures and Algorithms courses.
- Optional. Probably good for perusal.
All students are required to download and install IntelliJ IDEA (Community Edition), a free Java development environment that will give you everything you need to write Java software and to run it on your computer.
IntelliJ IDEA is available for Windows, Linux and Mac computers. You are expected to have it installed and to be able to use it to write and run a simple Java "Hello World" program before the first class session.
Interactive Learning Tools
- TBD: TBD
Problem Sets are scheduled evenly throughout the course to help you assess your understanding of the material thus far. Practical Assignments give you chances to get real-world experience in designing and breaking digital security systems.
- Problem Set 1 - due TBD before class.
- Problem Set 2 - due TBD before class.
- Problem Set 3 - due TBD before class.
Practical Assignment 1: TBD
Due TBD: TBD
Practical Assignment 2: TBD
Due TBD: TBD
At NYU, a commitment to excellence, fairness, honesty, and respect within and outside the classroom is essential to maintaining the integrity of our community. Plagiarism is defined as presenting others' work without adequate acknowledgement of its source, as though it were one’s own. Plagiarism is a form of fraud. We all stand on the shoulders of others, and we must give credit to the creators of the works that we incorporate into products that we call our own. Some examples of plagiarism:
- A sequence of words incorporated without quotation marks or an unacknowledged passage paraphrased from another's work.
- The use of ideas, sound recordings, computer data or images created by others as though it were one’s own.
- Submitting evaluations of group members’ work for an assigned group project which misrepresent the work that was performed by another group member.
- Altering or forging academic documents, including but not limited to admissions materials, academic records, grade reports, add/drop forms, course registration forms, etc.
Furthermore, my courses have a zero tolerance policy for cheating. Any instance of cheating will result in an immediate, non-negotiable grade of 0 on the pertinent assignment and a report to the university faculty:
- Your code has to be your own. No copying code (or rewriting it line by line based on someone else's code) will be tolerated.
- Any sharing of any answers on any assignment is considered cheating.
- Coaching another student by helping them writing their answers line by line is also cheating.
- Copying answers or code from the Internet or hiring someone to write your answers for you is cheating.
Explaining how to use systems or tools and helping others with high-level design issues is not cheating.
For further information, students are encouraged to check NYU's Academic Integrity Policy.