CSC 282 – Algorithms Daniel Stefankovic – CSB 620 [email protected] TA: Girts Folkmanis...
-
Upload
gerard-lawson -
Category
Documents
-
view
217 -
download
1
Transcript of CSC 282 – Algorithms Daniel Stefankovic – CSB 620 [email protected] TA: Girts Folkmanis...
CSC 282 – Algorithms
Daniel Stefankovic – CSB 620 [email protected]
TA: Girts Folkmanis – CSB 614 [email protected]
www.cs.rochester.edu/~stefanko/Teaching/06CS282
25% - homework • turn in before class on the due date • no late homework accepted• two lowest homework scores dropped
30% - quizzes• 1 each week • 10 min• closed book• no make-up quizzes• two lowest quiz grades dropped
What is an algorithm?
algorithm = problem-solving procedure
Algoritmi de numero Indorum (Al-Khwarizmi Concerning the Hindu Art of Reckoning)
CORRECTNESSEFFICIENCY
Problem: is n a prime?
PRIMALITY:INSTANCE: a natural number nQUESTION: is n a prime?
Is 12345678987654321 a prime?
Problem: is n a prime?
Is 12345678987654321 a prime?
Algorithm 1:1 for k from 2 to n-1 do 2 if k divides n then RETURN “composite”3 RETURN “prime”
Problem: is n a prime? Algorithm 1:1 for k from 2 to n-1 do 2 if k divides n then RETURN “composite”3 RETURN “prime”
Algorithm 2:1 for k from 2 to √n do 2 if k divides n then RETURN “composite”3 RETURN “prime”
Problem: is n a prime?
CORRECT?
Algorithm 2:1 for k from 2 to √n do 2 if k divides n then RETURN “composite”3 RETURN “prime”
Problem: is n a prime?
RSA cryptosystem needs primeswith 1024-4096 bits.
Running time of our algorithms: Algorithm 1: 21024 – 24096
Algorithm 2:
Problem: is n a prime?
RSA cryptosystem needs primeswith 1024-4096 bits.
Running time of our algorithms: Algorithm 1: 21024 – 24096
Algorithm 2: 2512 – 22048
NOT EFFICIENT
What means efficient?
running time is bounded by a polynomial in the input size
“efficient program using other efficient as subroutines is efficient”
Input sizeHow many bits needed to represent n?
√n polynomial(log n) ???
Algorithm 2:1 for k from 2 to √n do 2 if k divides n then RETURN “composite”3 RETURN “prime”
log n
What means efficient?
running time is bounded by a polynomial in the input size
More refined classification asymptotic notation
Asymptotic notation DEF: Let f,g: N R+. We say f(n) = O(g(n)) if ( C) ( n) f(n) C . g(n)
1 n2 + n3 = O(n4)2 n2 / log(n) = O(n . log n)3 5n + log(n) = O(n)4 nlog n = O(n100) 5 3n = O(2n . n100)
Asymptotic notation
1 n2 + n3 = O(n4)2 n2 / log(n) O(n . log n)3 5n + log(n) = O(n)4 nlog n O(n100) 5 3n O(2n . n100)
Asymptotic notation
1 n! = O(3n)2 n +1 = O(n)3 2n+1 = O(2n)4 (n+1)! = O(n!)5 1+c+c2+…+cn = O(cn)6 1+c+c2+…+cn = O(1)
n!= n.(n-1).(n-2) … 3.2.1
Asymptotic notation
1 n! O(3n)2 n+1 = O(n)3 2n+1 = O(2n)4 (n+1)! O(n!)5 1+c+c2+…+cn = O(cn) for c>16 1+c+c2+…+cn = O(1) for c<1
What means efficient? polynomial-time = running time is bounded by a polynomial in the input size, i.e., ( k) T(n) = O(nk)
More refined analysis = asymptotics for therunning time (as a function of input-size)
ideally we would like f(n) such that T(n) = (f(n))
An applied problem
INSTANCE: n points in the planeSOLUTION: a tour connecting the pointsMEASURE: the length of the tour
An applied problem
INSTANCE: n points in the planeSOLUTION: a tour connecting the pointsMEASURE: the length of the tour
An applied problem
INSTANCE: n points in the planeSOLUTION: a tour connecting the pointsMEASURE: the length of the tour
SortingSORTING:INSTANCE: a sequence of n numbers a1,a2, … , an
SOLUTION: reordering bi of the input such that b1 b2 … bn
Insertion sorti 1while i n do j i while j 2 and a[ j-1] > a[ j ] do swap a[ j ],a[ j-1] j j - 1 i i + 1
Insertion sort – correctness?
i 1while i n do j i while j 2 and a[ j-1] > a[ j ] do swap a[ j ],a[ j-1] j j - 1 i i + 1
Merge 2 sorted listsMERGE
INSTANCE: 2 lists xi, yi such that x1 x2 … xn
y1 y2 … ym SOLUTION: ordered merge
1 i 1, j 12 while i n and j n do 3 if xi yj then 4 output xi, i i + 15 else 6 output yj, j j + 17 output remaining elements
Merge 2 sorted lists
MERGE-SORT(a,l,r) if l < r then m (l+r)/2 MERGE-SORT(a,I,m) MERGE-SORT(a,m+1,r) MERGE(a,l,m,r)
Mergesort
Running time?
Mergesort
[ … n/2 … ] [ … n/2 … ]
[ ... n … ]
[ … n/4 … ] [ … n/4 … ] [ … n/4 … ] [ … n/4 … ]
Depth ?
Running time?
Mergesort
[ … n/2 … ] [ … n/2 … ]
[ ... n … ]
[ … n/4 … ] [ … n/4 … ] [ … n/4 … ] [ … n/4 … ]
Depth = log n
Time spent on merge?
Mergesort
[ … n/2 … ] [ … n/2 … ]
[ ... n … ]
[ … n/4 … ] [ … n/4 … ] [ … n/4 … ] [ … n/4 … ]
Depth = log n
Time spent on merge?
Mergesort
[ … n/2 … ] [ … n/2 … ]
[ ... n … ]
[ … n/4 … ] [ … n/4 … ] [ … n/4 … ] [ … n/4 … ]
Depth = log n
O(n)
O(n)
O(n)
O(n.logn)