convite à geometria computacional - ime-uspcris/jai2009/aula1.pdf · jai 2009 – p. 12. divisão...

105
Convite à Geometria Computacional Jornadas de Atualização em Informática Cristina G. Fernandes e José Coelho de Pina Departamento de Ciência da Computação do IME-USP http://www.ime.usp.br/dcc/ Bento Gonçalves, julho de 2009 JAI 2009 – p. 1

Upload: others

Post on 24-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Convite à Geometria ComputacionalJornadas de Atualização em Informática

Cristina G. Fernandes e José Coelho de PinaDepartamento de Ciência da Computação do IME-USP

http://www.ime.usp.br/dcc/

Bento Gonçalves, julho de 2009

JAI 2009 – p. 1

Page 2: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Visão geral do minicurso

Aula 1:

Introdução (Secs. 7.1 e 7.2)

Par de pontos mais próximos (Sec. 7.3)

JAI 2009 – p. 2

Page 3: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Visão geral do minicurso

Aula 1:

Introdução (Secs. 7.1 e 7.2)

Par de pontos mais próximos (Sec. 7.3)

Aula 2:

Fecho convexo (Sec. 7.4)

JAI 2009 – p. 2

Page 4: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Visão geral do minicurso

Aula 1:

Introdução (Secs. 7.1 e 7.2)

Par de pontos mais próximos (Sec. 7.3)

Aula 2:

Fecho convexo (Sec. 7.4)

Aula 3:

Método da linha de varredura (Secs. 7.5 e 7.6)

JAI 2009 – p. 2

Page 5: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Introdução

Antiguidade:

construções geométricas de Euclides(régua e compasso)

JAI 2009 – p. 3

Page 6: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Introdução

Antiguidade:

construções geométricas de Euclides(régua e compasso)

problema de Apollonius (cerca de 200 aC)

JAI 2009 – p. 3

Page 7: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Introdução

Antiguidade:

construções geométricas de Euclides(régua e compasso)

problema de Apollonius (cerca de 200 aC)

JAI 2009 – p. 3

Page 8: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Introdução

Antiguidade:

construções geométricas de Euclides(régua e compasso)

problema de Apollonius (cerca de 200 aC)

Solução de Euclides: 508 operações “elementares”

JAI 2009 – p. 3

Page 9: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Introdução

Antiguidade:

construções geométricas de Euclides(régua e compasso)

problema de Apollonius (cerca de 200 aC)

Solução de Euclides: 508 operações “elementares”

Solução de Lemoine (1902): menos de 200 operaçõesJAI 2009 – p. 3

Page 10: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Algoritmo:sequência finita de instruções que resolve um problema.

JAI 2009 – p. 4

Page 11: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Algoritmo:sequência finita de instruções que resolve um problema.

Modelo de computação: descrição abstrata de umcomputador que será usado para executar um algoritmo.

JAI 2009 – p. 4

Page 12: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Algoritmo:sequência finita de instruções que resolve um problema.

Modelo de computação: descrição abstrata de umcomputador que será usado para executar um algoritmo.

operações elementares (aritméticas, comparações, etc)

critério para medir consumo de tempo

JAI 2009 – p. 4

Page 13: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Algoritmo:sequência finita de instruções que resolve um problema.

Modelo de computação: descrição abstrata de umcomputador que será usado para executar um algoritmo.

operações elementares (aritméticas, comparações, etc)

critério para medir consumo de tempo

Compromisso entre realidade e tratabilidade matemática.

JAI 2009 – p. 4

Page 14: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Real RAM (real random access machine)com custo uniforme:

manipula números reais arbitrários

operações com reais custam 1 (mesmo raiz quadrada)

JAI 2009 – p. 5

Page 15: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Real RAM (real random access machine)com custo uniforme:

manipula números reais arbitrários

operações com reais custam 1 (mesmo raiz quadrada)

Análise de algoritmos:

notação assintótica

técnicas básicas

JAI 2009 – p. 5

Page 16: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Modelo de computação

Real RAM (real random access machine)com custo uniforme:

manipula números reais arbitrários

operações com reais custam 1 (mesmo raiz quadrada)

Análise de algoritmos:

notação assintótica

técnicas básicas

Capítulo 1 Análise de algoritmospor Paulo Feofiloff

