} Input Correctness Output Rigorous, Unambiguous and - - PDF document

input correctness output rigorous unambiguous and
SMART_READER_LITE
LIVE PREVIEW

} Input Correctness Output Rigorous, Unambiguous and - - PDF document

Complexity & Analysis of Data Complexity & Analysis of Data Complexity & Analysis of Data Structures & Algorithms Structures & Algorithms Structures & Algorithms Piyush Kumar Piyush Kumar (Lecture 2: Alg (Lecture 2:


slide-1
SLIDE 1

1

Complexity & Analysis of Data Structures & Algorithms Complexity & Analysis of Data Complexity & Analysis of Data Structures & Algorithms Structures & Algorithms

Piyush Piyush Kumar Kumar

(Lect (Lecture 2: Alg e 2: Algorit rithmic An mic Analys alysis is) (Lect (Lecture 2: Alg e 2: Algorit rithmic An mic Analys alysis is)

Welcome to COP4531

Based on slides from

  • J. Edmonds, S. Rudich, S. H. Teng,
  • K. Wayne and my old slides.

Algorithm: What is it?

  • An Algorithm a well-defined

computational procedure that transforms inputs into outputs, achieving the desired input-output relationship.

Algorithm Characteristics

  • Finiteness
  • Input
  • Output
  • Rigorous, Unambiguous and

Sufficiently Basic at each step

}

Correctness

slide-2
SLIDE 2

2

Applications?

  • WWW and the Internet
  • Computational Biology
  • Scientific Simulation
  • VLSI Design
  • Security
  • Automated Vision/Image Processing
  • Compression of Data
  • Databases
  • Mathematical Optimization

Sorting

  • Input:

Input: Array A[1...n], of elements in arbitrary order

  • Output: Array A[1...n] of the same

elements, but in increasing order

  • Given a teacher find all his/her students.
  • Given a student find all his/her teachers.

The RAM Model

  • Analysis is performed with respect to a

computational model

  • We will usually use a generic uniprocessor

random-access machine (RAM)

– All memory equally expensive to access – No concurrent operations – All reasonable instructions take unit time

  • Except, of course, function calls

– Constant word size

  • Unless we are explicitly manipulating bits
slide-3
SLIDE 3

3

Binary Search

Initialize Get Midpoint Compare Adjust High Adjust Low Failure Success High < Low = < >

Time and Space Complexity

  • Generally a function of the input size
  • E.g., sorting, multiplication

– How we characterize input size depends:

  • Sorting: number of input items
  • Multiplication: total number of bits
  • Graph algorithms: number of nodes & edges
  • Etc

Running Time

  • Number of primitive steps that are

executed

– Except for time of executing a function call most statements roughly require the same amount of time

  • y = m * x + b
  • c = 5 / 9 * (t - 32 )
  • z = f(x) + g(y)
  • We can be more exact if need be
slide-4
SLIDE 4

4

Analysis

  • Worst case

– Provides an upper bound on running time – An absolute guarantee

  • Average case

– Provides the expected running time – Very useful, but treat with care: what is “average”?

  • Random (equally likely) inputs
  • Real-life inputs

Binary Search Analysis

  • Order Notation
  • Upper Bounds
  • Search Time = ??
  • A better way to look at it,

Binary Search Trees

In this course

  • We care most about asymptotic

performance

– How does the algorithm behave as the problem size gets very large?

  • Running time
  • Memory/storage requirements
  • Bandwidth/power requirements/logic

gates/etc.

slide-5
SLIDE 5

5

2.1 Computational Tractability

"For me, great algorithms are the poetry of computation. Just like verse, they can be terse, allusive, dense, and even

  • mysterious. But once unlocked, they cast a brilliant new

light on some aspect of computing." - Francis Sullivan

Computational Tractability

Charles Babbage (1864)

As soon as an Analytic Engine exists, it will necessarily guide the future course of the science. Whenever any result is sought by its aid, the question will arise - By what course of calculation can these results be arrived at by the machine in the shortest time? - Charles Babbage

Analytic Engine (schematic)

Polynomial-Time

  • Brute force. For many non-trivial problems, there is a natural brute force

search algorithm that checks every possible solution. – Typically takes 2N time or worse for inputs of size N. – Unacceptable in practice.

  • Desirable scaling property. When the input size doubles, the algorithm

should only slow down by some constant factor C.

  • Def. An algorithm is poly-time if the above scaling property holds.

There exists constants c > 0 and d > 0 such that on every input of size N, its running time is bounded by c Nd steps.

choose C = 2d n ! for stable matching with n men and n women

slide-6
SLIDE 6

6

Worst-Case Analysis

  • Worst case running time. Obtain bound on largest possible running time of

algorithm on input of a given size N. – Generally captures efficiency in practice. – Draconian view, but hard to find effective alternative.

  • Average case running time. Obtain bound on running time of algorithm on

random input as a function of input size N. – Hard (or impossible) to accurately model real instances by random distributions. – Algorithm tuned for a certain distribution may perform poorly on other inputs.

Worst-Case Polynomial-Time

  • Def. An algorithm is efficient if its running time is polynomial.
  • Justification: It really works in practice!

– Although 6.02 × 1023 × N20 is technically poly-time, it would be useless in practice. – In practice, the poly-time algorithms that people develop almost always have low constants and low exponents. – Breaking through the exponential barrier of brute force typically exposes some crucial structure of the problem.

  • Exceptions.

– Some poly-time algorithms do have high constants and/or exponents, and are useless in practice. – Some exponential-time (or worse) algorithms are widely used because the worst-case instances seem to be rare.

simplex method Unix grep

Why It Matters

slide-7
SLIDE 7

7

2.2 Asymptotic Order

  • f Growth

2.2 Asymptotic Order 2.2 Asymptotic Order

  • f Growth
  • f Growth

Why not do Exact Analysis?

  • It is difficult to be exact.
  • Results are most of the time too

complicated and irrelevant.

Order Notation

slide-8
SLIDE 8

8

Asymptotic Order of Growth

  • Upper bounds. T(n) is O(f(n)) if there exist constants c > 0 and n0 ≥ 0 such

that for all n ≥ n0 we have T(n) ≤ c · f(n).

  • Lower bounds. T(n) is Ω(f(n)) if there exist constants c > 0 and n0 ≥ 0 such

that for all n ≥ n0 we have T(n) ≥ c · f(n).

  • Tight bounds. T(n) is Θ(f(n)) if T(n) is both O(f(n)) and Ω(f(n)).
  • Ex: T(n) = 32n2 + 17n + 32.

– T(n) is O(n2), O(n3), Ω(n2), Ω(n), and Θ(n2) . – T(n) is not O(n), Ω(n3), Θ(n), or Θ(n3).

Notation

  • Slight abuse of notation. T(n) = O(f(n)).

– Asymmetric:

  • f(n) = 5n3; g(n) = 3n2
  • f(n) = O(n3) = g(n)
  • but f(n) ≠ g(n).

– Better notation: T(n) ∈ O(f(n)).

  • Meaningless statement. Any comparison-based sorting algorithm requires at

least O(n log n) comparisons. – Statement doesn't "type-check." – Use Ω for lower bounds.

Properties

  • Transitivity.

– If f = O(g) and g = O(h) then f = O(h). – If f = Ω(g) and g = Ω(h) then f = Ω(h). – If f = Θ(g) and g = Θ(h) then f = Θ(h).

  • Additivity.

– If f = O(h) and g = O(h) then f + g = O(h). – If f = Ω(h) and g = Ω(h) then f + g = Ω(h). – If f = Θ(h) and g = O(h) then f + g = Θ(h).

slide-9
SLIDE 9

9

Asymptotic Bounds for Some Common Functions

  • Polynomials. a0 + a1n + … + adnd is Θ(nd) if ad > 0.
  • Polynomial time. Running time is O(nd) for some constant d independent of

the input size n.

  • Logarithms. O(log a n) = O(log b n) for any constants a, b > 0.
  • Logarithms. For every x > 0, log n = O(nx).
  • Exponentials. For every r > 1 and every d > 0, nd = O(rn).

every exponential grows faster than every polynomial can avoid specifying the base log grows slower than every polynomial

The world of O…

  • F(n) = O(F(n))
  • c O(f(n)) = O(f(n))
  • O(F(n)) = O(O(F(n)))
  • O(f(n)+g(n)) = O( max(f(n),g(n)) )
  • O(f(n)) O(g(n)) = O( f(n) g(n) )
  • O( f(n) g(n) ) = f(n) O( g(n) )

2.4 A Survey of Common Running Times 2.4 2.4 A Survey of Common A Survey of Common Running Times Running Times

slide-10
SLIDE 10

10

Linear Time: O(n)

  • Linear time. Running time is at most

a constant factor times the size of the input.

  • Computing the maximum. Compute

maximum of n numbers a1, …, an.

max ← a1 for i = 2 to n { if (ai > max) max ← ai }

Linear Time: O(n)

  • Merge. Combine two sorted lists A = a1,a2,…,an with B =

b1,b2,…,bn into sorted whole.

  • Claim. Merging two lists of size n takes O(n) time.
  • Pf. After each comparison, the length of output list increases by

1.

i = 1, j = 1 while (both lists are nonempty) { if (ai ≤ bj) append ai to output list and increment i else(ai ≤ bj)append bj to output list and increment j } append remainder of nonempty list to output list

O(n log n) Time

  • O(n log n) time. Arises in divide-and-conquer algorithms.
  • Sorting. Mergesort and heapsort are sorting algorithms that perform O(n

log n) comparisons.

  • Largest empty interval. Given n time-stamps x1, …, xn on which copies of a

file arrive at a server, what is largest interval of time when no copies of the file arrive?

  • O(n log n) solution. Sort the time-stamps. Scan the sorted list in order,

identifying the maximum gap between successive time-stamps.

also referred to as linearithmic time

slide-11
SLIDE 11

11

Quadratic Time: O(n2)

  • Quadratic time. Enumerate all pairs of elements.
  • Closest pair of points. Given a list of n points in the plane (x1, y1),

…, (xn, yn), find the pair that is closest.

  • O(n2) solution. Try all pairs of points.
  • Remark. Ω(n2) seems inevitable, but this is just an illusion.

min ← (x1 - x2)2 + (y1 - y2)2 for i = 1 to n { for j = i+1 to n { d ← (xi - xj)2 + (yi - yj)2 if (d < min) min ← d } }

don't need to take square roots see chapter 5

Cubic Time: O(n3)

  • Cubic time. Enumerate all triples of elements.
  • Set disjointness. Given n sets S1, …, Sn each of which is a subset of

1, 2, …, n, is there some pair of these which are disjoint?

  • O(n3) solution. For each pairs of sets, determine if they are disjoint.

foreach set Si { foreach other set Sj { foreach element p of Si { determine whether p also belongs to Sj } if (no element of Si belongs to Sj) report that Si and Sj are disjoint } }

Polynomial Time: O(nk) Time

  • Independent set of size k. Given a graph, are there k nodes such that no

two are joined by an edge?

  • O(nk) solution. Enumerate all subsets of k nodes.

– Check whether S is an independent set = O(k2). – Number of k element subsets = – O(k2 nk / k!) = O(nk). foreach subset S of k nodes { check whether S in an independent set if (S is an independent set) report S is an independent set } }

n k ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ = n (n−1) (n− 2) L (n− k +1) k (k −1) (k − 2) L (2) (1) ≤ nk k!

poly-time for k=17, but not practical k is a constant

slide-12
SLIDE 12

12

Exponential Time

  • Independent set. Given a graph, what is maximum size of an

independent set?

  • O(n2 2n) solution. Enumerate all subsets.

S* ← φ foreach subset S of nodes { check whether S in an independent set if (S is largest independent set seen so far) update S* ← S } }

Summary

  • Θ(1) : Constant Time, Can’t beat it.
  • Θ(log n) : Typically the speed of most

efficient data structures (Binary tree search?)

  • Θ (n) : Needed by an algorithm to

look at all its input.

Summary

  • Θ(nx), x > 1 : Polynomial running time.

Acceptable when exponent (x) / Input data size is small.

  • Θ(yn), y > 1 : Used when input is very

small or worst case does not happen.

  • Θ (n!) or Θ(nn) : Useful for really

small inputs most of the time. (n < 20)

slide-13
SLIDE 13

13

Defn.

  • A Recurrence is an equation or

inequality that describes a function

  • r inequality in terms of its own value
  • n smaller inputs.

– f(n) = f(n-1) + f(n-2)

Brain Teaser

  • Given a pizza and a knife, what is the

maximum number of pieces you can cut the pizza to if you are allowed n straight cuts with the knife?