Introduction to Computer Science II, ICS 211
This page is
http://www2.hawaii.edu/~esb/2017fall.ics211/index.html
This page is subject to change without notice -- please reload it
in your browser if an item that might affect you may have changed.
The organization of the course is described here. Please review it at the beginning
of the course and occasionally during the course. It includes
information about course goals, class time and location, contacting the
instructor
, the textbook, grading, and the no cheating policy. I also have
some suggestions for doing well in this course.
If you have any questions, please contact the instructor.
Schedule
This schedule is subject to change.
The class is scheduled Mondays and Wednesdays 10:30-11:45am in Holmes 247.
The instructor's office hours are 1:30-2:30pm MW and 3-4pm Thu in POST 305F
-- see here for details..
I usually post the presentation notes no later than the
day before the lecture.
Chapter references are to the textbook, Data Structures: Abstraction
and Design Using Java, 3rd edition.
- Mon Aug 21, class introductions, course summary
Outline
- introductions
- course overview
Some links for this class:
- Wed Aug 23. Java Review. Appendix A in the book.
Outline
- Java review:
- basics
- exceptions
- variables
- arrays
- modulo operator
- if statements, booleans, comparisons
- loops: while and for
Some links for this class:
- Mon Aug 28. Abstract Data Types, Interfaces, super- and sub-classing
and object-oriented programming.
Sections 1.1-1.2 in the book
Outline
- Abstract Data Types, ADTs
- Java Interfaces
- Class Hierarchy
- Inheritance
Some links for this class:
- Wed Aug 30. Java classes and objects, wrappers, exceptions.
Sections 1.3-1.8, A6, A12 in the book.
Outline
- Class hierarchy and inheritance
- Method overriding or overloading, polymorphism
- Abstract classes
- Casting and instanceof/getClass
- Class Object
- Exception class hierarchy
Some links for this class:
- Wed Sep 6. Algorithm efficiency and Lists. Sections 2-2.4 in the book.
Outline
- Runtime of programs
- Algorithm efficiency
- Big-O notation
- List interface
- Array lists
Some links for this class:
- Mon Sep 11. Singly-linked lists. Sections 2.4-2.5 in the book.
Outline
- Array list efficiency
- Linked lists
- Nodes
- Linked list implementation
- Invariants
Some links for this class:
- Wed Sep 13. Singly- and doubly-linked lists. Sections 2.5-2.6 in the book.
Outline
- linked lists reminders: nodes, implementation, invariants
- circular linked list
- doubly-linked lists
- iterators
- the Java foreach statement
- iterator implementation
- the ListIterator interface
Some links for this class:
- Mon Sep 18. LinkedList class, iterators. Sections 2.6-2.9 in the book.
Outline
- iterators
- iterator implementation
- the Java foreach statement
Some links for this class:
- Wed Sep 20. Testing and debugging. Chapter 3 in the book.
Outline
- testing
- errors
- reasoning about programs
Some links for this class:
- Mon Sep 25. Exam review. Chapters 1 and 2, and Appendix A6 and A12.
Outline
- Java review
- Abstract Data Types (ADTs)
- Interfaces
- Class Hierarchy, Abstract Classes, Inheritance
- Invariants
- Lists
- ArrayList
- LinkedList
- runtime analysis
- Iterators
- Java references
Some links for this class:
- Wed Sep 27. Exam 1, on all the material so far.
- Mon Oct 2. Post-exam review.
- Wed Oct 4. Stacks. Sections 4.1-4.3 in the book.
Outline
- stacks
- stack ADT
- method signatures
- array stack implementation
- linked stack implementation
- stack applications
- infix, prefix, and postfix expressions
Some links for this class:
- Mon Oct 9. Queues. Sections 4.5-4.8 in the book.
Outline
- infix, prefix, and postfix expressions
- queues
- queue interface
- queue applications
- queue implementation: array queue
- queue implementation: linked queue
- application of queues and stacks: data structure traversal
- application of queues: simulation of an airline counter
- random numbers
Some links for this class:
- Wed Oct 11. Queues. Sections 4.5-4.8 in the book.
Outline
- queue implementation: linked queue
- application of queues and stacks: data structure
- traversal
- double-ended queues
- application of queues: simulation of an airline
- counter
- random numbers
- recursion
- examples of recursion
Some links for this class:
- Mon Oct 16. Recursion. Sections 5-5.3 in the book.
Outline
- examples of recursion
- principles of recursion
- review: recursive linked list methods
- binary search
- more examples of recursion
- problem solving using recursion
Some links for this class:
- Wed Oct 18. Recursion. Sections 5.2-5.6 in the book.
Outline
- binary search
- more examples of recursion
- problem solving using recursion
- Towers of Hanoi
- backtracking
- garbage collection
Some links for this class:
- Mon Oct 23. Trees. Sections 6-6.2 in the book.
Outline
- backtracking
- garbage collection
- trees
- binary search trees
- tree traversal
- binary search tree algorithms: add, remove, traverse
- binary node class
Some links for this class:
- Wed Oct 25. Implementing binary trees and lambda expressions.
Sections 6.3-6.5 in the book.
Outline
- binary search tree algorithms: add, remove, traverse
- binary node class
- lambda expressions
- lambda expressions in Java
Some links for this class:
- Mon Oct 30. Heaps and priority queues. Section 6.6 in the book.
Outline
- lambda expressions
- lambda expressions in Java
- heaps
- heap storage in arrays
- heap insertion and removal
Some links for this class:
- Wed Nov 1. Heaps and priority queues. Section 6.6 in the book.
Outline
- heap insertion and removal
- priority queues
- priority queues implementation
- review of recursion
- Mon Nov 6. Review for the exam
Outline
- exam review
- recursion
- binary search
- stacks
- queues
- infix, prefix, and postfix expressions
- random numbers
- binary trees
- binary search trees
- tree traversal
- lambda expressions
- heaps
- runtime analysis
- ability to implement needed methods
Some links for this class:
- Wed Nov 8. Exam 2, on all the material so far, but
emphasizing the material since Exam 1.
- Mon Nov 10. Post-exam review.
- Wed Nov 15. Huffman Trees, Section 6.7 in the book.
Outline
- Huffman trees
- Huffman coding
- implementation of Huffman coding
Some links for this class:
- Mon Nov 20. Hashing, Sections 7-7.3 in the book
Outline
- hash tables
- hash functions
- open addressing
- chained hashing
Some links for this class:
- Wed Nov 22. Hashing, Section 7.4 in the book. Sorting, Sections 8-8.4 in the book
Outline
- applications of hashing
- equality and comparisons in Java
- sorting
- selection sort
- bubble sort
- insertion sort
Some links for this class:
- Java Comparator interface (method compare)
- Java Comparable interface (method compareTo)
- sort methods for integer arrays.
- sort methods for Collections.
- Mon Nov 27. Sorting, Sections 8-8.4 in the book
Outline
- insertion sort
- merge sort
Some links for this class:
- Wed Nov 29. Sorting, Sections 8.4-8.9 in the book
Outline
- heap sort
- quick sort
- Shell sort
Some links for this class:
- Mon Dec 4. Shell sort, Section 8.5 in the book. Start of course review.
Outline
- Shell sort
- exam review
- exam 1 material: Java, ADTs, linked lists, run-time big-O,
objects, references and pointers, iterators, invariants
- exam 2 material: generic types and container classes,
stacks, queues, recursion, binary trees, binary search,
binary search trees, tree traversal,
- heaps, huffman coding, priority queues, hashing,
- sorting: insertion, selection, bubble, mergsort, heapsort,
quicksort
- Wed Dec 6. Course review
The final exam for this class is scheduled for Monday Dec 11th, from 9:45am to 11:45am. The exam is on the material in the entire course, with some emphasis on the material since exam 2.
Anyone wishing to take the final exam early please contact the instructor before December 4th.
Outcomes
Students who do well in this course will acquire (or practice):
- An ability to apply mathematical foundations, algorithmic
principles, and computer science theory to the modeling and design
of computer-based systems
- An ability to define the computing requirements of a problem and to
design appropriate solutions based on established design principles
and with an understanding of the tradeoffs involved in design
choices
- An ability to use sound development principles to implement
computer-based and software systems of varying complexity, and to
evaluate such systems
- An ability to use current techniques, skills, and tools necessary
for computing practice