JAI 2009 – p. 5

Page 17: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximos

Problema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

JAI 2009 – p. 6

Page 18: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximos

Problema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

JAI 2009 – p. 6

Page 19: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximos

Problema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

(x, y)

(x′, y′)

Lembre-se que, para dois pontos (x, y) e (x′, y′) no plano,

DIST(x, y, x′, y′) =√

(x− x′)2 + (y − y′)2.

JAI 2009 – p. 6

Page 20: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximosProblema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

Entrada: coleção de n pontos representada porEntrada: vetores X[1 . . n] e Y [1 . . n].

(−2,−1)

(0, 3)

(1,−2)

(4, 2)

(3, 4)

X −2 0 1 3 4

Y −1 3 −2 4 2

1 2 3 4 5

JAI 2009 – p. 7

Page 21: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximosProblema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

Entrada: coleção de n pontos representada porEntrada: vetores X[1 . . n] e Y [1 . . n].

1

2

3

5

4

X −2 0 1 3 4

Y −1 3 −2 4 2

1 2 3 4 5

Saída: índices i e j indicandoSaída: dois pontos à distância mínima.

JAI 2009 – p. 7

Page 22: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximosProblema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

Entrada: coleção de n pontos representada porEntrada: vetores X[1 . . n] e Y [1 . . n].

1

2

3

5

4

X −2 0 1 3 4

Y −1 3 −2 4 2

1 2 3 4 5

Saída: menor distância entre dois pontos da coleção.

JAI 2009 – p. 7

Page 23: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximos

Problema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

Entrada: vetores X[1 . . n] e Y [1 . . n]Saída: menor distância entre dois pontos da coleção

JAI 2009 – p. 8

Page 24: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximos

Problema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

Entrada: vetores X[1 . . n] e Y [1 . . n]Saída: menor distância entre dois pontos da coleção

Primeira solução: algoritmo quadrático,que testa todos os pares de pontos.

JAI 2009 – p. 8

Page 25: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par de pontos mais próximos

Problema: Dados n pontos no plano,determinar dois deles que estão à distância mínima.

Entrada: vetores X[1 . . n] e Y [1 . . n]Saída: menor distância entre dois pontos da coleção

Primeira solução: algoritmo quadrático,que testa todos os pares de pontos.

ELEMENTAR(X,Y, n)1 d← +∞2 para i← 2 até n faça3 para j ← 1 até i− 1 faça4 se DIST(X[i], Y [i], X[j], Y [j]) < d5 então d← DIST(X[i], Y [i], X[j], Y [j])6 devolva d

JAI 2009 – p. 8

Page 26: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo elementar

ELEMENTAR(X,Y, n)1 d← +∞2 para i← 2 até n faça3 para j ← 1 até i− 1 faça4 se DIST(X[i], Y [i], X[j], Y [j]) < d5 então d← DIST(X[i], Y [i], X[j], Y [j])6 devolva d

JAI 2009 – p. 9

Page 27: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo elementar

ELEMENTAR(X,Y, n)1 d← +∞2 para i← 2 até n faça3 para j ← 1 até i− 1 faça4 se DIST(X[i], Y [i], X[j], Y [j]) < d5 então d← DIST(X[i], Y [i], X[j], Y [j])6 devolva d

Invariante: d é a menor distância entreInvariante: os pontos da coleção X[1 . . i− 1], Y [1 . . i− 1].

JAI 2009 – p. 9

Page 28: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo elementar

ELEMENTAR(X,Y, n)1 d← +∞2 para i← 2 até n faça3 para j ← 1 até i− 1 faça4 se DIST(X[i], Y [i], X[j], Y [j]) < d5 então d← DIST(X[i], Y [i], X[j], Y [j])6 devolva d

Invariante: d é a menor distância entreInvariante: os pontos da coleção X[1 . . i− 1], Y [1 . . i− 1].

Consumo de tempo: linha 4 é executadan

i=2

(i− 1) =n−1∑

i=1

i =n(n− 1)

2= Θ(n2).

JAI 2009 – p. 9

Page 29: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo elementar

ELEMENTAR(X,Y, n)1 d← +∞2 para i← 2 até n faça3 para j ← 1 até i− 1 faça4 se DIST(X[i], Y [i], X[j], Y [j]) < d5 então d← DIST(X[i], Y [i], X[j], Y [j])6 devolva d

