CSE373
Midterm #1 Review Sheet

Mathematical background


Know what a relation is (in the formal mathematical sense).  Understand the set-theory notation used with relations.

Understand properties such as reflexive, symmetric, transitive, anti-symmetric, equivalence relations, partial orders.  Be able to determine when relations have particular properties, both when the relation is given explicitly as a set and when the relation is defined in other ways (such as using English).

Understand what a function is in the formal (mathematical, set-theory) sense, and also informally.   Given a relation (defined in various ways) determine when it is or is not a function.

Understand logarithms and exponentials and be able to work with them (basic algebra).

Know basic series and summations (like 1+2+ ... n); be able to work with them algebraically; be able to recognize situations where they can be applied.

Chapter 3

Be able to give a precise definition of Big-O.  Be able to understand and apply the definition when working with specific functions.

Given a single statement in Java or pseudocode, understand its time cost.   Given a fragment of code, develop an "exact" time complexity formula for it, in terms of an appropriate parameter or parameters. 

Given an informal description of an algorithm or process, determine what its asymptotic complexity is.

Given a formula which represents a complexity, categorize it as closely as possible to one of the better known standard functions.

Know the hierarchy (complexity order) of common standard functions.

Given two functions, determine whether one is Big-O of the other.

Chapter 4 -- Recursion

Know the fundamental aspects of recursion: base cases, recursive cases, getting to to the base case, etc.

Be able to translate a recursive problem description or informal algorithm into code or pseudocode.

Be able to code recursive algorithms in actual Java, from scratch, for relatively short but non-trivial problems.  Some examples include array processing (finding max, summing, searching), computing products or powers or logs, etc.

Be able to trace a given recursive method to determine its operation or output.

Be able to analyze a given recursive method to discuss its complexity, at least informally.

Chater 4 -- Data Structures

Know the Stack (and Queue) as an ADT (know each of its operations).

Recognize situations where a Stack (or Queue) is appropriate in a problem solution.

Be familiar with a typical Java interface for a Stack (or Queue).

Be familiar with more than one programming approach to implementing a Stack (or Queue).

Java Programming

Know all Java fundamentals, including object-oriented features, as expected from a basic beginning programming sequence (such as 142/143).

Understand the differences and applications of interfaces, abstract classes, and concrete classes.

Be comfortable in a programming situation involving multiple files and classes, packages, your own code, external code, and libraries.

Be able to create a JUnit test class.

Given a Java method, be able to create an appropriate method to test it (whether using JUnit or not).

Other preliminaries

Know what an Abstract Data Type is.