Algoritmos Sweep-Line e a Distˆ ancia de Manhattan
Lu´ıs Fernando Schultz Xavier da Silveira 4 de mar¸co de 2011
Resumo
Dada uma lista denretˆangulos no plano com os lados alinhados aos eixos, ´e poss´ıvel computar a ´area da uni˜ao destes retˆangulos e um ponto coberto por uma quantidade m´axima deles emO(nlogn) atrav´es de algoritmos sweep-line.
Definindo por diamante o lugar geom´etrico dos pontos que distam n˜ao mais do que uma certa distˆancia de uma certa origem, onde a no¸c˜ao de distˆancia ´e dada pela distˆancia de Manhattan, tamb´em ´e poss´ıvel, dada uma lista dendiamantes, calcular a ´area da uni˜ao dos diamantes e exibir um ponto de cobertura m´axima por estes diamantes emO(nlogn). Isto pode ser feito rotacionando o plano em 45 graus, pois esta transforma¸c˜ao mapeia diamantes em quadrados ao mesmo tempo em que ela preserva a ´area da uni˜ao e estabelece uma correspondˆencia bijetiva entre pontos de cobertura m´axima.
Quando observamos o plano como umgrid infinito de c´elulas, a defini¸c˜ao an´aloga para um retˆangulo ´e a de uma matriz finita de c´elulas e a defini¸c˜ao an´aloga para um diamante ´e a do conjunto de c´elulas que distam n˜ao mais do que uma certa distˆancia de uma certa c´elula de origem na distˆancia de Manhattan. No entanto, embora a vers˜ao do problema para retˆangulos ainda admita a mesma solu¸c˜ao que o caso anterior, a vers˜ao para diamantes n˜ao mais admite a redu¸c˜ao `a vers˜ao para retˆangulos, uma vez que n˜ao ´e verdade que a rota¸c˜ao dogrid em 45 graus mapeia diamantes em quadrados.
Felizmente, ainda ´e poss´ıvel resolver o problema para n diamantes em O(nlogn) atrav´es de uma redu¸c˜ao ao caso dos retˆangulos. Por´em, esta redu¸c˜ao ´e um pouco mais complexa que a anterior.
O objetivo deste trabalho ´e apresentar esta redu¸c˜ao e implementar rotinas para resolver este problema.
Sum´ ario
1 Cr´editos 2
2 Introdu¸c˜ao 2
3 Enunciando os Problemas 3
3.1 Grids, Retˆangulos, Diamantes e ´Areas . . . 3
3.2 Coberturas . . . 4
3.3 Os Problemas para Retˆangulos . . . 4
3.4 Os Problemas para Diamantes . . . 4
4 Solu¸c˜oes Sweep-Line para os Problemas para Retˆangulos 5 4.1 A Id´eia dos AlgoritmosSweep-Line . . . 5
4.2 Eventos eSweep-Lines . . . 5
4.3 Os Algoritmos . . . 6
4.4 O Papel de Estruturas de Dados nos AlgoritmosSweep-Line. . . 9
4.5 Compress˜ao de Coordenadas . . . 10
4.5.1 Defini¸c˜ao . . . 10
4.5.2 C´alculo . . . 11
4.5.3 Aplica¸c˜oes . . . 13
4.6 Arvores de Segmentos . . . .´ 14
4.6.1 Introdu¸c˜ao . . . 14
4.6.2 Arvores de Segmentos para o Problema CCMR . . . .´ 15
4.6.3 Arvores de Segmentos para o Problema AUR . . . .´ 18
4.6.4 An´alise de Complexidade . . . 23
4.6.5 Implementa¸c˜oes Iterativas . . . 25
4.7 Alternativas `as ´Arvores de Segmentos . . . 28
5 Uma Redu¸c˜ao dos Problemas dos Diamantes aos dos Retˆangulos 30 6 Implementa¸c˜ao em C 33 6.1 Defini¸c˜oes . . . 33
6.2 Utilit´arios . . . 34
6.3 Ordena¸c˜ao . . . 34
6.4 Compress˜ao de Coordenadas . . . 35
6.5 Gera¸c˜ao de Eventos . . . 36
6.6 Arvores de Segmentos . . . .´ 36
6.7 CCMR e AUR . . . 37
6.8 O Programa Principal . . . 38
1 Cr´ editos
As seguintes pessoas deram uma contribui¸c˜ao importante ao conte´udo deste trabalho:
• Joel Uchoa: propˆos o problema do c´alculo do n´umero de diamantes que cobrem a c´elula mais coberta por diamantes no grid como uma quest˜ao para a prova de sele¸c˜ao dos participantes brasileiros na Olimp´ıada Internacional de Inform´atica (IOI) 2010.
• Wanderley Guimar˜aes: realizou nossa primeira implementa¸c˜ao do algoritmo aqui proposto para resolver este problema e observou que, com ligeiras modifica¸c˜oes, ele poderia ser transformado num algoritmo que resolve o problema do c´alculo da ´area da uni˜ao de diamantes nogrid.
2 Introdu¸ c˜ ao
Diversos problemas fundamentais em geometria computacional admitem solu¸c˜oes eficientes atrav´es de algoritmos sweep-line. Por exemplo, o problema do c´alculo dos m pontos de intersec¸c˜ao determinados porn segmentos de reta no plano pode ser resolvido emO(m+nlogn)[12], o problema da exibi¸c˜ao de dois pontos de distˆancia m´ınima dentrenpontos no plano pode ser resolvido em O(nlogn)[12], o problema da constru¸c˜ao do diagrama de Voronoi de n pontos no plano pode ser resolvido em O(nlogn)[9] e o problema da constru¸c˜ao do casco convexo de um conjunto denpontos no plano admite uma solu¸c˜ao muito mais compacta e simples [1], ainda emO(nlogn), do que o tradicionalGraham-Scan [10].
Dois outros problemas s˜ao de fundamental importˆancia para este trabalho. Dada uma lista denretˆangulos nogrid (ou no plano com os lados alinhados aos eixos), eles se referem ao c´alculo da ´area da uni˜ao destes retˆangulos e da
exibi¸c˜ao de uma c´elula nogrid (ou de um ponto no plano) que pertence a uma quantidade m´axima de retˆangulos.
Ambos os problemas podem ser resolvidos emO(nlogn) atrav´es de algoritmossweep-line [12].
Diamantes s˜ao o lugar geom´etrico dos pontos que distam n˜ao mais do que uma certa distˆancia, o raio do diamante, de uma certa origem em rela¸c˜ao `a distˆancia de Manhattan. Mais especificamente, se a origem for (x0, y0) e o raio forr, o diamante ser´a o conjunto{(x, y) :|x−x0|+|y−y0|6r}.A figura 1 mostra o formato geral de diamantes no plano e nogrid.
Figura 1: Um diamante no plano e um diamante de raio 3 nogrid, respectivamente.
No plano, diamantes podem ser facilmente transformados em quadrados atrav´es de uma rota¸c˜ao de 45 graus. Por causa disto, o problema de, dada uma lista de ndiamantes no plano, computar a ´area da uni˜ao destes diamantes e um ponto que pertence a uma quantidade m´axima deles pode ser facilmente reduzido ao problema an´alogo para retˆangulos. Diamantes no grid, contudo, n˜ao admitem uma transforma¸c˜ao simples, no nosso conhecimento, para que a vers˜ao do problema nogrid possa ser reduzida de forma similar.
Nas pr´oximas se¸c˜oes n´os iremos definir os problemas de computar a ´area da uni˜ao e uma c´elula de cobertura m´axima para retˆangulos e diamantes nogrid de forma formal, iremos apresentar as solu¸c˜oessweep-line para os problemas dos retˆangulos no grid (que na verdade s˜ao essencialmente as mesmas para retˆangulos no plano) e iremos derivar uma transforma¸c˜ao efetiva, embora n˜ao t˜ao simples quanto uma rota¸c˜ao, para que possamos converter o problema dos diamantes no grid no problema dos retˆangulos no grid. Ao final, iremos ainda apresentar implementa¸c˜oes na linguagem C de rotinas que resolvem estes problemas.
3 Enunciando os Problemas
Nesta se¸c˜ao iremos enunciar formalmente os problemas de calcular a ´area da uni˜ao e uma c´elula de cobertura m´axima em suas vers˜oes para retˆangulos e diamantes, ambos nogrid.
3.1 Grids, Retˆ angulos, Diamantes e ´ Areas
O grid ´e o conjunto dos pontos do plano de coordenadas inteiras, Z2. No entanto, ´e comum interpretar o grid, ao menos para fins de visualiza¸c˜ao do conceito de ´area, como uma associa¸c˜ao entre pontos (x, y)∈Z2 do plano e regi˜oes da forma [x, x+ 1]×[y, y+ 1], denominadas c´elulas.
Defini¸c˜ao 1. Denotaremos o conjunto dos n´umeros inteiros entre a∈Zeb∈Zpor [a..b] ={x∈Z:a6x6b}.
Note que [a..b] ={}sea > b.
Defini¸c˜ao 2. Umretˆangulo´e um subconjunto dogridda forma[x0..x1]×[y0..y1], ondex0, y0, x1, y1∈Z,x06x1
ey06y1.
Defini¸c˜ao 3. Um diamante´e um subconjunto do gridda forma
D((x0, y0), r) ={(x, y)∈Z2:|x−x0|+|y−y0|6r}, onde(x0, y0)∈Z2 ´e o centrodo diamante er∈N´e seuraio.
Defini¸c˜ao 4. A ´areade um subconjunto finitoX do grid´e A(X) = #X, a cardinalidade deX.
A ´area ´e interpretada mais facilmente entendendoX como um conjunto de c´elulas, todas de ´area unit´aria.
3.2 Coberturas
SejaR= [R0, R1, . . . , Rn−1] uma lista finita densubconjuntos de um certo conjunto Ω6={}.
Defini¸c˜ao 5. O n´umero de coberturas dex∈ΩporR´e
ρΩR(x) = #{i∈[0..n−1] :x∈Ri}.
Defini¸c˜ao 6. O n´umero m´aximo de coberturas de um elemento deΩ porR´e ρΩR = max
x∈Ω{ρΩR(x)}.
Este n´umero est´a bem definido porqueρΩR(x) ´e limitado superiormente pornpara todox∈Ω6={}.
Defini¸c˜ao 7. O conjunto dos elementos cobertos pork∈Nelementos deR´e σΩR(k) ={x∈Ω :ρΩR(x) =k}.
Defini¸c˜ao 8. O conjunto dos elementos de cobertura m´axima (em rela¸c˜ao a R) ´e σΩR=σRΩ(ρΩR).
3.3 Os Problemas para Retˆ angulos
O problema do c´alculo da ´area da uni˜ao de retˆangulos no grid (AUR) pode ser descrito da seguinte forma: na entrada ser˜ao dados um n´umero natural n ∈ N e n qu´adruplas de n´umeros inteiros (x0,i, y0,i, x1,i, y1,i) ∈ Z4, i∈[0..n−1], satisfazendox0,i6x1,i ey0,i6y1,ipara todoi, e na sa´ıda ser´a pedido o n´umero natural
A
n−1
[
i=0
[x0,i..x1,i]×[y0,i..y1,i]
! .
J´a o problema do c´alculo de uma c´elula de cobertura m´axima por retˆangulos nogrid (CCMR) pode ser descrito de forma similar: na entrada ser˜ao dados um n´umero naturalnenqu´adruplas de n´umeros inteiros (x0,i, y0,i, x1,i, y1,i)∈ Z4,i∈[0..n−1], satisfazendox0,i6x1,iey0,i6y1,i para todoi, e na sa´ıda ser´a pedida uma c´elula (x, y)∈Z2do grid satisfazendo (x, y)∈σRZ2, ondeR= [R0, R1, . . . , Rn−1] ´e uma lista de nretˆangulos tais queRi = [x0,i..x1,i]× [y0,i..y1,i] para todoi.
3.4 Os Problemas para Diamantes
O problema do c´alculo da ´area da uni˜ao de diamantes nogrid (AUD) pode ser definido da seguinte maneira: na entrada ser˜ao apresentados um n´umero naturaln∈Nentriplas de n´umeros (xi, yi, ri)∈Z×Z×N,i∈[0..n−1], e na sa´ıda ser´a requisitado o n´umero natural
A
n−1
[
i=0
D((xi, yi), ri)
! .
Ainda, o problema do c´alculo de uma c´elula de cobertura m´axima por diamantes no grid (CCMD) pode ser especificado como segue: na entrada ser˜ao colocados um n´umero naturaln∈Nentriplas de n´umeros (xi, yi, ri)∈ Z×Z×N, i ∈[0..n−1], e na sa´ıda ser´a pedida uma c´elula (x, y)∈ Z2 dogrid satisfazendo (x, y) ∈σZR2, onde R= [R0, R1, . . . , Rn−1] ´e uma lista dendiamantes nogrid tais queRi=D((xi, yi), ri) para todoi.
4 Solu¸ c˜ oes Sweep-Line para os Problemas para Retˆ angulos
Nesta se¸c˜ao iremos mostrar como os problemas AUR e CCMR podem ser eficientemente resolvidos atrav´es de algoritmos sweep-line. Partes dos algoritmos descritos aqui ser˜ao deixadas em aberto at´e que tenhamos realizado um estudo de ´arvores de segmentos na se¸c˜ao 4.6.
4.1 A Id´ eia dos Algoritmos Sweep-Line
Algoritmos sweep-line em geral se baseiam em invariantes que as instˆancias do problema obedecem em um dos semi-planos determinados por uma reta (asweep-line, que ´e usualmente vertical) e em estrat´egias eficientes para manter essas invariantes mediante o deslocamento desta reta.
Por exemplo, no caso do problema AUR, podemos considerar a ´area α da uni˜ao da intersec¸c˜ao dos retˆangulos com o conjunto das c´elulas de abscissa menor que um certo valor x0. Se asweep-line se deslocar para uma nova abscissax1 (x06x1) e o conjuntoY das ordenadas das c´elulas que est˜ao na uni˜ao dos retˆangulos e possuem como abscissa a abscissa dasweep-linen˜ao variar conforme asweep-linese desloca assumindo coordenadas em [x0..x1−1], temos que a ´area da uni˜ao da intersec¸c˜ao dos retˆangulos com o conjunto das c´elulas de abscissa menor quex1ser´a α+ (x1−x0)×#Y. A figura 2 ilustra esta id´eia.
Figura 2: A ´area adicionada quando asweep-line se desloca dex0parax1.
4.2 Eventos e Sweep-Lines
Se imaginamos que uma linha, a sweep-line, se desloca da esquerda para a direita por todo o plano, ´e natural a no¸c˜ao de evento. Um evento ocorre quando a sweep-line encontra um lado vertical de um dos retˆangulos. Na realidade, se estamos trabalhando no grid, um evento ocorre quando a sweep-line, que ´e uma coluna infinita de c´elulas, cobre a primeira coluna de um retˆangulo (um evento de entrada) ou deixa de cobrir a ´ultima coluna de um retˆangulo (um evento de sa´ıda).
Mais ainda, eventos possuem um ordenamento natural dado pelo “tempo” de ocorrˆencia dos mesmos. ´E processando eventos nessa ordem que os algoritmossweep-line ir˜ao se desenrolar.
Defini¸c˜ao 9. O espa¸co de eventos´e o conjunto
E ={(x, a, b, t)∈Z×Z×Z× {+,−}:a6b}.
Um evento ´e um elemento e= (x, a, b, t)∈ E. Chamaremos de a abscissa do evento o valor x, de o intervalo de ordenadasdo evento o conjunto [a..b] e de otipodo evento o s´ımbolot. Set= +, diremos que o evento ´e um evento de entradae se t=−, diremos que o evento ´e um evento de sa´ıda.
Defini¸c˜ao 10. Aordem de execu¸c˜aode eventos ´e um ordenamento parcial ≺⊆ E × E definido por (x, a, b, t)≺(x0, a0, b0, t0)⇐⇒x < x0.
Seja ent˜aoR= [R0, R1, . . . , Rn−1] uma lista denretˆangulos nogrid, onde Ri = [x0,i..x1,i]×[y0,i..y1,i] para cada i∈[0..n−1].
Defini¸c˜ao 11. Definimos umalista de eventos geradosporRcomo um ordenamento da lista[e0, e1, . . . , e2n−1] pelo ordenamento parcial≺, onde
e2i = (x0,i, y0,i, y1,i,+) e e2i+1= (x1,i+ 1, y0,i, y1,i,−) para todo i∈[0..n−1].
4.3 Os Algoritmos
Aqui iremos definir formalmente os algoritmos que iremos empregar para resolver os problemas AUR e CCMR.
Come¸camos mostrando um algoritmo para gerar uma lista de eventos paraR.
Gera-Lista-de-Eventos(R):
1 E ←uma lista de 2nelementos 2 para ide0at´en−1fa¸ca 3 E2i←(x0,i, y0,i, y1,i,+) 4 E2i+1←(x1,i+ 1, y0,i, y1,i,−) 5 ordene E por≺
6 retorneE
Dado que podemos ordenar um vetor de nelementos emO(nlogn) como descrito em [2], este algoritmo pode ser implementado emO(nlogn) tamb´em.
Agora iremos exibir um algoritmo para resolver o problema AUR.
Area-da-Uni˜´ ao-de-Retˆangulos(R):
1 E←Gera-Lista-de-Eventos(R) 2 S←uma lista vazia
3 α←0
4 para i de 0 at´e 2n−2 fa¸ca 5 (x, a, b, t)←Ei
6 set= + ent~ao
7 insere (a, b) emS
8 sen~ao
9 remove uma c´opia de (a, b) deS 10 (x0, a0, b0, t0)←Ei+1
11 α←α+ (x0−x)·# [
(a,b) emS
[a..b]
12 retornea
O estado deste algoritmo durante sua execu¸c˜ao ´e composto duas vari´aveis: S eα. S´e uma lista de pares ordenados representando intervalos n˜ao-vazios de n´umeros inteiros eα´e um n´umero natural. Inicialmente, ´e computada uma lista de eventos E gerada por R. A principal invariante deste algoritmo ´e que, toda a vez que ele chega na linha 4, antes de testar a condi¸c˜ao doloop, a ´area da uni˜ao das intersec¸c˜oes dos retˆangulos em Rcom o conjunto das c´elulas de coordenadasxmenores quexi, ondexi´e a abscissa doi-´esimo evento emE, ´e igual aα. Ainda, ir´a valer
que sempre quexi < xi+1, quando o algoritmo estiver executando a linha 11, o conjunto das ordenadas das c´elulas na uni˜ao dos retˆangulos emRde abscissaxser´a o mesmo para todoxsatisfazendoxi6x < xi+1 e este conjunto poder´a ser expresso como a uni˜ao dos intervalos emS.
Brevemente demonstraremos a corretude deste algoritmo com base no que foi descrito anteriormente. Por´em, antes disso, cabe dizer que ´e poss´ıvel implement´a-lo emO(nlogn) se utilizarmos uma estrutura de dados apropriada para manter a listaS. Mais detalhes de como isto pode ser feito est˜ao nas se¸c˜oes 4.4, 4.5 e 4.6.
Teorema 1. O algoritmo Area-da-Uni˜´ ao-de-Retˆangulos(R)corretamente computa a ´area da uni˜ao da lista de retˆangulosR.
Demonstra¸c˜ao. Ap´os o c´alculo de uma lista de eventos gerados por R na linha 1, defina xi como a abscissa do eventoEi.
A demonstra¸c˜ao ser´a baseada na seguinte invariante deloop: toda vez que o algoritmo passa pela linha 4 (antes de executar a compara¸c˜ao doloop), ´e v´alido queα= #Ai, onde
Ai =
(x, y)∈
n−1
[
j=0
Rj :x < xi
.
Como a lista E est´a ordenada por ≺, x0 6xi para todoi. Ainda, cada c´elula (x, y) de um retˆangulo ´e tal que xu6x < xv para ´ındices uev, e assimx06x, donde conclu´ımos queA0={}. Mas como inicializamosαcomo 0 na linha 3, temos que come¸camos a invariante corretamente.
Suponha agora que a invariante valha quando entramos na linha 4 para um determinado valor dei. Sexi=xi+1, temos que o valor deαficar´a o mesmo e, por defini¸c˜ao,Ai=Ai+1, e assim a invariante ser´a trivialmente mantida.
Suponha ent˜ao, sem perda de generalidade, que xi < xi+1. Considere ent˜ao que o algoritmo foi executado at´e a linha 11 (n˜ao a tendo executado ainda). Seja ent˜ao
C(x) =
y∈Z: (x, y)∈
n−1
[
j=0
Rj
.
Chamaremos deC(x) o corte dos retˆangulos na abscissax.
Gostar´ıamos de demonstrar queC(x) =C(xi) para todoxsatisfazendoxi 6x < xi+1. Fixe ent˜ao umxsatisfazendo esta restri¸c˜ao. Vamos mostrar quey ∈ C(x)⇐⇒y∈ C(xi) para todoy∈Z. Suponha ent˜ao quey∈ C(xi). Existe ent˜ao um retˆanguloRj tal que (xi, y)∈Rj. Logox0,j 6xi6x1,j. Masx1,j >xi+1−1, pois do contr´ario o evento de sa´ıda deRj teria abscissax1,j+ 1, masxi< x1,j+ 1< xi+1, contradizendo a listaE estar ordenada por≺(este evento deveria vir antes do eventoi+ 1 e depois do eventoi). Logox0,j 6xi6x6x1,j, poisx < xi+16x1,j+ 1.
Assim a c´elula (x, y) tamb´em pertence aRj ey∈ C(x). A prova dey∈ C(x) =⇒y∈ C(xi) ´e an´aloga.
Agora mostraremos que
C(xi) = [
(a, b) emS
[a..b].
Para isso, considere um retˆangulo Rj. Se x1,j < xi, temos que seu evento de sa´ıda tem abscissa x1,j + 1 6xi e portanto j´a foi processado. Assim, a c´opia que seu evento de entrada deixou emS j´a foi retirada. Similarmente, sex0,j > xi, seu evento de entrada ainda n˜ao foi processado e assim seu evento de sa´ıda ainda n˜ao foi processado.
Portanto nenhum evento gerado por este retˆangulo afetou a lista S ainda. Finalmente, se x0,j 6xi 6x1,j, seu evento de entrada (abscissax0,j 6xi) j´a foi processado mas seu evento de sa´ıda (abscissax1,j+ 1> xi) ainda n˜ao e, portanto, S cont´em uma c´opia do intervalo de ordenadas [ai..bi] de Rj. Assim, conclu´ımos que S ´e uma lista contendo uma c´opia de cada intervalo de ordenadas de retˆangulos que intersectam{(xi, y) :y∈Z}, a sweep-line, e assim o resultado segue.
Para manter a invariante, precisamos somar emαo valor #B, onde
B=
(x, y)∈
n−1
[
j=0
Rj:xi6x < xi+1
,
poisAi∩B={}eAi∪B =Ai+1. Mas
#B=
xi+1−1
X
x=xi
#
y∈Z: (x, y)∈
n−1
[
j=0
Rj
=
xi+1−1
X
x=xi
#C(x) = (xi+1−xi)#C(xi).
E isso mostra que o assinalamento deαna linha 11 preserva o invariante.
Dessa forma acabamos de demonstrar que este invariante deloop´e preservado durante toda a execu¸c˜ao do algoritmo e assim que, em particular, ele vale na passagem pela linha 4 quandoi= 2n−1.
Por´em, por um argumento similar ao que fizemos no in´ıcio da demonstra¸c˜ao, n˜ao h´a c´elula na uni˜ao dos retˆangulos com abscissa maior ou igual ax2n−1, e assim
#A2n−1= #
n−1
[
j=0
Rj.
Mas comoα= #A2n−1, temos que o algoritmo retorna o valor correto na linha 12, e isso conclui a sua prova de corretude.
Iremos agora exibir um algoritmo para tratar do problema CCMR.
C´elula-de-Maior-Cobertura(R):
1 E←Gera-Lista-de-Eventos(R) 2 S←uma lista vazia
3 ρ←0
4 (x∗, y∗)←(0,0)
5 para i de 0 at´e 2n−2 fa¸ca 6 (x, a, b, t)←Ei
7 set= + ent~ao
8 insere (a, b) emS
9 sen~ao
10 remove uma c´opia de (a, b) deS 11 (x0, a0, b0, t0)←Ei+1
12 sex6=x0 ent~ao
13 ρ0 ←ρZS
14 seρ0> ρent~ao
15 ρ←ρ0
16 x∗←x
17 y∗←algu´em emσSZ 18 retorna(x∗, y∗)
Os coment´arios e a demonstra¸c˜ao da corretude deste algoritmo a seguir ser˜ao an´alogos aos do algoritmo anterior.
O estado deste algoritmo ´e constitu´ıdo de quatro vari´aveis: S, ρ, x∗ e y∗. S ´e uma lista de pares ordenados representando intervalos n˜ao-nulos de n´umeros inteiros,ρ´e um n´umero natural e (x∗, y∗)∈Z2 s˜ao as coordenadas de uma c´elula do grid. No in´ıcio do algoritmo ´e calculada uma lista de eventosEgerada porR. A invariante mais importante que este algoritmo ir´a manter ´e que, toda vez que ele passa pela linha 5 (antes de testar a condi¸c˜ao do loop), (x∗, y∗) ´e um ponto coberto por uma quantidade m´axima de elementos na lista da intersec¸c˜ao dos retˆangulos em Rcom o conjunto de c´elulas dogrid com abscissa xmenor do que xi, xi sendo a abscissa do i-´esimo evento deE, e ρ´e a quantidade destes elementos cobrindo (x∗, y∗). Ainda, sempre quexi < xi+1 para algum i, quando o algoritmo estiver passando pela linha 12 (antes de execut´a-la), a lista dos intervalos de ordenadas das c´elulas de um retˆangulo de Rque possuem abscissaxser´a, a menos de uma permuta¸c˜ao, a mesma para todo xsatisfazendo xi6x < xi+1. Al´em disso, esta lista ser´a, ap´os os intervalos vazios serem removidos, uma permuta¸c˜ao deS.
Antes de provarmos que este algoritmo funciona corretamente, cabe dizer que se utilizarmos uma estrutura de dados apropriada para implementar a lista S, podemos fazer com que ele execute emO(nlogn). Mais detalhes de como isso pode ser feito est˜ao nas se¸c˜oes 4.4, 4.5 e 4.6.
Teorema 2. O algoritmo C´elula-de-Maior-Cobertura(R)corretamente computa uma c´elula emσRZ2.
Demonstra¸c˜ao. Ap´os a execu¸c˜ao da linha 1, onde obtemos uma listaE de eventos gerados por R, definaxi como a abscissa doi-´esimo evento.
A demonstra¸c˜ao ter´a como base a seguinte invariante deloop: toda vez que o algoritmo passa pela linha 5 (antes de executar a compara¸c˜ao doloop), ´e v´alido que
ρ=ρZA2
i e (x∗, y∗)∈σAZ2
i, ondeAi´e a lista denelementos
{(x, y)∈Rj:x < xi}n−1j=0 .
Como E foi ordenado por≺, xi 6xi+1 para todo i. Al´em disso, pelo modo como foram gerados os eventos, cada c´elula (x, y) de um retˆangulo ´e tal quexu6x < xvpara ´ındicesuev, e assimx06x, e portanto a listaAicont´em apenas intervalos vazios no in´ıcio do algoritmo. Dessa forma, a inicializa¸c˜ao deρcomo 0 e a de (x∗, y∗) como um ponto qualquer s˜ao suficientes para come¸car a invariante corretamente.
Suponha ent˜ao que a invariante valha quando entramos na linha 5 para um determinado valor dei. Sexi=xi+1, a listaAi n˜ao muda incrementandoi(Ai=Ai+1) e, pela checagem feita na linha 12, os valores deρ,x∗ ey∗tamb´em n˜ao. Portanto nesse caso a invariante ´e mantida trivialmente.
Suponha ent˜ao, sem perda de generalidade, quexi < xi+1. Considere ent˜ao que o algoritmo executou at´e a linha 12 (exclusive). Defina
C(x) ={y∈Z: (x, y)∈Rj}n−1j=0 .
Por um argumento completamente an´alogo ao empregado no teorema 1, C(x) = C(xi) para todo xsatisfazendo xi6x < xi+1.
O que gostar´ıamos de mostrar agora ´e que se removermos todos os intervalos vazios da listaC(xi), obteremos uma permuta¸c˜ao da lista S. Para isso, considere um retˆangulo Rj. Se x1,j < xi, o retˆangulo Rj j´a teve seus dois eventos processados, n˜ao contribuindo nenhum intervalo para S, e assim marcamos para remo¸c˜ao em C(xi) seu j-´esimo elemento. Similarmente, sex0,j > xi, o evento de entrada (e logo o de sa´ıda) do retˆanguloRj ainda n˜ao foi processado, e assim ele tamb´em n˜ao contribuiu nenhum intervalo paraS e podemos marcar oj-´esimo elemento deC(xi) para remo¸c˜ao.
Remova agora os elementos marcados deC(xi). Vamos mostrar que esta lista resultante ´e uma permuta¸c˜ao da lista dos intervalos em S. Seja ent˜aoj tal quex0,j 6xi6x1,j. O evento de entrada deste retˆangulo (abscissax0,j) foi processado mas seu evento de sa´ıda (abscissax1,j+ 1> xi) ainda n˜ao. Assim, ele contribui um intervalo [y0,j..y1,j] paraS. E comoS n˜ao possui outros intervalos (analisamos todas as possibilidades para Rj), o resultado segue.
Para manter a invariante, observe que uma c´elula (x0, y0) ∈σZA2
i+1 deve satisfazer ou x0 < xi ou xi 6x0 < xi+1. Dentre as c´elulas que satisfazemx0 < xi temos que (x∗, y∗) ´e uma c´elula coberta por uma quantidade m´axima de elementos. Agora considere quexi6x0< xi+1. Nesse caso, note queρZA2i+1=ρZA2
i+1\Ai =ρZC(x0)=ρZC(x
i)=ρZS. Como o teste executado na linha 14 ´e suficiente para discernir se existe uma c´elula emσZA2
i+1 com coordenada menor do que xi, a invariante ´e mantida. Isso ocorre porque se ela existir, nossa decis˜ao de manter (x∗, y∗) ser´a correta e, se ela n˜ao existir, a nova c´elula ter´a coordenada (xi, y0), ondey0∈σSZ, de forma queρZA2
i+1(xi, y0) =ρZC(x
i)(y0) = ρZS(y0) =ρZS e (xi, y0)∈σAZ2
i+1.
Assim, quando oloop acaba comivalendo 2n−1, a invariante nos mostra que (x∗, y∗)∈σZA22n−1, masA2n−1=R, pois todo retˆanguloRj emRsatisfazx1,j < x2n−1 e isso conclui a demonstra¸c˜ao.
4.4 O Papel de Estruturas de Dados nos Algoritmos Sweep-Line
Um ponto importante que ficou em aberto nos algoritmos Area-da-Uni˜´ ao-de-Retˆangulos e C´elula-de- Maior-Cobertura´e a representa¸c˜ao da listaS. Se ela for representada como uma simples sequˆencia de pares or- denados de n´umeros inteiros, as opera¸c˜oes de inser¸c˜ao e remo¸c˜ao (linhas 7 e 9 deArea-da-Uni˜´ ao-de-Retˆangulos e linhas 8 e 10 deC´elula-de-Maior-Cobertura) podem ser implementadas emO(1) eO(n), respectivamente.
Isso em si ´e ineficiente para nossos prop´ositos, pois dessa forma os dois algoritmos teriam como limite superior no seu tempo de execu¸c˜ao apenas O(n2), sem contar o tempo tomado pela opera¸c˜ao de c´alculo da cardinalidade da uni˜ao (linha 11 deArea-da-Uni˜´ ao-de-Retˆangulos) ou do c´alculo de ρZS e de um elemento de σSZ (linhas 13 e 17 deC´elula-de-Maior-Cobertura).
Ali´as, essas opera¸c˜oes s˜ao as mais dif´ıceis de se implementar eficientemente, visto que uma implementa¸c˜ao ingˆenua tem uma complexidade que depende (ao menos linearmente) da magnitude das coordenadas da entrada, algo que ´e altamente indesej´avel, pois estes valores podem ser muito grandes.
Os principais resultados que iremos demonstrar nesta se¸c˜ao s˜ao referentes a limites superiores para o tempo de execu¸c˜ao dos algoritmos que expusemos na se¸c˜ao anterior se pudermos assumir certos limites superiores para as principais opera¸c˜oes na listaS. Com eles, poderemos nos preocupar, daqui em diante, apenas em implementar S eficientemente, deixando para tr´as a natureza geom´etrica dos problemas.
Teorema 3. Suponha que exista uma implementa¸c˜ao deStal que as opera¸c˜oes de inser¸c˜ao de um intervalo, remo¸c˜ao de uma c´opia de um intervalo existente e c´alculo da cardinalidade da uni˜ao dos intervalos possam ser implementadas todas em O(logn). Ent˜ao, com essa implementa¸c˜ao, o algoritmo Area-da-Uni˜´ ao-de-Retˆangulos roda em O(nlogn).
Demonstra¸c˜ao. O loop da linha 4 tem O(n) itera¸c˜oes, sendo que em cada uma delas cada opera¸c˜ao descrita ´e executada no m´aximo uma vez.
Teorema 4. Suponha que exista uma implementa¸c˜ao deStal que as opera¸c˜oes de inser¸c˜ao de um intervalo, remo¸c˜ao de uma c´opia de um intervalo existente, c´alculo deρZS e c´alculo de um elemento emσSZ possam ser implementadas emO(logn). Ent˜ao, com essa implementa¸c˜ao, o algoritmoC´elula-de-Maior-Coberturaroda em O(nlogn).
Demonstra¸c˜ao. O loop da linha 5 tem O(n) itera¸c˜oes, sendo que em cada uma delas cada opera¸c˜ao descrita ´e executada no m´aximo uma vez.
4.5 Compress˜ ao de Coordenadas
Em v´arios algoritmos, n˜ao s´o geom´etricos, a habilidade de indexar valores por coordenadas ´e essencial. T´ecnicas modernas de implementa¸c˜ao dearrays associativos tornam isso poss´ıvel, usualmente custandoO(logn) por mape- amento dentro de um espa¸co den coordenadas. Contudo, para a maioria das aplica¸c˜oes, a constante envolvida na nota¸c˜aoOdestas t´ecnicas ´e muito alta, al´em de suas implementa¸c˜oes serem n˜ao-triviais em geral.
O que descreveremos aqui ´e um m´etodo para utilizar o conhecido problema da ordena¸c˜ao para possibilitar uma vers˜ao um pouco mais restrita deste tipo de mapeamento. Os algoritmos envolvidos s˜ao, portanto, bem estudados e altamente eficientes.
4.5.1 Defini¸c˜ao
Defini¸c˜ao 12. Seja a0, a1, . . . , an−1 ∈Z uma sequˆencia finita de n coordenadas inteiras. Uma compress˜ao de coordenadasparaa0, a1, . . . , an−1 ´e um par de fun¸c˜oes(ϕ, ξ)da forma
ϕ: [0..n−1] −→ [0..n−1]
i 7−→ ϕ(i) e ξ: Im(ϕ) −→ Z
y 7−→ ξ(y)
satisfazendo as seguintes condi¸c˜oes:
• Preserva¸c˜ao da ordem: para todos i, j∈[0..n−1],ai< aj ⇐⇒ϕ(i)< ϕ(j).
• Compacidade: existe m∈[0..n]tal queIm(ϕ) = [0..m−1].
• Consistˆencia: para todoi∈[0..n−1],ξ(ϕ(i)) =ai.
Proposi¸c˜ao 1. Seja (ϕ, ξ) uma compress˜ao de coordenadas para a0, a1, . . . , an−1 ∈ Z. Ent˜ao, para todos x, y ∈ Im(ϕ),x < y⇐⇒ξ(x)< ξ(y).
Demonstra¸c˜ao. Sejamiej tais quex=ϕ(i) e y=ϕ(j). Ent˜aox < y⇐⇒ϕ(i)< ϕ(j)⇐⇒ai< aj⇐⇒ξ(ϕ(i))<
ξ(ϕ(j))⇐⇒ξ(x)< ξ(y).
A id´eia ´e que uma compress˜ao de coordenadas mapeia as coordenadasa0, a1, . . . , an−1em um conjunto “pequeno”
e cont´ıguo de n´umeros inteiros, nominalmente algum conjunto da forma [0..m−1] para algum m ∈ [0..n], que pode ser usado como o conjunto de entradas de um vetor. A compress˜ao de coordenadas precisa preservar a ordem relativa das coordenadas e, al´em disso, deve ser poss´ıvel obter as coordenadas originais a partir das coordenadas comprimidas. Note, no entanto, que n˜ao ´e poss´ıvel obter as coordenadas comprimidas a partir das coordenadas originais: devemos usar um ´ındice de uma coordenada original.
A figura 3 mostra um exemplo de compress˜ao de coordenadas.
Figura 3: Uma compress˜ao de coordenadas para uma sequˆencia de 11 elementos. A tabela define a sequˆencia e a fun¸c˜aoϕ. A fun¸c˜aoξest´a ilustrada graficamente. Seu dom´ınio, o intervalo [0..m−1] comm= 8, est´a representado em baixo de seu contradom´ınio, os n´umeros inteiros. O dom´ınio e a imagem deξest˜ao hachurados.
4.5.2 C´alculo
Como as fun¸c˜oesϕeξ s˜ao fun¸c˜oes de dom´ınios da forma [0..k−1] para determinados valores dek, ´e natural que, em nossos algoritmos, representemos estas duas fun¸c˜oes como vetores. Assim sendo, podemos exibir um algoritmo para computar uma compress˜ao de coordenadas, mas primeiro precisamos das seguintes defini¸c˜oes.
Defini¸c˜ao 13. Asfun¸c˜oes projec˜aoem Z2 s˜ao
π0: Z2 −→ Z
(x, y) 7−→ x e π1: Z2 −→ Z (x, y) 7−→ y.
Defini¸c˜ao 14. O ordenamento parcial de pares de n´umeros inteiros≺0⊆Z2×Z2 ´e definido por(a, b)≺0 (x, y)⇐⇒
a < x.
Consideremos ent˜ao o seguinte algoritmo.
Compress˜ao-de-Coordenadas(a0, a1, . . . , an−1):
1 para i de 0 at´e n−1 fa¸ca 2 bi←(ai, i)
3 ordeneb0, b1, . . . , bn−1 pelo ordenamento parcial≺0 4 m←0
5 i←0
6 enquanto i6=n fa¸ca
7 j←i
8 enquanto j6=n∧π0(bi) =π0(bj) fa¸ca 9 ϕ(π1(bj))←m
10 j←j+ 1
11 ξ(m)←π0(bi)
12 m←m+ 1
13 i←j
14 retorne (m, ϕ, ξ)
Antes de demonstrar que ele est´a correto, vamos considerar sua eficiˆencia. Durante a execu¸c˜ao das linhas de 7 a 13, o valor dei´e incrementado no n´umero de vezes que oloop da linha 8 ´e executado. Como esteloop´e executado no m´ınimo uma vez (a condi¸c˜ao ´e sempre verdadeira parai=j), o valor deisempre ´e incrementado em ao menos um.
Assim, as linhas 9 e 10 s˜ao executadas precisamentenvezes e as linhas 7, 8, 11, 12 e 13 s˜ao executadas no m´aximo nvezes. Portanto oloop da linha 6 roda emO(n). Al´em disso, oloop da linha 1 obviamente roda em O(n), o que faz a ordena¸c˜ao na linha 3, que roda emO(nlogn), dominar o custo do algoritmo. Temos ent˜ao que o algoritmo como um todo roda emO(nlogn).
A demonstra¸c˜ao da corretude deste algoritmo se dar´a atrav´es do seguinte resultado.
Teorema 5. Se (m, ϕ, ξ) ´e retornado por uma chamada a Compress˜ao-de-Coordenadas(a0, a1, . . . , an−1), ent˜ao (ϕ, ξ)´e uma compress˜ao de coordenadas paraa0, a1, . . . , an−1 eIm(ϕ) = [0..m−1].
Demonstra¸c˜ao. Durante esta demonstra¸c˜ao os valores deb0, b1, . . . , bn−1ser˜ao considerados ordenados por≺0assu- mindo que o algoritmo j´a passou pela linha 3. Defina ent˜aoXi={π1(b0), π1(b1), . . . , π1(bi−1)}. Iremos demonstrar a seguinte invariante de loop: toda vez que o algoritmo passa pela linha 6, antes de executar a compara¸c˜ao, s˜ao v´alidas as seguintes afirma¸c˜oes, considerando os valores atuais dei em.
• ϕj´a foi definida no dom´ınioXi eξj´a foi definida no dom´ınio [0..m−1].
• Para todos os valoresp, q∈Xi, ap< aq ⇐⇒ϕ(p)< ϕ(q).
• Im(ϕ) = [0..m−1] = Dom(ξ).
• Para todop∈Xi,ξ(ϕ(p)) =ap.
• Oui∈ {0, n} ouπ0(bi−1)< π0(bi).
Na primeira vez que o algoritmo passa pela linha 6, temos i=m= 0, ent˜ao as afirma¸c˜oes acima s˜ao triviais, pois Xi = [0..m−1] = Im(ϕ) = Dom(ξ) ={}.
Suponha ent˜ao que o algoritmo esteja na linha 6 e estas condi¸c˜oes se verifiquem. Vamos mostrar que se ele retornar a esta linha as condi¸c˜oes ainda ser˜ao verificadas. Podemos ent˜ao assumir, sem perda de generalidade, que i6=n, uma vez quei=nimplica que oloop ser´a cancelado.
Definak= 1 + max{j ∈[i..n−1] :π0(bi) =π0(bj)}. Claramente,π0(bi) =π0(bi+1) =· · ·=π0(bk−1) e ouk=nou π0(bk−1)< π0(bk). Quando o algoritmo executar as linhas de 7 a 13, antes de retornar `a linha 6, as seguintes a¸c˜oes ser˜ao executadas:
• ϕ(p) ser´a definida parap∈ {π1(bi), π1(bi+1), . . . , π1(bk−1)}=Xk\Xi comom.
• ξ(m) ser´a definida comoπ0(bi).
• m ser´a incrementado.
• i se tornar´ak.
Portanto, para manter a invariante precisamos provar que:
• ϕestar´a definida emXk eξestar´a definida em [0..m].
• Sep, q∈Xk masp6∈Xi ouq6∈Xi, ent˜aoap < aq ⇐⇒ϕ(p)< ϕ(q).
• Im(ϕ) = [0..m] = Dom(ξ).
• Para todop∈Xk\Xi, ξ(ϕ(p)) =ap.
• Ouk=nouπ0(bk−1)< π0(bk).
A primeira afirma¸c˜ao ´e trivial. A segunda pode ser mostrada da seguinte forma. Seja p, q∈ Xk comp=π1(bx) e q = π1(by). Suponha primeiro que 0 6 x < i 6 y < k de forma que p ∈ Xi mas q 6∈ Xi. Neste caso, pela defini¸c˜ao de b0, b1, . . . , bn−1, temos que ap = π0(bx) e aq = π0(by). Pela quinta hip´otese da invariante, π0(bx) < π0(bi) = · · · = π0(by) = · · · = π0(bk−1), donde ap = π0(bx) < π0(by) = aq. Mas ϕ(p) < m = ϕ(q), pois m´e sempre incrementado durante o curso do algoritmo e seu valor atual s´o foi usado para definirϕ(x) para x∈Xk\Xi, o que prova este caso. Suponha agora que i6p, q < k, ou seja,p, q∈Xk\Xi. Temos, similarmente, queap=π0(bx) =π0(by) =aq e tamb´em temos que ϕ(p) =m=ϕ(q), o que prova esta afirma¸c˜ao.
A terceira afirma¸c˜ao tamb´em ´e trivial. Para demonstrar a quarta afirma¸c˜ao, observe que sep∈Xk\Xi,ϕ(p) =m e assimξ(ϕ(p)) =ξ(m) =π0(bi) =· · ·=π0(bx) =ap, ondep=π1(bx). Logo,ξ(ϕ(p)) =ap para todop∈Xk\Xi, o que prova o resultado.
A quinta e ´ultima afirma¸c˜ao ´e simples: sek6=n, ent˜aoπ0(bk−1) =π0(bk) contradiz a maximalidade dek, conforme sua defini¸c˜ao.
Com a invariante demonstrada, podemos olhar para o que ocorre ap´os a ´ultima itera¸c˜ao do algoritmo, ou seja, quandoi=n. Especificamente, a primeira, segunda, terceira e quarta afirma¸c˜oes s˜ao precisamente a defini¸c˜ao de (ϕ, ξ) ser uma compress˜ao de coordenadas paraa0, a1, . . . , an−1, pois, visto que x7→π1(bx) ´e uma permuta¸c˜ao de [0..n−1] (pela defini¸c˜ao deb0, b1, . . . , bn−1), temos queXn= [0..n−1].
Finalmente, o fato de Im(ϕ) = [0..m−1] pode ser extra´ıdo da terceira afirma¸c˜ao da invariante.
4.5.3 Aplica¸c˜oes
A compress˜ao de coordenadas ´e uma t´ecnica que pode ser utilizada para reduzir problemas a casos particulares em que estruturas de dados eficientes podem ser utilizadas. Por exemplo, considere o problema do c´alculo do n´umero de subsequˆencias crescentes de uma determinada sequˆencia a0, a1, . . . , an−1 (possivelmente m´odulo algum valor para limitar a magnitude da resposta). Se (ϕ, ξ) ´e uma compress˜ao de coordenadas paraa0, a1, . . . , an−1, ent˜ao o n´umero de subsequˆencias crescentes ´e igual paraa0, a1, . . . , an−1eϕ(a0), ϕ(a1), . . . , ϕ(an−1). Contudo, temos queϕ(ai)< n para todo i, e assim podemos indexar as coordenadas, possibilitando uma solu¸c˜ao eficiente em O(nlogn) atrav´es do uso de ´arvores de Fenwick [8][11].
O que se pode observar deste exemplo ´e que a compress˜ao de coordenadas ´e um artif´ıcio muito ´util para lidar com problemas onde a ordem dos elementos ´e o que importa, n˜ao a magnitude deles. ´E um exerc´ıcio interessante demonstrar que o n´umero de retˆangulos que cobrem um ponto coberto por uma quantidade m´axima de retˆangulos numa lista finita de retˆangulos n˜ao varia se as coordenadas no eixoxe no eixoydos retˆangulos forem comprimidas.
Um resultado ligeiramente diferente ser´a demonstrado no final desta se¸c˜ao.
As estruturas de dados que iremos utilizar para resolver os problemas AUR e CCMR s´o s˜ao realmente eficientes se pudermos assumir que as coordenadas y dos eventos est˜ao contidas em um intervalo de n´umeros inteiros de comprimentoO(n). Se isso n˜ao se verificar, elas ser˜ao em geral terr´ıvelmente ineficientes.
Mas os problemas que iremos resolver tratam de coordenadasygerais. Assim, ´e o prop´osito desta se¸c˜ao estabelecer um resultado que nos possibilitar´a reduzir o problema CCMR a uma vers˜ao onde as coordenadasys˜ao limitadas, de forma que nossa estrutura de dados seja eficiente o suficiente para aplicarmos o teorema 4. O problema AUR tem uma redu¸c˜ao um pouco mais complicada, pois ela est´a fortemente ligada `a estrutura de dados que iremos utilizar, e assim n´os iremos postergar esta redu¸c˜ao at´e que tenhamos tratado dela com mais propriedade.
Teorema 6. Seja R = [R0, R1, . . . , Rn−1] uma lista de n retˆangulos onde Ri = [x0,i..x1,i]×[y0,i..y1,i]. Sejam a0, a1, . . . , a2n−1 ∈Z definidos por a2i =y0,i ea2i+1 =y1,i para todo i ∈[0..n−1]. Seja (ϕ, ξ) uma compress˜ao de coordenadas para a0, a1, . . . , a2n−1. Defina ent˜aoR0 = [R00, R01, . . . , R0n−1]como uma lista de nretˆangulos onde Ri0 = [x0,i..x1,i]×[ϕ(2i)..ϕ(2i+ 1)]. Ent˜ao ρZR2 =ρZR20 e, se(x, y)∈σRZ20,(x, ξ(y))∈σZR2.
Demonstra¸c˜ao. Seja (x, y)∈ σZR20 um ponto coberto pelos retˆangulos R0i0, R0i1, . . . , R0ik−1, onde k = ρZR20 e ip 6=iq
sempre quep6=q, 06p, q < k. Sejaj =ip para algump∈[0..k−1]. (x, y)∈R0j ´e equivalente a x0,j 6x6x1,j
eϕ(2j)6y6ϕ(2j+ 1). Comoϕ(2j)6y 6ϕ(2j+ 1) e a imagem de ϕ´e cont´ıgua, y∈Im(ϕ). Dessa forma, pela proposi¸c˜ao 1, temos que
ϕ(2j)6y6ϕ(2j+ 1) ⇐⇒ ξ(ϕ(2j))6ξ(y)6ξ(ϕ(2j+ 1))
⇐⇒ a2j 6ξ(y)6a2j+1
⇐⇒ y0,j 6ξ(y)6y1,j, o que mostra que (x, ξ(y))∈Rj.
Assim, conseguimos um ponto, nominalmente (x, ξ(y)), coberto por ao menos k =ρZR20 retˆangulos de R, o que ´e suficiente para conclu´ırmos queρZR2 >ρZR20. Dessa forma, se pudermos provar queρZR2 6ρZR20, teremos conclu´ıdo a demonstra¸c˜ao, poisρZR2(x, ξ(y))>ρZR20 >ρZR2 =⇒(x, ξ(y))∈σRZ2.
De fato, seρZR2= 0, o resultado ´e imediato. SeρZR2 6= 0 e (x, y)∈σRZ2 de forma queρZR2(x, y) =ρZR2, ent˜ao existeRi
emRtal quey>y0,i, pois do contr´arioρZR2(x, y) = 0. Assim podemos definiry0= max (
y0∈
n−1
[
i=0
{y0,i, y1,i}:y06y )
. Se (x, y)∈Ri para algum i, x0,i 6x6x1,i ey0,i 6y0 6y 6 y1,i, de forma que (x, y0) ∈Ri, o que mostra que ρZR2(x, y0)>ρZR2(x, y) =ρZR2. Mas, pela defini¸c˜ao dey0, existej∈[0..2n−1] tal queaj =y0. Assim,
(x, ϕ(j))∈R0i ⇐⇒ x0,i6x6x1,i∧ϕ(2i)6ϕ(j)6ϕ(2i+ 1)
⇐⇒ x0,i6x6x1,i∧a2i6aj6a2i+1
⇐⇒ x0,i6x6x1,i∧y0,i6y06y1,i,
o que ´e verdadeiro. Dessa forma, o ponto (x, ϕ(y)) pertence a R0i sempre que (x, y) ∈ Ri, o que mostra que ρZR20 >ρZR2, como desej´avamos.
Por causa deste resultado, podemos desenvolver um algoritmo que, emO(nlogn) comprime as coordenadas no eixo y dos retˆangulos e ent˜ao executa C´elula-de-Cobertura-M´axima com a nova lista de retˆangulos, tamb´em em O(nlogn). A diferen¸ca ´e que agora a nossa estrutura de dados poder´a assumir que as coordenadas y dos eventos est˜ao no intervalo [0..2n−1], como quer´ıamos.
4.6 Arvores de Segmentos ´
4.6.1 Introdu¸c˜ao
Arvores de segmentos s˜´ ao estruturas de dados gerais, simples de programar, flex´ıveis e eficientes que operam sobre mon´oides. Contudo, infelizmente um estudo padr˜ao sobre estas ´arvores n˜ao cabe aqui porque suas estruturas gerais tiveram de ser enormemente modificadas para que elas fossem utiliz´aveis nos problemas que iremos resolver. Dessa forma apresentaremos duas vers˜oes destas estruturas de dados voltadas especificamente aos problemas CCMR e AUR.
Antes, no entanto, gostar´ıamos de descrever a estrutura geral das ´arvores de segmentos. ´Arvores de segmentos s˜ao formadas por um n´umero fixo mde folhas e m−1 n´os internos, cada um com exatamente dois filhos. Ainda, h´a uma restri¸c˜ao de que m deve ser uma potˆencia de 2, digamos m= 2k para algum k∈N. Podemos denominar os elementos da ´arvore por t1, t2, . . . , tm−1, tm, tm+1, . . . , t2m−1, onde os elementost1, t2, . . . , tm−1 s˜ao n´os internos e os elementostm, tm+1, . . . , t2m−1 s˜ao folhas. Ainda, de acordo com o estudo deheaps realizado em [3], o pai de um elementoticomi6= 1 ´e o elementotbi2ce os filhos do elementoticomi < ms˜ao os elementost2iet2i+1. Finalmente, quando nos referirmos aointervalo determinadopor um elementoti, estamos nos referindo ao conjunto cont´ıguo
Ii dos ´ındices das folhas que tˆem como ancestral o n´o ti menosm. Especificamente, o intervalo determinado pelo n´o ti ´e o conjunto
Ii=
m(i−2h)
2h ..m(i+ 1−2h)
2h −1
,
onde h´e a altura do elemento ti (sua distˆancia at´e a raiz da ´arvore). Os extremos deste intervalo s˜ao n´umeros inteiros porque 2h dividem= 2k, sendoka altura das folhas.
A figura 4 ilustra uma ´arvore de segmentos.
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
Figura 4: Uma ´arvore de segmentos comm= 8.
4.6.2 Arvores de Segmentos para o Problema CCMR´
A ´arvore de segmentos que iremos utilizar para resolver o problema CCMR ´e uma estrutura de dados que guarda intervalos de n´umeros inteiros. Em virtude da nossa compress˜ao de coordenadas no eixoydos retˆangulos da entrada, podemos assumir que estes intervalos de n´umeros inteiros tˆem extremos no intervalo [0..2n−1]. Na realidade, devido
`
a forma das ´arvores de segmentos, iremos assumir apenas que eles tˆem extremos no intervalo [0..2k−1], ondek∈N
´
e o menor n´umero natural tal quem= 2k>2n.
Inicialmente vamos estabelecer qual a invariante que nossa ´arvore de segmentos deve seguir.
Defini¸c˜ao 15. Uma ´arvore de segmentos t1, t2, . . . tm−1, tm, tm+1, . . . , t2m−1 ´e correta com respeito `a lista S de intervalos de n´umeros inteiros com extremos no intervalo[0..m−1]se
• A cada n´oti estiverem associados valores ci, mi∈N.
• Se definirmos Σ(i)como
dlog2(i+1)e−1
X
w=0
cb2iwc,
ent˜ao, para cada folhati,i>m,Σ(i) =ρZS(i−m).
• Para cada n´oti,mi= max
j∈Ii
ρZS(j) −Σ(i).
Intuitivamente, uma ´arvore de segmentos ´e correta com respeito a S se, para cada folha, a soma dos valoresci no caminho da raiz at´e a folha (incluindo ambos) ´e o n´umero de intervalos em S que cobrem a coordenada da folha e, para cada n´o ti, mi ´e o n´umero de intervalos que cobrem a coordenada mais coberta por intervalos em S no intervalo determinado pelo n´o menos a soma dosci no caminho da raiz at´e o n´o interno (incluindo ambos).
Um fato interessante ´e que na ´arvore n˜ao fica registrada a listaS: ela apenas ´e nossa referˆencia de quais intervalos foram inseridos mas n˜ao removidos da estrutura. Este fato ´e de suma importˆancia e est´a resumido no seguinte resultado.
Lema 1. SejamS eS0 duas listas de intervalos de n´umeros inteiros de extremos em[0..m−1]com a propriedade de queρZS(i) =ρZS0(i)para todo i∈[0..m−1]. Ent˜ao uma ´arvore de segmentost1, t2, . . . tm−1, tm, tm+1, . . . , t2m−1
´
e correta com rela¸c˜ao aS se, e somente se, ela for correta com rela¸c˜ao a S0.
Demonstra¸c˜ao. Trivial, pois a invariante ´e expressa apenas em termos deρZS(i) para coordenadasi∈[0..m−1].
Do jeito que a invariante foi proposta, podemos inicializar esta ´arvore de segmentos para que ela fique correta em rela¸c˜ao `a lista vazia simplesmente fazendoci =mi= 0 para todos os valores dei∈[1..2m−1]. J´a para adicionar ou remover segmentos, precisamos primeiro definir a seguinte subrotina.
CCMR-Auxiliar(r, i, j, a, b, δ) : 1 se a6b ent~ao
2 se a=i∧b=j−1 ent~ao
3 cr←cr+δ
4 sen~ao
5 k← i+j2
6 CCMR-Auxiliar(2r, i, k, a,min{b, k−1}, δ) 7 CCMR-Auxiliar(2r+ 1, k, j,max{a, k}, b, δ) 8 mr←max{m2r+c2r, m2r+1+c2r+1}
Com este procedimento, que iremos discutir logo em seguida, podemos implementar a inser¸c˜ao e a remo¸c˜ao na
´
arvore de segmentos como segue.
CCMR-Insere(a, b):
1 CCMR-Auxiliar(1,0, m, a, b,1) CCMR-Remove(a, b):
2 CCMR-Auxiliar(1,0, m, a, b,−1)
Dedicaremos o restante desta se¸c˜ao a demonstrar que os procedimentos acima est˜ao corretos e a mostrar como implementar as linhas 13 e 17 deC´elula-de-Maior-Coberturaeficientemente. A an´alise de complexidade deles ser´a deixada para depois, visto que a estrutura dos algoritmos an´alogos para o problema AUR ´e muito parecida e compensa unificarmos as demonstra¸c˜oes.
Teorema 7. Sejam t1, t2, . . . , tm−1, tm, tm+1, . . . , t2m−1 uma ´arvore de segmentos correta em rela¸c˜ao a uma lista S de intervalos de n´umeros inteiros com extremos em [0..m−1], r ∈ [1..2m−1], [i..j−1] = Ir e [a..b] ⊆ Ir. Ent˜ao, ap´os uma execu¸c˜ao de CCMR-Auxiliar(r, i, j, a, b,1), a ´arvore de segmentos estar´a correta em rela¸c˜ao `a listaS mais uma c´opia do intervalo[a..b]exceto por valores demα comtαascendente estrito detr, isto ´e, podemos modificar estes valores de forma que a ´arvore fique correta. Ainda, se a listaScontiver uma c´opia do intervalo[a..b], ap´os uma execu¸c˜ao deCCMR-Auxiliar(r, i, j, a, b,−1), se todos os valores deci com i∈[1..2m−1]terminarem n˜ao-negativos, ent˜ao a ´arvore de segmentos resultante estar´a correta com rela¸c˜ao `a lista S menos uma c´opia do intervalo[a..b]exceto tamb´em pelos valores demα comtα ascendente estrito detr, isto ´e, podemos modificar estes valores de forma que a ´arvore fique correta.
Demonstra¸c˜ao. A prova ser´a por indu¸c˜ao emr, mas esta ser´a uma indu¸c˜ao ligeramente diferente do usual. Iremos assumir que o resultado vale para todor0 > re iremos prov´a-lo parar, sem casos base.
Para tal, considere uma execu¸c˜ao deCCMR-Auxiliar(r, i, j, a, b, δ) onder∈[1..2m−1], [i..j−1] =Ir, [a..b]⊆ Ir, δ ∈ {−1,1} e, caso δ =−1, existe uma c´opia de [a..b] na lista S. Se [a..b] = {}, a inser¸c˜ao ou remo¸c˜ao de uma c´opia deste intervalo n˜ao surte qualquer efeito sobre o valor deρZS(x) para qualquer coordenadax∈[0..m−1], e portanto, pelo lema 1, a invariante ´e mantida caso simplesmente n˜ao fa¸camos nada. Mas comoa > b, temos que a condi¸c˜ao na linha 1 deCCMR-Auxiliarn˜ao ´e satisfeita, e de fato o algoritmo n˜ao faz nada. Inclusive, a ´arvore resultante ´e correta mesmo sem alterar os valores de mαcomtα ascendente estrito detr.
Suponha ent˜ao que [a..b]6={}. A condi¸c˜ao na linha 1 ser´a satisfeita, o que nos permite assumir que o algoritmo passar´a ent˜ao pela linha 2. Se [a..b] = Ir = [i..j−1], ent˜ao a = i e b = j−1. Neste caso, com a inser¸c˜ao deste intervalo todos os valores xem Ir ter˜ao ρZS(x) incrementado em 1, e, com sua remo¸c˜ao, todos estes valores ser˜ao decrementados em 1. Assim sendo, como essas coordenadas s˜ao precisamente as coordenadas cujas folhas s˜ao descendentes (inclusive) detr, ´e suficiente incrementar o valor decrem δ. Mas ´e exatamente isto que o algoritmo faz, pois a condi¸c˜ao na linha 2 ´e satisfeita. Note quecr ficar negativo ´e um evento previsto pela hip´otese indutiva.
Agora note que se tα ´e descendente (inclusive) de tr, o valor de max
j∈Iα
ρZS(j) ´e aumentado em δ, mas mα n˜ao