Invariante: d é a menor distância entreInvariante: os pontos da coleção X[1 . . i− 1], Y [1 . . i− 1].

Consumo de tempo: linha 4 é executadan

i=2

(i− 1) =n−1∑

i=1

i =n(n− 1)

2= Θ(n2).

É possível projetar um algoritmo mais eficiente que este?JAI 2009 – p. 9

Page 30: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Problema: Dados n pontos numa reta, determinar doisdeles que estão à distância mínima.

JAI 2009 – p. 10

Page 31: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Problema: Dados n pontos numa reta, determinar doisdeles que estão à distância mínima.

Primeira solução: ordene os pontos, e encontre os doisconsecutivos mais próximos.

Tempo consumido: O(n lg n).

JAI 2009 – p. 10

Page 32: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Problema: Dados n pontos numa reta, determinar doisdeles que estão à distância mínima.

Primeira solução: ordene os pontos, e encontre os doisconsecutivos mais próximos.

Tempo consumido: O(n lg n).

Problema com essa solução:não sei como generalizá-la para o plano...

JAI 2009 – p. 10

Page 33: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

JAI 2009 – p. 11

Page 34: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

Divisão: dividir a instância do problema em instânciasmenores do problema.

JAI 2009 – p. 11

Page 35: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

Divisão: dividir a instância do problema em instânciasmenores do problema.

Conquista: resolver o problema nas instâncias menoresrecursivamente (ou diretamente, se elas forem pequenas osuficiente).

JAI 2009 – p. 11

Page 36: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

Divisão: dividir a instância do problema em instânciasmenores do problema.

Conquista: resolver o problema nas instâncias menoresrecursivamente (ou diretamente, se elas forem pequenas osuficiente).

Combinação: combinar as soluções das instânciasmenores para gerar uma solução da instância original.

JAI 2009 – p. 11

Page 37: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

Divisão: dividir a instância do problema em instânciasmenores do problema.

Conquista: resolver o problema nas instâncias menoresrecursivamente (ou diretamente, se elas forem pequenas osuficiente).

Combinação: combinar as soluções das instânciasmenores para gerar uma solução da instância original.

JAI 2009 – p. 12

Page 38: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

Divisão: dividir a instância do problema em instânciasmenores do problema.

Conquista: resolver o problema nas instâncias menoresrecursivamente (ou diretamente, se elas forem pequenas osuficiente).

Combinação: combinar as soluções das instânciasmenores para gerar uma solução da instância original.

dE dD

esquerda direita

JAI 2009 – p. 12

Page 39: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

Esse paradigma envolve os seguintes passos:

Divisão: dividir a instância do problema em instânciasmenores do problema.

Conquista: resolver o problema nas instâncias menoresrecursivamente (ou diretamente, se elas forem pequenas osuficiente).

Combinação: combinar as soluções das instânciasmenores para gerar uma solução da instância original.

dE dDdED

esquerda direita

JAI 2009 – p. 12

Page 40: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Pré-processamento: ordenar os pontos.

JAI 2009 – p. 13

Page 41: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Pré-processamento: ordenar os pontos.

DISTÂNCIARETA(X,n)1 MERGESORT(X, 1, n)2 devolva DISTÂNCIARETAREC (X, 1, n)

JAI 2009 – p. 13

Page 42: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Pré-processamento: ordenar os pontos.

DISTÂNCIARETA(X,n)1 MERGESORT(X, 1, n)2 devolva DISTÂNCIARETAREC (X, 1, n)

DISTÂNCIARETAREC: divisão e conquista.

JAI 2009 – p. 13

Page 43: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Pré-processamento: ordenar os pontos.

DISTÂNCIARETA(X,n)1 MERGESORT(X, 1, n)2 devolva DISTÂNCIARETAREC (X, 1, n)

DISTÂNCIARETAREC: divisão e conquista.

Tempo consumido pelo DISTÂNCIARETA:O(n lg n) mais o tempo do DISTÂNCIARETAREC.

JAI 2009 – p. 13

Page 44: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

