binary search merge sort mesh generation recursion · answer: repeated halving to find the page...

59
24. Divide and Conquer Algorithms Binary Search Merge Sort Mesh Generation Recursion

Upload: others

Post on 08-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

24. Divide and Conquer Algorithms

Binary SearchMerge SortMesh GenerationRecursion

Page 2: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

QuestionThe Manhattenphone book has1,000,000+ entries.

How is it possible to locate a nameby examining just atiny , tiny fractionof those entries?

Page 3: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Answer: Repeated HalvingTo find the page containing Derek Jeter’snumber…

while (Phone book is longer than 1 page)

Open to the middle page.

if “Jeter” comes before the first name,

Rip and throw away the 2nd half.

else

Rip and throw away the 1st half.

end

end

Page 4: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

What Happens toPhone Book Length…

Original: 3000 pages

After 1 rip: 1500 pages

After 2 rips: 750 pages

After 3 rips: 375 pages

After 4 rips: 188 pages

After 5 rips: 94 pages

After 12 rips: 1 page

Page 5: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Binary SearchThe idea of repeatedly halving the size of the “search space” is the main idea behind the method of binary search.

An item in a sorted array of length ncan be located with just log2 n comparisons.

Page 6: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Problem

Search a Sorted ArrayFor a Given Value

(We assume that the array has no repeated elements.)

Page 7: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 15 3533 42 45 51 7362 75 86 98

Binary Search: a = 70

x:

L:

Mid:

R:

1

6

12

1 2 3 4 5 6 7 8 9 10 11 12

x(Mid) <= a

So throw away theleft half…

Page 8: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 15 3533 42 45 51 7362 75 86 98

Binary Search: a = 70

x:

L:

Mid:

R:

6

9

12

1 2 3 4 5 6 7 8 9 10 11 12

a < x(Mid)

So throw away theright half…

Page 9: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 15 3533 42 45 51 7362 75 86 98

Binary Search: a = 70

x:

L:

Mid:

R:

6

7

9

1 2 3 4 5 6 7 8 9 10 11 12

x(Mid) <= a

So throw away theleft half…

Page 10: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 15 3533 42 45 51 7362 75 86 98

Binary Search: a = 70

x:

L:

Mid:

R:

7

8

9

1 2 3 4 5 6 7 8 9 10 11 12

x(Mid) <= a

So throw away theleft half…

Page 11: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 15 3533 42 45 51 7362 75 86 98

Binary Search: a = 70

x:

L:

Mid:

R:

8

8

9

1 2 3 4 5 6 7 8 9 10 11 12

Done becauseR-L = 1

Page 12: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

function L = BinarySearch(a,x)% x is a row n-vector with x(1) < ... < x(n)% x(1) <= a <= x(n)

% x(L) <= a <= x(L+1)

L = 1; R = length(x);% x(L) <= a <= x(R)

while R-L > 1mid = floor((L+R)/2);

% Note that mid does not equal L or R.if a < x(mid)

% x(L) <= a <= x(mid)R = mid;

else% x(mid) <= a <== x(R)

L = mid;end

end

Page 13: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Next Problem

Sort the values in an array so that they are arranged from smallest t o biggest.

Chosen Method: Merge Sort

This technique is an excellent example of a divide and conquer procedure.

Page 14: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Motivation

A plan if you have two “helpers”:

Split the array and have each helper sort his/her half.

Merge the two sorted subarrays.

And what if those two helpers each had two sub-helpers? Etc

Page 15: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Subdivide the Sorting Task

J NR CP DF LA QB KM GH E

A QB KM GH E J NR CP DF L

Page 16: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Subdivide Again

A QB KM GH E J NR CP DF L

M GH E A QB K P DF L J NR C

Page 17: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

And Again

M GH E A QB K P DF L J NR C

M GH E A QB K P DF L J NR C

Page 18: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

And One Last Time

J NR CP DF LA QB KM GH E

Page 19: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Now Merge

G ME H A QB K D PF L J NC R

J NR CP DF LA QB KM GH E

Page 20: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

And Merge Again

H ME G K QA B L PD F N RC J

G ME H A QB K D PF L J NC R

Page 21: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

And Again

M QH KE GA B P RL NF JC D

H ME G K QA B L PD F N RC J

Page 22: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

And One Last Time

M QH KE GA B P RL NF JC D

E FC DA B J KG H N PL M Q R

Page 23: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Done!

E FC DA B J KG H N PL M Q R

Page 24: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

function y = MergeSort(x)% x is a column n-vector.% y is a column n-vector consisting% of the values in x sorted% from smallest to largest.

n = length(x);if n==1

y = x;else

m = floor(n/2);y1 = MergeSort(x(1:m));y2 = MergeSort(x(m+1:n));y = Merge(y1,y2);

end

Page 25: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Important Sub-Problem

Merging Two Sorted ArraysInto a

Single Sorted Array

Page 26: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Example

