Professional Documents
Culture Documents
Structures
Lecture III
Simonas altenis
Aalborg University
simas@cs.auc.dk
September 22, 20
03
This Lecture
Tiling
Searching (binary search)
Sorting (merge sort).
September 22
Tiling
A tromino tile:
And a 2nx2n board
with a hole:
September 22
A tiling of the
board with
trominos:
September 22
September 22
Tiling: Algorithm
n
n
INPUT:
INPUT:nn the
theboard
boardsize
size(2
(2nx2
x2nboard),
board),LLlocation
locationof
ofthe
thehole.
hole.
OUTPUT:
OUTPUT:tiling
tilingof
ofthe
theboard
board
Tile(n,
Tile(n, L)
L)
if
if nn == 11 then
then
Trivial
Trivial case
case
Tile
Tile with
with one
one tromino
tromino
return
return
Divide
Divide the
the board
board into
into four
four equal-sized
equal-sized boards
boards
Place
Place one
one tromino
tromino at
at the
the center
center to
to cut
cut out
out 33 additional
additional
holes
holes
Let
Let L1,
L1, L2,
L2, L3,
L3, L4
L4 denote
denote the
the positions
positions of
of the
the 44 holes
holes
Tile(n-1,
Tile(n-1, L1)
L1)
Tile(n-1,
Tile(n-1, L2)
L2)
Tile(n-1,
Tile(n-1, L3)
L3)
Tile(n-1,
Tile(n-1, L4)
L4)
September 22
September 22
Tiling: Divide-and-Conquer
September 22
Binary Search
INPUT:
INPUT:A[1..n]
A[1..n]aasorted
sorted(non-decreasing)
(non-decreasing)array
arrayofofintegers,
integers,ssan
aninteger.
integer.
OUTPUT:
an
index
j
such
that
A[j]
=
s.
NIL,
if
j
(1jn):
A[j]
s
OUTPUT: an index j such that A[j] = s. NIL, if j (1jn): A[j] s
Binary-search(A,
Binary-search(A, p,
p, r,
r, s):
s):
if
if pp == rr then
then
if
if A[p]
A[p] == ss then
then return
return pp
else
else return
return NIL
NIL
q
(p+r)/2
q (p+r)/2
ret
ret
Binary-search(A,
Binary-search(A, p,
p, q,
q, s)
s)
if
if ret
ret == NIL
NIL then
then
return
return Binary-search(A,
Binary-search(A, q+1,
q+1, r,
r, s)
s)
else
else return
return ret
ret
September 22
10
Recurrences
September 22
11
INPUT:
INPUT:A[1..n]
A[1..n]aasorted
sorted(non-decreasing)
(non-decreasing)array
arrayofofintegers,
integers,ssan
aninteger.
integer.
OUTPUT:
an
index
j
such
that
A[j]
=
s.
NIL,
if
j
(1jn):
A[j]
s
OUTPUT: an index j such that A[j] = s. NIL, if j (1jn): A[j] s
Binary-search(A,
Binary-search(A, p,
p, r,
r, s):
s):
if
if pp == rr then
then
if
if A[p]
A[p] == ss then
then return
return pp
else
else return
return NIL
NIL
q
q (p+r)/2
(p+r)/2
if
if A[q]
A[q] ss then
then return
return Binary-search(A,
Binary-search(A, p,
p, q,
q, s)
s)
else
else return
return Binary-search(A,
Binary-search(A, q+1,
q+1, r,
r, s)
s)
September 22
12
Running Time of BS
(1)
if n 1
T ( n)
T (n / 2) (1) if n 1
T(n) = (lg n) !
September 22
13
14
September 22
15
MergeSort (Example) - 1
September 22
16
MergeSort (Example) - 2
September 22
17
MergeSort (Example) - 3
September 22
18
MergeSort (Example) - 4
September 22
19
MergeSort (Example) - 5
September 22
20
MergeSort (Example) - 6
September 22
21
MergeSort (Example) - 7
September 22
22
MergeSort (Example) - 8
September 22
23
MergeSort (Example) - 9
September 22
24
MergeSort (Example) - 10
September 22
25
MergeSort (Example) - 11
September 22
26
MergeSort (Example) - 12
September 22
27
MergeSort (Example) - 13
September 22
28
MergeSort (Example) - 14
September 22
29
MergeSort (Example) - 15
September 22
30
MergeSort (Example) - 16
September 22
31
MergeSort (Example) - 17
September 22
32
MergeSort (Example) - 18
September 22
33
MergeSort (Example) - 19
September 22
34
MergeSort (Example) - 20
September 22
35
MergeSort (Example) - 21
September 22
36
MergeSort (Example) - 22
September 22
37
To sort n numbers
if n=1 done!
recursively sort 2 lists of
numbers n/2 and n/2
elements
merge 2 sorted lists in (n)
time
Strategy
September 22
38
solving_trivial_problem
T ( n)
if n 1
(1)
if n 1
T ( n)
2T (n / 2) (n) if n 1
September 22
39
Repeated Substitution
Method
T ( n)
2T (n / 2) n if n 1
T ( n) 2T n / 2 n substitute
2 2T n / 4 n / 2 n expand
22 T ( n / 4) 2n substitute
22 (2T (n / 8) n / 4) 2n expand
23 T (n / 8) 3n
T ( n) 2i T (n / 2i ) in
September 22
2lg n T (n / n) n lg n n n lg n
40
INPUT:
INPUT:A[l..r]
A[l..r]an
anunsorted
unsortedarray
arrayofofintegers,
integers,l lr.
r.
OUTPUT:
OUTPUT:(min,
(min,max)
max)such
suchthat
thatj
j(ljr):
(ljr):A[j]
A[j]min
minand
andA[j]
A[j]max
max
MinMax(A,
MinMax(A, l,
l, r):
r):
if
Trivial
if ll == rr then
then return
return (A[l],
(A[l], A[r])
A[r])
Trivial case
case
q
q (l+r)/2
(l+r)/2
Divide
Divide
(minl,
(minl, maxl)
maxl) MinMax(A,
MinMax(A, l,
l, q)
q)
Conquer
(minr,
maxr)
MinMax(A,
q+1,
r)
(minr, maxr) MinMax(A, q+1, r)
if
if minl
minl << minr
minr then
then min
min == minl
minl else
else min
min == minr
minr Combine
if
if maxl
maxl >> maxr
maxr then
then max
max == maxl
maxl else
else max
max == maxr
maxr
return
return (min,
(min, max)
max)
September 22
41
Next Week
September 22
42