DISTÂNCIARETAREC (X, p, r) � Divisão e conquista1 se r ≤ p + 12 então se r = p3 então devolva +∞4 senão devolva X[r]−X[p]5 senão q ← ⌊(p + r)/2⌋6 dE ← DISTÂNCIARETAREC(X, p, q)7 dD ← DISTÂNCIARETAREC(X, q + 1, r)8 d← min{dE , dD, X[q+1]−X[q]}9 devolva d

JAI 2009 – p. 14

Page 45: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

DISTÂNCIARETAREC (X, p, r) � Divisão e conquista1 se r ≤ p + 12 então se r = p3 então devolva +∞4 senão devolva X[r]−X[p]5 senão q ← ⌊(p + r)/2⌋6 dE ← DISTÂNCIARETAREC(X, p, q)7 dD ← DISTÂNCIARETAREC(X, q + 1, r)8 d← min{dE , dD, X[q+1]−X[q]}9 devolva d

Consumo de tempo:

T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + Θ(1)

onde n = r − p + 1.

JAI 2009 – p. 14

Page 46: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

DISTÂNCIARETAREC (X, p, r) � Divisão e conquista1 se r ≤ p + 12 então se r = p3 então devolva +∞4 senão devolva X[r]−X[p]5 senão q ← ⌊(p + r)/2⌋6 dE ← DISTÂNCIARETAREC(X, p, q)7 dD ← DISTÂNCIARETAREC(X, q + 1, r)8 d← min{dE , dD, X[q+1]−X[q]}9 devolva d

Consumo de tempo:

T (n) = T (⌊n/2⌋) + T (⌈n/2⌉) + Θ(1)

onde n = r − p + 1. Quanto vale T (n)?

JAI 2009 – p. 14

Page 47: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

DISTÂNCIARETAREC (X, p, r) � Divisão e conquista1 se r ≤ p + 12 então se r = p3 então devolva +∞4 senão devolva X[r]−X[p]5 senão q ← ⌊(p + r)/2⌋6 dE ← DISTÂNCIARETAREC(X, p, q)7 dD ← DISTÂNCIARETAREC(X, q + 1, r)8 d← min{dE , dD, X[q+1]−X[q]}9 devolva d

Consumo de tempo:

T (n) = T (⌊n/2⌋) + T (⌈n/2⌉) + Θ(1)

onde n = r − p + 1. Quanto vale T (n)? T (n) = Θ(n).

JAI 2009 – p. 14

Page 48: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Voltando...

DISTÂNCIARETA(X,n)1 MERGESORT(X, 1, n)2 devolva DISTÂNCIARETAREC (X, 1, n)

JAI 2009 – p. 15

Page 49: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Voltando...

DISTÂNCIARETA(X,n)1 MERGESORT(X, 1, n)2 devolva DISTÂNCIARETAREC (X, 1, n)

MERGESORT consome tempo O(n lg n).

DISTÂNCIARETAREC consome tempo Θ(n).

JAI 2009 – p. 15

Page 50: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo na reta

Voltando...

DISTÂNCIARETA(X,n)1 MERGESORT(X, 1, n)2 devolva DISTÂNCIARETAREC (X, 1, n)

MERGESORT consome tempo O(n lg n).

DISTÂNCIARETAREC consome tempo Θ(n).

Tempo consumido pelo DISTÂNCIARETA: O(n lg n).

JAI 2009 – p. 15

Page 51: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo no plano

Obtivemos um algoritmo O(n lg n) para pontos na reta.

Como generalizar essa ideia para o plano?

JAI 2009 – p. 16

Page 52: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo no plano

Obtivemos um algoritmo O(n lg n) para pontos na reta.

Como generalizar essa ideia para o plano?

Divide...

JAI 2009 – p. 16

Page 53: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo no plano

Obtivemos um algoritmo O(n lg n) para pontos na reta.

Como generalizar essa ideia para o plano?

Divide...

esquerda direita

JAI 2009 – p. 16

Page 54: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo no plano

Obtivemos um algoritmo O(n lg n) para pontos na reta.

Como generalizar essa ideia para o plano?

Divide... Conquista...

dE

dD

esquerda direita

JAI 2009 – p. 16

Page 55: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Par mais próximo no plano

Obtivemos um algoritmo O(n lg n) para pontos na reta.

Como generalizar essa ideia para o plano?

Divide... Conquista... Combina...

dE

dD

dED

esquerda direita

