Post on 19-Jan-2016
description
Shay Mozes (Brown University)
Krzysztof Onak (MIT)
Oren Weimann (MIT)
Binary Searchon a Tree
?
4
Locating differences – Binary Search on a Tree
?
=
5
? ?
=
Locating differences – Binary Search on a Tree
• search strategy = decision tree
• Optimal strategy = shallowest decision tree
c
a
d
fe
g
b
(a,c)?
(a,b)? (c,e)?
a c
(a,d)?
a b
b
dd
a
a
(c,f)? (e,g)?
c e
ff
cc
g
ge
e
Search Startegy
Related Work
• BFN [SODA 1997]:O(n4log3n)
• LN [ENDM 2001]:2-approx. in O(nlogn)
• OP [FOCS 2006]:O(n3)
• This paper: O(n)
• IRV [Disc. Appl. Math. 1991]: 2-approx. in O(nlogn)
• TGS [Algorithmica 1995]: O(n3logn)
• LY [SODA 1998]:O(n)
Searching in trees and posets
Tree edge ranking
• f : E → {1,2,3,…}
• If f(e1 ) = f(e2 ), then on the path from e1 to e2 there is e3 with f(e3 ) > f(e1 ) = f(e2 )
c
a
d
fe
g
b
(a,c)?
(a,b)? (c,e)?
a c
(a,d)?
a b
b
dd
a
a
(c,f)? (e,g)?
c e
ff
cc
g
ge
e
Strategy Function
32
2
1
1
1
strategy function bounded by k
decision tree of height k
• Given tree
• Find strategy function with the least maximum
• Convert into a decision tree
c
a
d
fe
g
b
(a,c)?
(a,b)? (c,e)?
a c
(a,d)?
a b
b
dd
a
a
(c,f)? (e,g)?
c e
ff
cc
g
ge
e
Solution Approach
32
2
1
1
1
• e is visible from vertex v if on path from v to e there is no value greater than e
• Lexicographic order on visibility sequencese.g.: (3,2,1) > (3,1)
c
a
d
fe
g
Visibility
3
2
1
1
1
3,1
3,2,1
• Given visibility sequences at children of v
• Extend to minimal visibility sequence at v
• Theorem [OP, de la Torre et al.]:Minimal extensions accumulate to an optimal solution
v
Bottom-Up Approach
c d
fe
g
2 1
1 f
1
• Given strategy functions at children of v
1
2
1
23
3
2
Valid Extension
An extension assigns all f(ei)’s
s1 s2 sk
. . .
v
4
1
0
4
1
0
1
0
f(e1)? f(ek)?f(e2)?
Valid Extension
An extension assigns all f(ei)’s f(ei)= f(ej)
s1 s2 sk
. . .
v
4
1
0
4
1
0
1
0
3 f(ek)?3
Valid Extension
An extension assigns all f(ei)’s f(ei)= f(ej)
f(ei) is not in si
s1 s2 sk
. . .
v
4
1
0
4
1
0
1
0
4 f(ek)?f(e2)?
Valid Extension
An extension assigns all f(ei)’s f(ei)= f(ej)
f(ei) is not in si
f(ei) is in sj f(ej) > f(ei)
s1 s2 sk
. . .
v
4
1
0
4
1
0
1
0
3 4f(e2)?
Valid Extension
An extension assigns all f(ei)’s f(ei)= f(ej)
f(ei) is not in si
f(ei) is in sj f(ej) > f(ei)
u is in si and sj max{f(ei), f(ei)} > u
s1 s2 sk
. . .
v
4
1
0
4
1
0
1
0
2 3
f(ek)?
Algorithm Outline
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
f(e1)? f(ek)?f(e2)?
0 1 2 3 4 5 6free values
Algorithm Outline
set u = max{si}
s1 s2
. . .
v
4
1
0
1
0
1
0
f(e1)? f(e2)?
0 1 2 3 4 5 6free values
u
sk
f(ek)?
Algorithm Outline
set u = max{si}
while not all edges assigned
s1 s2
. . .
v
4
1
0
1
0
1
0
f(e1)? f(e2)?
0 1 2 3 4 5 6free values
u
sk
f(ek)?
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
s1 s2
. . .
v
4
1
0
1
0
1
0
f(e1)? f(e2)?
0 1 2 3 4 5 6free values
u
sk
f(ek)?
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
f(e1)? f(ek)?f(e2)?
0 1 2 3 5 6free values
u
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise:
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
f(e1)? f(ek)?f(e2)?
0 1 2 3 5 6free values
u
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
f(e1)? f(ek)?f(e2)?
0 1 2 3 5 6free values
u ww
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
f(e1)? f(ek)?f(e2)?
0 1 2 3 5 6free values
u ww
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free s1 s2 sk
. . .
v
4
1
0
1
0
1
0
f(e1)? f(ek)?f(e2)?
0 1 3 5 6free values
u ww
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
2 f(ek)?f(e2)?
0 1 3 5 6free values
u ww
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
2 f(ek)?f(e2)?
0 1 3 5 6free values
u ww
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
1
0
2 f(ek)?f(e2)?
0 1 3 5 6free values
u ww
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
1
0
2 f(ek)?f(e2)?
0 1 3 5 6free values
u
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
1
0
2 f(ek)?f(e2)?
0 1 3 5 6free values
u w
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
1
0
2 f(ek)?f(e2)?
0 1 5 6free values
u w
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
1
0
2 f(ek)? 3
0 1 5 6free values
u w
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
2 f(ek)? 3
0 1 5 6free values
u w
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
2 f(ek)? 3
0 1 5 6free values
u
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
2 f(ek)? 3
0 5 6free values
u
and u = 0
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
2 f(ek)? 3
0 5 6free values
u
w
w
and u = 0
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
2 f(ek)? 3
0 6free values
u
w
w
and u = 0
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w (free previous value)
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
4
1
0
5 f(ek)? 3
0 2 6free values
u
w
w
and u = 0
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w (free previous value)
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
1
0
5 f(ek)? 3
0 2 4 6free values
u
w
w
and u = 0
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w (free previous value)
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
1
0
5 f(ek)? 3
0 2 4 6free values
u
and u = 0
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w (free previous value)
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
1
0
5 f(ek)? 3
0 2 4 6free values
u w
and u = 0
w
Sj
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w (free previous value)
mark all Sj values between u and w as free
remove all values < w from Sj
s1 s2 sk
. . .
v
5 2 3
4 6free values
u w
and u = 0
w
Sj
That’s it!
Algorithm Outline
set u = max{si}
while not all edges assignedif u appears once mark u as not free, move to next largest u
otherwise: w = smallest free value > u
Sj = any maximal sequence w.r.t w
mark w as not free
set current f(ej) = w (free previous value)
mark all Sj values between u and w as free
remove all values < w from Sj
s1
vand u = 0
s15
3
2
That’s it!
Running Time
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
Running TimeEasy in O(|S1| + |S2| +…+ |Sk|) per vertex O(n2) total
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
Running TimeEasy in O(|S1| + |S2| +…+ |Sk|) per vertex O(n2) total
But, |S1| + |S2| +…+ |Sk| is not a lower bound!
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
Running TimeEasy in O(|S1| + |S2| +…+ |Sk|) per vertex O(n2) total
But, |S1| + |S2| +…+ |Sk| is not a lower bound!
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
in many cases, the largest values of the largest visibility sequence are unchanged at v itself
Linear Running Time
s1 s2 sk
. . .
v
4
1
0
1
0
1
0
q(v) = |S2| +…+ |Sk|
k(v) = #v’s children
t(v) = largest value that appears in Sv but not in S1
Theorem: an extension can be computed in time O( k(v)+q(v)+t(v) )
Theorem: k(v)+q(v)+t(v) = O(n)
Differs from [LY98]:different data structures
No bit tricks
O(n) decision tree construction
Σv
From Strategy Function to Decision Tree in O(n) Time
From Strategy Function to Decision Tree in O(n) Time
c
a3
d
fe
g
2 1
2 1
1
(a,c)?
(a,b)? (c,e)?
a c
(a,d)?
a b
b
bdd
aa
(c,f)? (e,g)?
c e
ff
cc
g
ge
e
From Strategy Function to Decision Tree in O(n) Time
For all edges e let s = visibility sequence at bottom(e)
if s contains no values smaller than f(e)set bottom(e) as the solution when the query on e returns bottom(e)
else, let v1 <...< vk < f(e) in s, let ei be the edge vi is assigned toset ek as the solution when the query on e returns bottom(e)
for every 1≤ i <k set ei as the solution when the query on ei+1 returns top(ei+1)
set top(e1) as the solution when the query on e1 returns top(e1)
c
a3
d
fe
g
2 1
2 1
1
(a,c)?
(a,b)? (c,e)?
a c
(a,d)?
a b
b
bdd
aa
(c,f)? (e,g)?
c e
ff
cc
g
ge
e
Thank You!