12 33 4535

15 42 6555 75

12 15 3533 42 45 55 7565

Page 27: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

x:

y:

z:

1

1

1

ix:

iy:

iz:

Merge

x(ix) <= y(iy) ???

Page 28: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12

x:

y:

z:

1

1

1

ix:

iy:

iz:

Merge

x(ix) <= y(iy) yes

Page 29: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12

x:

y:

z:

2

1

2

ix:

iy:

iz:

Merge

x(ix) <= y(iy) ???

Page 30: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15

x:

y:

z:

2

1

2

ix:

iy:

iz:

Merge

x(ix) <= y(iy) no

Page 31: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15

x:

y:

z:

2

2

3

ix:

iy:

iz:

Merge

x(ix) <= y(iy) ???

Page 32: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 33

x:

y:

z:

2

2

3

ix:

iy:

iz:

Merge

x(ix) <= y(iy) yes

Page 33: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 33

x:

y:

z:

3

2

4

ix:

iy:

iz:

Merge

x(ix) <= y(iy) ???

Page 34: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533

x:

y:

z:

3

2

4

ix:

iy:

iz:

Merge

x(ix) <= y(iy) yes

Page 35: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533

x:

y:

z:

4

2

5

ix:

iy:

iz:

Merge

x(ix) <= y(iy) ???

Page 36: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42

x:

y:

z:

4

2

5

ix:

iy:

iz:

Merge

x(ix) <= y(iy) no

Page 37: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42

x:

y:

z:

4

3

5

ix:

iy:

iz:

Merge

x(ix) <= y(iy) ???

Page 38: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45

x:

y:

z:

4

3

5

ix:

iy:

iz:

Merge

x(ix) <= y(iy) yes

Page 39: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45

x:

y:

z:

5

3

6

ix:

iy:

iz:

Merge

ix > 4

Page 40: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45 55

x:

y:

z:

5

3

6

ix:

iy:

iz:

Merge

ix > 4

Page 41: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45 55

x:

y:

z:

5

4

8

ix:

iy:

iz:

Merge

ix > 4

Page 42: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45 55 65

x:

y:

z:

5

4

8

ix:

iy:

iz:

Merge

ix > 4

Page 43: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45 55 65

x:

y:

z:

5

5

9

ix:

iy:

iz:

Merge

ix > 4

Page 44: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

12 33 4535

15 42 6555 75

12 15 3533 42 45 55 7565

x:

y:

z:

5

5

9

ix:

iy:

iz:

Merge

ix > 4

Page 45: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

function z = Merge(x,y)n = length(x); m = length(y); z = zeros(1,n+m);ix = 1; iy = 1;for iz=1:(n+m)

if ix > n z(iz) = y(iy); iy = iy+1;

elseif iy>mz(iz) = x(ix); ix = ix + 1;

elseif x(ix) <= y(iy)z(iz) = x(ix); ix = ix + 1;

elsez(iz) = y(iy);iy = iy + 1;

endend

Page 46: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

New Problem

Recursive Mesh Generation

Page 47: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Divide and ConquerMethods Also Show Upin Geometric Situations

Chop a Regionup into triangleswith smnallertriangles in “areas of interest”.

Page 48: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Mesh Generation

Step One in simulating flow around an airfoil is to generate a mesh and (say) estimate velocity at each mesh point.

AnAreaOf

Interest

Page 49: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Mesh Generation in 3D

Page 50: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Why is Mesh Generationa Divide & Conquer Process?

Let Us Draw this Graphic:

Page 51: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

The Basic Operation

if the triangle is big enough

Connect the midpoints.

Color the interior triangle mauve.

else

Color the whole triangle yellow.

end

Page 52: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

At the Start…

Page 53: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Recur On this Idea

Apply sameidea to lower left triangle

Page 54: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Recur Again

Page 55: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Recursion And Again

Page 56: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open
Page 57: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Now, Climb Your Way Out.

Page 58: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

Etc

Page 59: Binary Search Merge Sort Mesh Generation Recursion · Answer: Repeated Halving To find the page containing Derek Jeter’s number… while (Phone book is longer than 1 page) Open

function DrawTriangle(x,y,level)if level ==5fill(x,y,'y')

else% Draw the triangle...

plot([x x(1)],[y y(1)],'k')% Determine the midpoints...

a = [(x(1)+x(2))/2 (x(2)+x(3))/2 (x(3)+x(1))/2];b = [(y(1)+y(2))/2 (y(2)+y(3))/2 (y(3)+y(1))/2];

% Color the interior triangle...pausefill(a,b,'m')pause

% Apply the process to the three "corner" triangles...DrawTriangle([x(1) a(1) a(3)],[y(1) b(1) b(3)],level+1)DrawTriangle([x(2) a(2) a(1)],[y(2) b(2) b(1)],level+1)DrawTriangle([x(3) a(3) a(2)],[y(3) b(3) b(2)],level+1)

end