JAI 2009 – p. 16

Page 56: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Pré-processamento: ordenar os pontos pela X-coordenada

JAI 2009 – p. 17

Page 57: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Pré-processamento: ordenar os pontos pela X-coordenada

DISTÂNCIA-SH(X, Y, n)1 MERGESORT(X,Y, 1, n)2 devolva DISTÂNCIAREC-SH (X,Y, 1, n)

JAI 2009 – p. 17

Page 58: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Pré-processamento: ordenar os pontos pela X-coordenada

DISTÂNCIA-SH(X, Y, n)1 MERGESORT(X,Y, 1, n)2 devolva DISTÂNCIAREC-SH (X,Y, 1, n)

Consumo de tempo:O(n lg n) mais o tempo do DISTÂNCIAREC-SH.

JAI 2009 – p. 17

Page 59: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

DISTÂNCIAREC-SH (X,Y, p, r)

Dividir: X[p . . q], Y [p . . q] (esquerda)X[q+1 . . r], Y [q+1 . . r] (direita)onde q := ⌊(p + r)/2⌋.

JAI 2009 – p. 18

Page 60: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

DISTÂNCIAREC-SH (X,Y, p, r)

Dividir: X[p . . q], Y [p . . q] (esquerda)X[q+1 . . r], Y [q+1 . . r] (direita)onde q := ⌊(p + r)/2⌋.

Conquistar: Determine, recursivamente, a menor distânciadE entre dois pontos da esquerda e a menor distânciadD entre dois pontos da direita.

JAI 2009 – p. 18

Page 61: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

DISTÂNCIAREC-SH (X,Y, p, r)

Dividir: X[p . . q], Y [p . . q] (esquerda)X[q+1 . . r], Y [q+1 . . r] (direita)onde q := ⌊(p + r)/2⌋.

Conquistar: Determine, recursivamente, a menor distânciadE entre dois pontos da esquerda e a menor distânciadD entre dois pontos da direita.

Combinar: Devolva o mínimo entre dE , dD e a menordistância dED entre um ponto da esquerda e um pontoda direita.

JAI 2009 – p. 18

Page 62: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 dE ← DISTÂNCIAREC-SH (X,Y, p, q)5 dD ← DISTÂNCIAREC-SH (X,Y, q+1, r)6 devolva COMBINE (X,Y, p, r, dE , dD)

JAI 2009 – p. 19

Page 63: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 dE ← DISTÂNCIAREC-SH (X,Y, p, q)5 dD ← DISTÂNCIAREC-SH (X,Y, q+1, r)6 devolva COMBINE (X,Y, p, r, dE , dD)

Suponha que COMBINE é linear.

JAI 2009 – p. 19

Page 64: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 dE ← DISTÂNCIAREC-SH (X,Y, p, q)5 dD ← DISTÂNCIAREC-SH (X,Y, q+1, r)6 devolva COMBINE (X,Y, p, r, dE , dD)

Suponha que COMBINE é linear.

Consumo de tempo do DISTÂNCIAREC-SH:

T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + O(n)

onde n = r − p + 1.

JAI 2009 – p. 19

Page 65: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 dE ← DISTÂNCIAREC-SH (X,Y, p, q)5 dD ← DISTÂNCIAREC-SH (X,Y, q+1, r)6 devolva COMBINE (X,Y, p, r, dE , dD)

Suponha que COMBINE é linear.

Consumo de tempo:

T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + O(n)

onde n = r − p + 1. Quanto vale T (n)?

JAI 2009 – p. 19

Page 66: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 dE ← DISTÂNCIAREC-SH (X,Y, p, q)5 dD ← DISTÂNCIAREC-SH (X,Y, q+1, r)6 devolva COMBINE (X,Y, p, r, dE , dD)

Suponha que COMBINE é linear.

Consumo de tempo:

T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + O(n)

onde n = r − p + 1. Quanto vale T (n)? T (n) = O(n lg n).

JAI 2009 – p. 19

Page 67: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

JAI 2009 – p. 20

Page 68: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

COMBINE precisa considerar apenaspontos que estão a uma distância menor qued = min{dE , dD} da reta vertical x = X[q].

dE

(X [q], Y [q])

dD

dd

JAI 2009 – p. 20

Page 69: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

