Melhor caso e pior caso do grafo de visibilidade
Autor: Harlen | Publicado: 2010-11-26T02:35:00-02:00

Em meu trabalho de pesquisa tenho utilizado algumas cenas poligonais para testar um algoritmo de cálculo do grafo de visibilidade. Um grafo de visibilidade de uma cena poligonal é, a grosso modo, um grafo cujos vértices são os vértices da cena e cujas arestas são (1) as arestas da cena e (2) os segmentos de reta entre quaisquer dois vértices da cena, e cujos segmentos abertos não intersectam nenhuma aresta da cena. Essas últimas arestas são chamadas de arestas de visibilidade e correspondem a linhas de visão entre dois vértices, isto é, um vértice "enxerga" o outro, e vice-versa. 

As cenas poligonais que estou usando no momento têm um padrão bastante regular. Elas são compostas de um retângulo com um ou mais buracos. Os buracos são quadrados dispostos regularmente no interior do retângulo e espaçados por uma distância igual ao tamanho do lado dos buracos. Considero dois conjuntos de cenas. Em um conjunto, há apenas uma coluna de buracos. Em outro, duas colunas. O primeiro conjunto constitui exemplos de cenas de melhor caso, isto é, o grafo de visibilidade resultante dessas cenas têm tamanho mínimo Θ(n), onde n é o número de arestas de visibilidade. O segundo conjunto forma cenas de pior caso, pois o grafo resultante tem tamanho Θ(n2), que é o pior possível. Como talvez isso não seja muito evidente, resolvi fazer uma demonstração. Ela não é rigorosa, pois omito a demonstração geométrica da corretude das arestas de visibilidade. A prova também só é válida para essas cenas regulares e com essa geometria específica (no final da postagem eu comento mais sobre isso).

A prova é por indução matemática no número de buracos k.

Teorema 1. Para as cenas com apenas uma coluna de buracos, o número de arestas de visibilidade é 12k (note que a cena é composta de 4+4k arestas). Isso significa que a cena corresponde ao melhor caso Θ(n) como esperado.

Teorema 2. Para cenas com duas colunas de buracos, satisfazendo k≥2 e k mod 2=0, o número de arestas de visibilidade é k2+11k-2. Isso significa que a complexidade é Θ(n2), que é o pior caso. 
Observação: considero que, para quaisquer 3 vértices a, b, c, se existe uma aresta de visibilidade entre a e b, e outra entre b e c, não existe uma aresta de visibilidade antre a e c. Toda aresta de visibilidade só possui dois pontos de interseção, que são seus extremos. 

Prova do teorema 1. O caso base k=1 é trivial. Veja na figura 1 abaixo que temos 12 (12*1) arestas de visibilidade, mostradas em cinza (desculpe se o cinza está muito claro). Para k=2 também temos 24 arestas de visibilidade (12*2), mostradas na figura 2.



Figura 1. k=1 com 12 arestas de visibilidade. EPS


Figura 2. k=2 com 24 arestas de visibilidade. EPS

Como hipótese indutiva, vamos supor que a afirmação (1) é verdadeira para k buracos, e mostrar o passo indutivo k+1. Tomando a cena de 2 buracos na figura 3, fazemos uma cirurgia no meio do buraco h, dividindo-o em dois buracos ha e hb. Formamos assim uma cena com 3 buracos com novos vértices r, s, t e u. Preservamos a regularidade dos buracos, como exige o teorema (na verdade isso só é necessário nas cenas Θ(n2), e no caso linear não há perda de generalidade).



Figura 3. Cena original k=2 (esquerda) e cena k=3 após cirurgia em h (direita). EPS

As arestas de visibilidade mostradas em cinza na cena k=3 têm a mesma topologia das arestas de visibilidade da cena k=2, e as arestas de visibilidade mostradas em azul são as novas arestas de visibilidade resultantes da inserção de r, s, t e u. Em especial, os vértices do canto superior e inferior esquerdo agora enxergam r e t (4 arestas de visibilidade), e os vértices do canto superior e inferior direito agora enxergam s e u (4 arestas de visibilidade). Além disso, r enxerga t e u (2 arestas de visibilidade), e s enxerga t e u (2 arestas de visibilidade). Temos assim 4+4+2+2=12 novas arestas de visibilidade. Com as arestas já existentes, temos 12k+12=12(k+1); q.e.d.

Prova do teorema 2. Os casos base k=2 e k=4 são mostrados nas figuras 3 e 4, respectivamente, e de fato satisfazem k2+11k-2 (24 e 58 arestas de visibilidade, respectivamente). Vamos supor que a conjetura é verdadeira para n e mostrar que ela é válida para k+2. Como na demonstração anterior, fazemos uma cirurgia nos buracos h1 e h2 de modo a criar 2 novos buracos.



Figura 4. Cena k=4 (esquerda) e cena k=6 após cirurgia em h1 e h2 (direita). EPS

Observe que as 24 arestas mostradas em cinza na figura 4 têm a mesma topologia em todas as cenas (k=4 e k=6). De fato, isso se mantém não importa quantas linhas de buracos sejam adicionadas. Para cada novo intervalo entre duas linhas de buracos, 22 arestas de visibilidade, mostradas em azul, são também adicionadas. A parte mais relevante, porém, são as arestas em laranja. Observe que os vértices da coluna c1 são mutuamente visíveis aos vértices da coluna c2. É aqui que acontece o crescimento quadrático do grafo de visibilidade.

Após a cirurgia em h1, obtemos h1a e h1b. Após a cirurgia em h2, obtemos h2a e h2b. No intervalo criado entre essas duas linhas de buracos, acrescentamos 22 arestas de visibilidade, mostradas em azul na cena k=6. Essas arestas são geradas pelos vértices r, t, w e y, e também pelas arestas de visibilidade entre su e vx. Agora, observe que s e u enxergam todos os k vértices em c2. O mesmo ocorre com v e x em relação a c1. Deveríamos adicionar 4k novas arestas de visibilidade, mas é importante subtrair as relações de visibilidade mútua entre c1 e c2. Entre os vértices s, u, v e x temos 4 relações de visibilidade mútua. O número de novas arestas laranjas é então 4(k+2)-4=4k+4. No total temos k2+11k-2+4k+4+22. Mas isso é igual a (k+2)2+11(k+2)-2; q.e.d.

Embora não tenha mostrado aqui, pode-se perceber que a complexidade das cenas Θ(n2) não se altera caso os novos buracos adicionados após a cirurgia não estejam dispostos regularmente na vertical. O importante é que pelo menos um dos novos vértices s, u, v ou x enxergue um número de vértices proporcional a k.