Transcript Lecture 1

Introduction to Data
Structures and
Algorithms
CS 110: Data Structures and Algorithms
First Semester, 2010-2011
Learning Objectives
► Define
introductory terms, such as
algorithm and data structure
► Write pseudo-code according to
conventions
► Review mathematical concepts such as
summation, logarithms, and induction
Introduction
Beware of bugs in the above code; I have
only proven it correct, not tried it.
--Donald Knuth
Definitions
► Algorithm
– a step-by-step procedure to
perform a task
► Real
world: Balancing a checkbook
► CS:
Adding a list of numbers
► Data
Structure – a systematic way of
organizing and accessing data
► Real
world: Filing Cabinet
► CS:
Hierarchical file system
Why Study Algorithms?
► The
obvious solution to a problem is not
always the most efficient.
► Example: Adding integers from 1 to n
► Obvious
method:
int sum = 0;
for (int i = 1; i <= n; i ++)
sum = sum + i;
► Is
there a better way?
Why Study Data Structures?
► Algorithms
and data structures are usually
developed hand-in-hand
►
Example: Pushing and popping from a stack
► The
behavior of an algorithm depends on
how the data is structured.
►
Example: Searching a disc vs. searching a tape
► Tape:
fast-forward, rewind
► Disc:
select a track
Design Goals
► Correctness
►
Should correctly
solve the task it is
designed for
► For
all possible
inputs!
► Always
depends on
the specific task.
► Efficiency
►
Should not use any
more of the
computer’s resources
than necessary
► Processing
► Memory
time
Implementation Goals
► Robustness
Gracefully handle incorrect input
► Example: Therac-25
►
► Adaptability
Evolve in response to change
► Example: Y2K bug
►
► Reusability
Allow use in many applications
► Example: Java class libraries
►
How will we study it?
► Write
algorithms in Java or another
programming language?
► Pitfalls:
► Solutions
become tied to a particular
language or paradigm
► How do we test the correctness and
efficiency of an algorithm before its
written?
Pseudo-Code
► Combine
high-level descriptions with familiar
programming language structures
► Written for humans, not computers
Algorithm addFromOneToN(n)
Input: An integer n
Output: The sum of all integers from 1 to n
sum ← 0
for i ← 1 to n do
sum ← sum + i
return sum
Pseudo-code Conventions
► Expressions
► Algorithm
Structures
► Control Structures
Pseudo-code Conventions:
Expressions
► Standard
►
Math Symbols
+-*/()
► Relational
►
<>≤≥=≠
► Boolean
►
Operators
Operators
and or not
► Assignment
Operator: ←
► Array Indexing: A[i]
Pseudo-code Conventions:
Algorithm Structure
► Algorithm
heading
Algorithm name(param1, param2,...):
Input: input elements
Output: output elements
► Statements
call
return statement
control structures
object.method(arguments)
return value
Pseudo-code Conventions:
Control Structure
► Decision
► If
Structures
... then ... [else]
► Loops
► While
... do
► Repeat ... until
► For ... do
General Rules
► Communicate
high level ideas and not
implementation details (programming
language specifics)
► Clear and informative
Pseudo-Code
► Given
an array A with size n, write pseudocode
to find the maximum element in A
Algorithm arrayMax(A,n):
Input: An array A storing n integers.
Output: The maximum element in A.
currentMax ← A[0]
for i ←1 to (n - 1) do
if currentMax < A[i] then
currentMax ← A[i]
return currentMax
Review: Summation
Review: Summation
Review: Logarithms
► logb
m = x  bx = m
► logb (mn) = logb m + logb n
► logb (m/n) = logb m - logb n
► logb (mn) = n logb m
► logb b = 1
► logb m = (loga m) / (loga b)
► 0 < a < b  log a < log b
Logarithm Conventions
► In…
► Calculus:
log is implied to be base e
► Physics: log is implied to be base 10
► CS: log is implied to be base 2
► For
clarification, we may use lg or lb to
denote log base 2
► i.e.
lg a = lb a = log2 a
Review: Mathematical Induction
► Step
►
Is the statement true for n = 0 or 1?
► Step
►
1 – Check the base case
2 – State the induction assumption
“The statement is true for all n ≤ k”
► Step
3 – Prove the next case in the sequence
Is the statement true for n = k + 1?
► This will (normally) use the Step 2 assumption in
its proof
►
Mathematical Induction
► Step
1: Base Case
► Step
2: Inductive Step assume for all n ≤ k
Mathematical Induction
► Step
3: Proof of next case – Show that