COMBINE precisa considerar apenaspontos que estão a uma distância menor qued = min{dE , dD} da reta vertical x = X[q].

dE

(X [q], Y [q])

dD

dd

Infelizmente todos os pontos podem estar nesta faixa...

JAI 2009 – p. 20

Page 70: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

JAI 2009 – p. 21

Page 71: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

Ideia...

dE

dD

d

dd

JAI 2009 – p. 21

Page 72: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

Ideia...

dE

dD

d

dd

Para cada ponto na faixa, olhamos apenas para pontos dafaixa que tenham Y -coordenada no máximo d mais queeste ponto.

JAI 2009 – p. 21

Page 73: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

dE

dD

d

dd

Quantos pontos assim há?

JAI 2009 – p. 22

Page 74: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

dE

dD

d

dd

Quantos pontos assim há?

Em cada um dos dois quadrados de lado d,há no máximo 4 pontos porque d ≤ dE e d ≤ dD.

JAI 2009 – p. 22

Page 75: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

dE

dD

d

dd

Quantos pontos assim há?

Em cada um dos dois quadrados de lado d,há no máximo 4 pontos porque d ≤ dE e d ≤ dD.

Logo há não mais que 7 pontos assim (excluindo o ponto).

JAI 2009 – p. 22

Page 76: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

dE

dD

d

dd

Mas como ter acesso rápido a estes pontos?

JAI 2009 – p. 23

Page 77: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Como fazer o COMBINE linear?

dE

dD

d

dd

Mas como ter acesso rápido a estes pontos?

Alteraremos o pré-processamento, para ter acesso aospontos ordenados pelas suas Y -coordenadas também.

JAI 2009 – p. 23

Page 78: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Pré-processamento: ordenar os pontos pela X-coordenadae ordenar (indiretamente) os pontos pela Y -coordenada

JAI 2009 – p. 24

Page 79: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Pré-processamento: ordenar os pontos pela X-coordenadae ordenar (indiretamente) os pontos pela Y -coordenada

DISTÂNCIA-SH(X, Y, n)1 MERGESORT(X,Y, 1, n)2 para i← 1 até n faça3 a[i]← i4 MERGESORTIND(Y, 1, n, a) � ordenação indireta5 devolva DISTÂNCIAREC-SH (X,Y, a, 1, n)

JAI 2009 – p. 24

Page 80: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Pré-processamento: ordenar os pontos pela X-coordenadae ordenar (indiretamente) os pontos pela Y -coordenada

DISTÂNCIA-SH(X, Y, n)1 MERGESORT(X,Y, 1, n)2 para i← 1 até n faça3 a[i]← i4 MERGESORTIND(Y, 1, n, a) � ordenação indireta5 devolva DISTÂNCIAREC-SH (X,Y, a, 1, n)

Consumo de tempo:De novo, O(n lg n) mais o tempo do DISTÂNCIAREC-SH.

JAI 2009 – p. 24

Page 81: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Divisão e conquista

DISTÂNCIAREC-SH (X,Y, a, p, r)

Dividir: Seja q := ⌊(p + r)/2⌋. Obtenha um vetor b[p . . r] talque X[p . . q], Y [p . . q], b[p . . q] seja uma representaçãoordenada dos pontos mais à esquerda eX[q+1 . . r], Y [q+1 . . r], b[q+1 . . r], uma representaçãoordenada dos pontos mais à direita.

Conquistar: Determine, recursivamente, a menor distânciadE entre dois pontos da esquerda e a menor distânciadD entre dois pontos da direita.

Combinar: Devolva o mínimo entre dE , dD e a menordistância dED entre um ponto da esquerda e um pontoda direita.

JAI 2009 – p. 25

Page 82: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, a, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 b← DIVIDA (X,Y, a, p, r)5 dE ← DISTÂNCIAREC-SH (X,Y, b, p, q)6 dD ← DISTÂNCIAREC-SH (X,Y, b, q + 1, r)7 devolva COMBINE (X,Y, a, p, r, dE , dD)

JAI 2009 – p. 26

Page 83: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, a, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 b← DIVIDA (X,Y, a, p, r)5 dE ← DISTÂNCIAREC-SH (X,Y, b, p, q)6 dD ← DISTÂNCIAREC-SH (X,Y, b, q + 1, r)7 devolva COMBINE (X,Y, a, p, r, dE , dD)

