# Computer Science 101

## Data Abstraction

Gregory M. Kapfhammer

# Color Scheme

**Key Concept**

**Corresponding Diagram**

**In-Class Discussion**

**In-Class Activity**

**Details in the Textbook**

# Data Structure

Systematic way of organizing and accessing data

# Algorithm

A step-by-step for performing a task in a finite time

**Running time of algorithms as they process data structures**

**Larger inputs lead to longer running times**

**What about the space overhead of an algorithm?**

**Trade-off time and space overhead**

**See Code Fragment 4.1 for a timing method**

**Let's draw this as a diagram**

# Challenges

Comparable results only when using same environment

Limited set of inputs may lead to incorrect conclusions

You must fully implement and test the algorithms

**Why are these challenges important to address?**

**In fact, there are several! ☺**

**Disciplined empirical study**

**Experiments through input doubling**

**Analytical algorithm evaluation**

# Theoretical Goals

Work independent of hardware and software

Takes into account all possible inputs

Does not require algorithm implementation

**Count primitive operations**

# Primitive Operations

Assign a value to a variable

Follow an object reference

Compare two numbers

Return from a method

Call a method

**Any questions about these types of operations?**

**Focus on building intuition**

**Focus on the worst-case behavior**

**Look for iteration constructs**

**Nesting of iteration constructs**

**Other types of algorithm performance behavior?**

**See Figure 4.2 for an example**

**Describe algorithm performance with a function**

**Operations as function of input size**

# Growth Rates

Constant

Logarithm

Linear

n-log-n

Quadratic

Cubic

Exponential

**Fast-growing function, slow algorithm**

**Slow-growing function, fast algorithm**

**See Figure 4.4 to compare the growth rates!**

**Any questions about these functions?**

**Focusing on worst-case behavior**

*f(n)* is bounded above by *g(n)*

**Asymptotic sense as ***n* grows toward infinity

**Let's visualize this with a diagram!**

# Algorithm Growth Rates

log n: 3, 4, 5, 6, 7, 8, 9

n: 8, 16, 32, 64, 128, 256, 512

Quadratic: 64, 256, 1024, 4096, 16384, 65536, 262144

**Cubic and exponential grow much faster!**

**Any questions about these growth rates?**

**Organize into teams of two or three**

**Which algorithm would you pick?**

# Algorithm Choices

Fast algorithm running on a slow computer

Slow algorithm running on a fast computer

# Algorithm Choices

Good algorithm design is very important

Ensure that your algorithm has a slow growth rate

Dramatic speedups in hardware cannot overcome asymptotically slow algorithms

**See Tables 4.4 and 4.5 for more details!**

**Examples of algorithm analysis**

**arrayMax on page 171**

This algorithm is O(n)!

Can you clearly explain why?

**repeat1 on page 172**

This algorithm is O(n^{2})!

Can you clearly explain why?

**Why is repeat1 slower than repeat2?**

**unique1 on page 174**

This algorithm is O(n^{2})!

Can you clearly explain why?

**unique2 on page 175**

This algorithm is O(n×logn)!

Can you clearly explain why?

**Interplay between theory and experiment**

**How does this connect to previous content?**

**Questions about algorithm analysis?**

**We will practice this in the assignments!**

**Schedule office hours to discuss further**