+ All Categories
Home > Documents > Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures...

Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures...

Date post: 07-Mar-2018
Category:
Upload: ngodang
View: 212 times
Download: 0 times
Share this document with a friend
35
Algorithms and Data Structures Algorithms and Data Structures Searching in Lists Searching in Lists Ulf Leser
Transcript
Page 1: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Algorithms and Data StructuresAlgorithms and Data Structures

Searching in ListsSearching in Lists

Ulf Leser

Page 2: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Topics Todayp y

• Search: Given a (sorted or unsorted) list A with |A|=nSearch: Given a (sorted or unsorted) list A with |A| n elements (integers). Check whether a given value c is contained in A or not– Search returns true or false– In the sorted case, we obviously can exploit transitivity

F ndamental p oblem ith a illion applications– Fundamental problem with a zillion applications

• Select: Given an unsorted list A with |A|=n elements (integers) Return the i‘th largest element of A(integers). Return the i th largest element of A.– Returns an element of A– The sorted case is trivial – simply return A[i]p y [ ]– Interesting problem (especially for median) with many applications– [Interesting proof]

Ulf Leser: Alg&DS, Summer semester 2011 2

Page 3: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Content of this Lecture

• Searching in Unsorted Lists• Searching in Sorted Lists• Searching in Sorted Lists• Selecting in Unsorted Lists

Ulf Leser: Alg&DS, Summer semester 2011 3

Page 4: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Searching in an Unsorted Listg

• There is not much we canThere is not much we can do, no magic is known

• Compare c to every 1 A t d i t

p yelement of A

• Worst case (c∉A): O(n)

1. A: unsorted_int_array;2. c: integer;3. for i := 1.. |A| do4. if A[i]=c then5 ret rn tr e

• Average case (c A)– We perform i tests for all i

ith th b bilit 1/

5. return true;6. end if;7. end for;8. return false;

with the same probability 1/n– This gives

( )NONNNN

iN

N

i=

+=

+=∑

= 21

2*11 2

1

Ulf Leser: Alg&DS, Summer semester 2011 4

Page 5: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Content of this Lecture

• Searching in Unsorted ListsSearching in Unsorted Lists• Searching in Sorted Lists

– Binary Searchy– Fibonacci Search– Interpolation Search

• Selecting in Unsorted Lists

Ulf Leser: Alg&DS, Summer semester 2011 5

Page 6: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Binary Search (binsearch)y ( )

1. func bool binsearch(A: sorted_arr;c,l,r : int) {

• If A is sorted, we can be much faster

, , ) {2. If l>r then3. return false;4. end if;5. m := l+(r-l) div 2;

• Binsearch: Exploit transitivity

( )6. If c<A[m] then7. return binsearch(A, c, l, m-1);8. else if c>A[m] then9. return binsearch(A, c, m+1, r);( , , , )10. else11. return true;12. end if;13.}

Ulf Leser: Alg&DS, Summer semester 2011 6

Page 7: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Iterative Binsearch

• Binsearch uses only end- 1. A: sorted_int_array;Binsearch uses only endrecursion

• Thus, transformation to an

2. c: integer;3. l := 1;4. r := |A|;5. while l<r do,

equivalent iterative program is easy

6. m := l+(r-l) div 2;7. if c<A[m] then8. r := m-1;9. else if c>A[m] then

– No call stacks– O(1) additional space

10. l := m+1;11. else12. return true;13.end while,14.return false;

Ulf Leser: Alg&DS, Summer semester 2011 7

Page 8: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Complexity of Binsearchp y

• With every call to binsearch (or every while-loop), weWith every call to binsearch (or every while loop), we reduce the size of sub-array by 50%

• In every call to binsearch, we only do constant worky , y• Thus, we call binsearch once with n, with n/2, with n/4, …

= log(n+1) times• Binsearch has worst-case complexity O(log(n))• Average case is only

marginally better– Ottmann/Widmayer

Ulf Leser: Alg&DS, Summer semester 2011 8

Source: railspikes.com

Page 9: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Content of this Lecture