DIVIDA e COMBINE são algoritmos lineares.

JAI 2009 – p. 26

Page 84: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, a, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 b← DIVIDA (X,Y, a, p, r)5 dE ← DISTÂNCIAREC-SH (X,Y, b, p, q)6 dD ← DISTÂNCIAREC-SH (X,Y, b, q + 1, r)7 devolva COMBINE (X,Y, a, p, r, dE , dD)

DIVIDA e COMBINE são algoritmos lineares.

Consumo de tempo:

T (n) = T (⌊n/2⌋) + T (⌈n/2⌉) + O(n)

onde n = r − p + 1.

JAI 2009 – p. 26

Page 85: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

DISTÂNCIAREC-SH (X,Y, a, p, r) � Divisão e conquista1 se r ≤ p + 22 então � resolva o problema diretamente3 senão q ← ⌊(p + r)/2⌋4 b← DIVIDA (X,Y, a, p, r)5 dE ← DISTÂNCIAREC-SH (X,Y, b, p, q)6 dD ← DISTÂNCIAREC-SH (X,Y, b, q + 1, r)7 devolva COMBINE (X,Y, a, p, r, dE , dD)

DIVIDA e COMBINE são algoritmos lineares.

Consumo de tempo:

T (n) = T (⌊n/2⌋) + T (⌈n/2⌉) + O(n)

onde n = r − p + 1. Como antes, T (n) = O(n lg n).

JAI 2009 – p. 26

Page 86: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

JAI 2009 – p. 27

Page 87: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q] � (X[a[k]], Y [a[k]]) está à esquerda da reta x = X[q]?

5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

JAI 2009 – p. 27

Page 88: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q]5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

b

q = 3 X [q] = 1

JAI 2009 – p. 27

Page 89: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q]5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

k

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

b 3

q = 3 X [q] = 1

JAI 2009 – p. 27

Page 90: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q]5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

k

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

b 3 1

q = 3 X [q] = 1

JAI 2009 – p. 27

Page 91: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q]5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

k

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

b 3 1 5

q = 3 X [q] = 1

JAI 2009 – p. 27

Page 92: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q]5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

b 3 1 2 5 4

q = 3 X [q] = 1

JAI 2009 – p. 27

Page 93: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

Suponha que na coleçãonão há dois pontos com a mesma X-coordenada.

DIVIDA (X,Y, a, p, r)1 q ← ⌊(p + r)/2⌋2 i← p− 1 j ← q3 para k ← p até r faça4 se X[a[k]] ≤ X[q]5 então i← i + 16 b[i]← a[k]7 senão j ← j + 18 b[j]← a[k]9 devolva b

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

b 3 1 2 5 4

q = 3 X [q] = 1

Consumo de tempo:É fácil ver que o consumo é Θ(n) onde n = r − p + 1.

JAI 2009 – p. 27

Page 94: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

A rotina abaixo identifica os pontos que estão na faixa,ordenados pela Y -coordenada.

JAI 2009 – p. 28

Page 95: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

A rotina abaixo identifica os pontos que estão na faixa,ordenados pela Y -coordenada.

CANDIDATOS (X, a, p, r, d)1 q ← ⌊(p + r)/2⌋2 t← 03 para k ← p até r faça4 se |X[a[k]]−X[q]| < d5 então t← t + 16 f [t]← a[k]7 devolva (f, t)

(X[q], Y [q])

dd

JAI 2009 – p. 28

Page 96: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

A rotina abaixo identifica os pontos que estão na faixa,ordenados pela Y -coordenada.

CANDIDATOS (X, a, p, r, d)1 q ← ⌊(p + r)/2⌋2 t← 03 para k ← p até r faça4 se |X[a[k]]−X[q]| < d5 então t← t + 16 f [t]← a[k]7 devolva (f, t)

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

f

X [3] = 1 d =√

5

JAI 2009 – p. 28

Page 97: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

A rotina abaixo identifica os pontos que estão na faixa,ordenados pela Y -coordenada.

CANDIDATOS (X, a, p, r, d)1 q ← ⌊(p + r)/2⌋2 t← 03 para k ← p até r faça4 se |X[a[k]]−X[q]| < d5 então t← t + 16 f [t]← a[k]7 devolva (f, t)

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