• Searching in Unsorted ListsSearching in Unsorted Lists• Searching in Sorted Lists

– Binary Searchy– Fibonacci Search– Interpolation Search

• Selecting in Unsorted Lists

Ulf Leser: Alg&DS, Summer semester 2011 9

Page 10: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Fibonacci Search

• If we want to be ultra-fast, we should try to use onlyIf we want to be ultra fast, we should try to use only simple arithmetic operations– Division is not simple

• We want a search algorithm that has complexity O(log(n)) and does not use division

• We need to “imitate” the iterative halving of indexes• Recall Fibonacci numbers

– fib(n)=fib(n-1)+fib(n-2)– 1, 2, 3, 5, 8 , 13, 21, 34, …

Thus fib(n 2) is roughly 1/3 fib(n 1) roughly 2/3 of fib(n)– Thus, fib(n-2) is roughly 1/3, fib(n-1) roughly 2/3 of fib(n)

• Dividing the array like this might suffice for O(log(n))

Ulf Leser: Alg&DS, Summer semester 2011 10

Page 11: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Complexityp y

• Let’s assume we can always compute x ~ l+2*(r-l)/3 usingLet s assume we can always compute x l+2 (r l)/3 using only integer additions and subtractions

• In the worst-case, we always have c in the larger (2/3) , y g ( / )fraction of the array– We call once for n, once for 2n/3, once for 4n/9, …, 1

• I.e., we look at arrays of size fib(n-1), fib(n-2), fib(n-3), …• Consider that n

511 ⎤⎡⎟⎞

⎜⎛ + ncnfib 62.1*~

251