f 3 2 4

X [3] = 1 d =√

5

JAI 2009 – p. 28

Page 98: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

A rotina abaixo identifica os pontos que estão na faixa,ordenados pela Y -coordenada.

CANDIDATOS (X, a, p, r, d)1 q ← ⌊(p + r)/2⌋2 t← 03 para k ← p até r faça4 se |X[a[k]]−X[q]| < d5 então t← t + 16 f [t]← a[k]7 devolva (f, t)

X −2 0 1 3 4

Y −1 3 −2 4 2

a 3 1 5 2 4

1 2 3 4 5

f 3 2 4

X [3] = 1 d =√

5

Consumo de tempo:É fácil ver que o consumo é Θ(n) onde n = r − p + 1.

JAI 2009 – p. 28

Page 99: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

COMBINE (X,Y, a, p, r, dE , dD)1 d← min{dE , dD}2 (f, t)← CANDIDATOS (X, a, p, r, d) � pontos na faixa3 para i← 1 até t− 1 faça4 para j ← i + 1 até min{i + 7, t} faça � ≤ 7 próximos5 d′ ← DIST(X[f [i]], Y [f [i]], X[f [j]], Y [f [j]])6 se d′ < d7 então d← d′

8 devolva d

JAI 2009 – p. 29

Page 100: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

COMBINE (X,Y, a, p, r, dE , dD)1 d← min{dE , dD}2 (f, t)← CANDIDATOS (X, a, p, r, d) � pontos na faixa3 para i← 1 até t− 1 faça4 para j ← i + 1 até min{i + 7, t} faça � ≤ 7 próximos5 d′ ← DIST(X[f [i]], Y [f [i]], X[f [j]], Y [f [j]])6 se d′ < d7 então d← d′

8 devolva d

Consumo de tempo:É fácil ver que o consumo é Θ(n) onde n = r − p + 1.

JAI 2009 – p. 29

Page 101: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

COMBINE (X,Y, a, p, r, dE , dD)1 d← min{dE , dD}2 (f, t)← CANDIDATOS (X, a, p, r, d) � pontos na faixa3 para i← 1 até t− 1 faça4 j ← i + 15 enquanto j ≤ t e Y [f [j]]−Y [f [i]] < d faça � ≤ 7 próximos6 d′ ← DIST(X[f [i]], Y [f [i]], X[f [j]], Y [f [j]])7 se d′ < d8 então d← d′

9 j ← j + 110 devolva d

JAI 2009 – p. 30

Page 102: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Algoritmo de Shamos e Hoey

COMBINE (X,Y, a, p, r, dE , dD)1 d← min{dE , dD}2 (f, t)← CANDIDATOS (X, a, p, r, d) � pontos na faixa3 para i← 1 até t− 1 faça4 j ← i + 15 enquanto j ≤ t e Y [f [j]]−Y [f [i]] < d faça � ≤ 7 próximos6 d′ ← DIST(X[f [i]], Y [f [i]], X[f [j]], Y [f [j]])7 se d′ < d8 então d← d′

9 j ← j + 110 devolva d

Consumo de tempo: Θ(n) onde n = r − p + 1.

JAI 2009 – p. 30

Page 103: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Quase finalizando...

Exercício: Adapte os algoritmos vistos nesta aula para quedevolvam dois pontos da coleção que estejam à distânciamínima (em vez de devolver a distância apenas).

JAI 2009 – p. 31

Page 104: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Quase finalizando...

Exercício: Adapte os algoritmos vistos nesta aula para quedevolvam dois pontos da coleção que estejam à distânciamínima (em vez de devolver a distância apenas).

Material coberto nesta aula: Secs 7.1 – 7.3.

JAI 2009 – p. 31

Page 105: Convite à Geometria Computacional - IME-USPcris/jai2009/aula1.pdf · JAI 2009 – p. 12. Divisão e conquista Esse paradigma envolve os seguintes passos: Divisão: dividir a instância

Quase finalizando...

Exercício: Adapte os algoritmos vistos nesta aula para quedevolvam dois pontos da coleção que estejam à distânciamínima (em vez de devolver a distância apenas).

Material coberto nesta aula: Secs 7.1 – 7.3.

Agora, às animações!

JAI 2009 – p. 31