51)(

⎥⎥⎦

⎢⎢⎣

⎡⎟⎟⎠

⎞⎜⎜⎝

⎛ +=

• Thus, for n~c*1,62n’ (for some n’) we make O(n’) comparisons

Ulf Leser: Alg&DS, Summer semester 2011 11

• We thus need 1/c*log1,62(n)=O(log(n)) comparisons

Page 12: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Algorithm1. A: sorted_int_array;2. c: integer;3 fib2 := 1;

g

• Not totally trivial

3. fib2 := 1; 4. fib1 := 1;5. fib := 2;6. while fib<n do7 fib2 := fib1;Not totally trivial

• Having only fib(n) doesn’t suffice to compute fib(n-1) and fib(n-2)

7. fib2 := fib1;8. fib1 := fib;9. fib := fib1+fib2;10.end while;11 i := 0;p ( ) ( )

• But if we know fib(n), fib(n-1) and fib(n-2), we can compute all

11.i := 0;12.offset := 0;13.while fib>1 do14. i := min(offset+fib2, n)15 if c<A[i] then

other fib’s– fib(n)=fib(n-1)+fib(n-2)

fib( 1) fib( 2) fib( 3)

15. if c<A[i] then 16. fib := fib2;17. fib1 := fib1-fib2;18. fib2 := fib-fib1;19 else if c>A[i] then– fib(n-1)=fib(n-2)+fib(n-3)

– …

• Always keep fib fib1 and fib2

19. else if c>A[i] then20. fib := fib1;21. fib1 := fib2;22. fib2 := fib-fib1;23 offset := i;• Always keep fib, fib1, and fib2

• Offset: Never move outside A

23. offset := i;24. else25. return true;26. end if;27 end while;

Ulf Leser: Alg&DS, Summer semester 2011 12

27.end while;28.return false;

Page 13: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Algorithm1. A: sorted_int_array;2. c: integer;3 fib2 := 1;

g3. fib2 := 1; 4. fib1 := 1;5. fib := 2;6. while fib<n do7 fib2 := fib1;

fib7. fib2 := fib1;8. fib1 := fib:9. fib := fib1+fib2;10.end while;11 i := 0;11.i := 0;12.offset := 0;13.while fib>1 do14. i := min(offset+fib2, n)15 if c<A[i] then

fib2 fib1

15. if c<A[i] then 16. fib := fib2;17. fib1 := fib1-fib2;18. fib2 := fib-fib1;19 else if c>A[i] then19. else if c>A[i] then20. fib := fib1;21. fib1 := fib2;22. fib2 := fib-fib1;23 offset := i;23. offset := i;24. else25. return true;26. end if;27 end while;

Ulf Leser: Alg&DS, Summer semester 2011 13

27.end while;28.return false;

Page 14: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Outlook

• We can solve the search problem in O(log(n)) using onlyWe can solve the search problem in O(log(n)) using only comparisons

• Transform A into a balanced binary search tree, i.e,y , ,– At every node, the depth of the two subtrees differ by at most 1 – At every node n, all values in the left (right) subtree are smaller

(l ) th(larger) than n

• Search problem Recursively compare c to node– Recursively compare c to node labels and descend left/right

– Tree has depth O(log(n))– We need at most log(n)

comparisons – and nothing else

See Heap based Priority Queues later

Ulf Leser: Alg&DS, Summer semester 2011 14

• See Heap-based Priority Queues later

Page 15: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Content of this Lecture

• Searching in Unsorted ListsSearching in Unsorted Lists• Searching in Sorted Lists

– Binary Searchy– Fibonacci Search– Interpolation Search

• Selecting in Unsorted Lists

Ulf Leser: Alg&DS, Summer semester 2011 15

Page 16: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Interpolation Searchp

• Imagine you have a telephone book and search for „Zacharias“„

• Will you open the book in the middle?• As in sorting, we can exploit additional knowledge about g, p g

our values, i.e., use more than just comparisons• Interpolation Search: Estimate where c lies in A based on

the distribution of values in A– Simple: Use max and min values in A and assume equal distribution

C l A i i f l di ib i (hi )– Complex: Approximation of real distribution (histograms, …)

Ulf Leser: Alg&DS, Summer semester 2011 16

Page 17: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Simple Interpolation Searchp p

• Assume equal distribution – values within A are equallyAssume equal distribution values within A are equally distributed in [ A[1], A[n] ]

• Best guess for the rank of cg

][][][*)()(lArA

lAclrlcrank−

−−+=

• Idea: Use m=rank(c) and proceed as in binsearchl “ l h ”

][][

• Example: “Xylophon”

Ulf Leser: Alg&DS, Summer semester 2011 17

Page 18: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Analysisy

• In average-case, Interpolation Search on equallyIn average case, Interpolation Search on equally distributed data requires only O(log(log(N)) comparison– See [OM93]

• But: Worst-case is O(N)– If concrete distribution deviates heavily from expected distribution,

A i l d t i l >”X thi ”e.g., A is very large and contains only names>”Xanthippe”

• Further disadvantage: In each phase, we perform ~4 adds/subs and 2*mults/divsadds/subs and 2 mults/divs– Assume this takes 12 cycles (1 mult/div = 4 cycles)– Binsearch requires 2*adds/subs + 1*div ~6 cyclesq / y– Even for N=232~4E9, this yields 12*log(log(4E9))~72 ops versus

6*log(4E9)~180 ops – not that much difference

Ulf Leser: Alg&DS, Summer semester 2011 18

Page 19: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Going Furtherg

• For very large N, it might be worth to use additionalFor very large N, it might be worth to use additional knowledge on A

• Idea: If |∑|=k, pre-compute the frequency f(k) of values | | , p p q y ( )starting with a character smaller-or-equal than k - for all k– Names: How many start with A, A or B, A or B or C, …– Pre-computation: One scan, or use sampling

• Given c, use f(c[1]) as start pointM thi Hi t i d t b– More on this: Histograms in databases

Ulf Leser: Alg&DS, Summer semester 2011 19

Page 20: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Content of this Lecture

• Searching in Unsorted ListsSearching in Unsorted Lists• Searching in Sorted Lists• Selecting in Unsorted Lists• Selecting in Unsorted Lists

– Naïve or clever

Ulf Leser: Alg&DS, Summer semester 2011 20

Page 21: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Quartiles

• The median is the middle valueThe median is the middle value– Sort all values and take the one in the middle

• Generalization: x%-QuartilesQ– Sort all values and take the value at x% of the values– Typical: 25, 75, 90, -quartiles

• How long do 90% of all students need?

– Median = 50%-quartile

Ulf Leser: Alg&DS, Summer semester 2011 21

Page 22: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Selection Problem

• DefinitionThe selection problem is to find the x%-quartile of a set of p qA of |A| unsorted values

• We can sort A and then take the appropriate value directly• Thus, O(n*log(n)) is easy to reach• Can we solve the problem in linear time?• It is easy to see that we have to look at least at each value y

once; thus, the problem is in Ω(n)

Ulf Leser: Alg&DS, Summer semester 2011 22

Page 23: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Top-k Problemp

• Top-k: Find the k largest values in ATop k: Find the k largest values in A• For small k, the naïve solution already is linear

– repeat k timesp– go through A and find largest value v;– remove v from A; – return v– Requires k*|A|=O(|A|) comparisons

• Naïve solution is optimal for constant k• Naïve solution is optimal for constant k• But if k=c*|A|, we need c*|A|*|A|=O(|A|2) comparisons

See: It is decisive whether k depends on input or not– See: It is decisive whether k depends on input or not– We measure complexity in size of the input – but what is the input?

Ulf Leser: Alg&DS, Summer semester 2011 23

Page 24: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Selection Problem in Linear Time

• We sketch an algorithm which solves the problem for arbitrary x in linear timey– Actually, we solve the equivalent problem of returning the k’th

value in the sorted A (of course, without sorting A)

I t ti f th ti l i t f i It i ibl• Interesting from a theoretical point-of-view: It is possible• Practically, the algorithm is of no importance because the

constant factors might get enormously largeconstant factors might get enormously large• It is instructive to see why (and where)

Ulf Leser: Alg&DS, Summer semester 2011 24

Page 25: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Algorithm1. func integer divide(A array;2. l,r integer) {3. …g

• Recall QuickSort: Chose

4. while true5. repeat6. i := i+1;7. until A[i]>=val;Recall QuickSort: Chose

pivot element p, divide array wrt p, recursively

8. repeat 9. j := j-1;10. until A[j]<=val or j<i;11. if i>j then

sort both partitions using the same trickW th id

12. break while;13. end if;14. swap( A[i], A[j]);15. end while;

• We can reuse-the idea: Chose pivot element p, divide array wrt p

16. swap( A[i], A[r]);17. return i;18.}

1 f i t til (Adivide array wrt p, recursively select in the one partition that must

1. func int quartile(A array;2. k, l, r int) {3. if r≤l then4. return A[l]; 5 d if

pcontain the k’th element

5. end if;6. pos := divide( A, l, r);7. if (k ≤ pos-l) then8. return quartile(A, k, l, pos-1);9 l

Ulf Leser: Alg&DS, Summer semester 2011 25

9. else10. return quartile(A, k-pos+l, pos, r);11. end if;12.}

Page 26: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Analysisy

1. func int quartile(A array;2. k, l, r int) {2. k, l, r int) {3. if r≤l then4. return A[l]; 5. end if;6. pos := divide( A, l, r);

• Assume arbitrarily badly chosen pivot

6. pos : divide( A, l, r);7. if (k ≤ pos-l) then8. return quartile(A, k, l, pos-1);9. else10. return quartile(A, k-pos+l, pos, r);y p

elements– Worst-case

10. return quartile(A, k pos+l, pos, r);11. end if;12.}

• pos always r-1 (or l+1) • Gives O(n2)• Need to chose the pivot element v more carefully

Ulf Leser: Alg&DS, Summer semester 2011 26

Page 27: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Chosing pg p

• Assume we can chose p such that we always continueAssume we can chose p such that we always continue with only q% of A– Any q, but extend of reduction depends on n

• Then, we would perform T(n) = T(q*n) +c*n operations– T(q*n) – recursive descent– c*n – function “divide”

• T(n) = T(q*n)+c*n = T(q2*n)+q*c*n+c*n = T(q2n)+(q+1)*c*n T(q3n)+(q2+q+1)*c*nT(q2n)+(q+1)*c*n = T(q3n)+(q2+q+1)*c*n = …

)(1****)( Oi∑∞

)(1

1****)(0

nOq

ncqncnTi

i =−

=≤ ∑=

Ulf Leser: Alg&DS, Summer semester 2011 27

Page 28: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Discussion

• Our algorithm has worst-case complexity O(n) when weOur algorithm has worst case complexity O(n) when we manage to always reduce the array by a fraction of its size – no matter, how large the fraction– Beware: This is not an average-case. We require to always (not on

average) cut some fraction of A

• Eh magic?• Eh – magic?• No – follows from the way we estimate complexity and

what we consider as inputwhat we consider as input• Many operations now are “hidden” in the constant factors

– q=0 9: c*10*nq=0.9: c 10 n– q=0.99: c*100*n– q=0.999: c*1000*n

Ulf Leser: Alg&DS, Summer semester 2011 28

Page 29: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Median-of-Median

• How can we guarantee to always cut a fraction of A?How can we guarantee to always cut a fraction of A?• Median-of-median algorithm

Ulf Leser: Alg&DS, Summer semester 2011 29

Page 30: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Median-of-Median

• How can we guarantee to always cut a fraction of A?How can we guarantee to always cut a fraction of A?• Median-of-median algorithm

– Partition A in stretches of length 5g

Ulf Leser: Alg&DS, Summer semester 2011 30

Page 31: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Median-of-Median

• How can we guarantee to always cut a fraction of A?How can we guarantee to always cut a fraction of A?• Median-of-median algorithm

– Partition A in stretches of length 5g– Compute the median vi for each partition (with i<floor(n/5))

Ulf Leser: Alg&DS, Summer semester 2011 31

Page 32: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Median-of-Median

• How can we guarantee to always cut a fraction of A?How can we guarantee to always cut a fraction of A?• Median-of-median algorithm

– Partition A in stretches of length 5g– Compute the median vi for each partition (with i<floor(n/5))– Use the median v of all vi as pivot element

• Note: We are not using the v’th element of A, but we generate the value for dividing A into two halves by analyzing A

Ulf Leser: Alg&DS, Summer semester 2011 32

Page 33: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Median-of-Median

• How can we guarantee to always cut a fraction of A?How can we guarantee to always cut a fraction of A?• Median-of-median algorithm

– Partition A in stretches of length 5g– Compute the median vi for each partition (with i<floor(n/5))– Use the median v of all vi as pivot element

• Note: We are not using the v’th element of A, but we generate the value for dividing A into two halves by analyzing A

– This is possible in O(n)p ( )• Run through A in jumps of length 5• Find each median in constant time (“sorting” of lists of length 5 – 5 not

dependent on n – constant time)dependent on n constant time)• Call algorithm recursively on all medians• Since we always reduce the range of values to look at by 80%, this

requires O(n) time (see previous slides)

Ulf Leser: Alg&DS, Summer semester 2011 33

requires O(n) time (see previous slides)

Page 34: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Why Does this Help?y p

• We have ~n/5 first-level-medians vi

• v (as median of medians) is smaller than halve of themv (as median of medians) is smaller than halve of them and greater than the other halve (both ~n/10 values)

• Each vi itself is smaller than (greater than) 2 values from Ai (g )• Since for the smaller (greater) medians this median itself is

also smaller (greater) than v, v is larger (smaller) than at least 3*n/10 elements

Ulf Leser: Alg&DS, Summer semester 2011 34

Page 35: Algorithms and Data StructuresAlgorithms and … and Data StructuresAlgorithms and Data Structures ... – Fibonacci Search ... Ai l d t i l >”X thi ”A is very large and contains

Illustration (source: Wikipedia)

• Finding median-of-median of a randomly permuted list of values 0..99

• For clarity, each 5-tuple is sorted (top-down) and all 5-tuples are sorted by median (left-right)

• Gray/white: Values with actually smaller/greater than med-of-med 47

Ulf Leser: Alg&DS, Summer semester 2011 35

• Blue: Range with certainly smaller / larger values


Recommended