Divisão e Conquista

81
Introdu¸c˜ ao a Algoritmos 1 / 63 Divis˜ ao e Conquista Eduardo Camponogara Departamento de Automa¸c˜ ao e Sistemas Universidade Federal de Santa Catarina DAS-9003: Introdu¸ ao a Algoritmos

description

Análise de Algoritmos

Transcript of Divisão e Conquista

  • Introducao a Algoritmos 1 / 63

    Divisao e Conquista

    Eduardo Camponogara

    Departamento de Automacao e SistemasUniversidade Federal de Santa Catarina

    DAS-9003: Introducao a Algoritmos

  • Introducao a Algoritmos 2 / 63

    Sumario

    Merge Sort

    Abordagens para Solucao de Recorrencias

    Outras Recorrencias

    Contando Inversoes

    Encontrando os Pontos Mais Proximos

  • Introducao a Algoritmos 3 / 63

    Sumario

    Introducao

    I Divisao e conquista se refere a uma classe de algoritmos quequebram um problema em pedacos menores, resolvem cadaparte recursivamente e depois combinam as solucoes daspartes em uma solucao global.

    I A analise envolve a resolucao de recorrencias.

  • Introducao a Algoritmos 4 / 63

    Merge Sort

    Sumario

    Merge Sort

    Abordagens para Solucao de Recorrencias

    Outras Recorrencias

    Contando Inversoes

    Encontrando os Pontos Mais Proximos

  • Introducao a Algoritmos 5 / 63

    Merge Sort

    Merge List

    I Merge sorted lists A = a1, . . . , an and B = b1, . . . , bmI Maintains a current pointer for each list, initialized at the front

    I The output list is emptyI While both lists are nonempty:

    I Let ai and bj be the elements pointed by the current pointerI Append the smaller of these two to the output listI Advance the pointer of the list from which the smaller element

    was selected

    I Once a list is empty, append the remainder of the other list tothe output list

  • Introducao a Algoritmos 6 / 63

    Merge Sort

    I Merge-Sort ordena a lista de chaves dividindo-a em duassub-listas, cada uma com uma metade da lista original.

    I Ordena separadamente cada uma das sub-listas,recursivamente, e depois combinando os resultados daschamadas recursivas com o algoritmo Merge-List

  • Introducao a Algoritmos 7 / 63

    Merge Sort

    I Seja n o tamanho da lista a ser ordenada.

    I Seja T (n) o tempo de execucao no pior caso do algoritmopara uma entrada de tamanho n.

    I Supondo n par, T (n) satisfaz a seguinte relacao derecorrencia:

    T (n) 2T (n/2) +O(n) 2T (n/2) + cn quando n > 2

    T (2) c

    Para alguma constante c > 0 pois o tempo de intercalacaodas duas listas e O(n).

  • Introducao a Algoritmos 8 / 63

    Merge Sort

    I A rigor, a recorrencia seria da forma:

    T (n) T (bn/2c) + T (dn/2e) + cn

    para n > 2.

    I Para a maioria das recorrencias, os limites assintoticos nao saoafetados pelos operadores bc e de.

    I As recorrencias apresentadas nao nos dao um limiteassintotico explcito na taxa de crescimento da funcao T .

  • Introducao a Algoritmos 9 / 63

    Abordagens para Solucao de Recorrencias

    Sumario

    Merge Sort

    Abordagens para Solucao de Recorrencias

    Outras Recorrencias

    Contando Inversoes

    Encontrando os Pontos Mais Proximos

  • Introducao a Algoritmos 10 / 63

    Abordagens para Solucao de Recorrencias

    I A tecnica mais natural e intuitiva consiste expandir arecorrencia em uma soma e depois chegar ao tempo deexecucao.

    I Uma segunda tecnica consiste dar um chute educado,substituir na recorrencia e verificar se funciona. Formalmente,a justificativa se da atraves de uma argumentacao cominducao matematica.

  • Introducao a Algoritmos 11 / 63

    Abordagens para Solucao de Recorrencias

    Expandindo a Recorrencia Merge-Sort

    a) Analisar os primeiros nveis

    b) Identificando um padraoI No nvel j , o numero de problemas duplicou j vezes, logo

    existem existem 2j subproblemas cada um deles com tamanhon/2j .

    I Portanto, o nvel j contribui com no maximo

    2j(cn

    2j) = cn

    ao tempo total de execucao.

  • Introducao a Algoritmos 12 / 63

    Abordagens para Solucao de Recorrencias

  • Introducao a Algoritmos 13 / 63

    Abordagens para Solucao de Recorrencias

    c) Somando sobre todos os nveis de recursaoI O limite cn se aplica a todos os nveis da recursao.I O no. de vezes que a entrada deve ser dividida por 2 para

    reduzir o tamanho n a 2 e log2 n.I Somando tudo, chegamos ao custo total cn log2 n, ou seja,O(n log n).

  • Introducao a Algoritmos 14 / 63

    Abordagens para Solucao de Recorrencias

    Substituindo a Solucao na Recorrencia

    I Suponha que acreditamos que

    T (n) cn log2 n

    para todo n 2 e desejamos verificar que isto e verdade.I Claramente, esta relacao e verificada para n = 2 pois

    cn log2 n = 2c

    e a recorrencia explicitamente nos diz que T (2) c.

  • Introducao a Algoritmos 15 / 63

    Abordagens para Solucao de Recorrencias

    Por inducao, suponha que T (n) cn log2 n para valores menoresque n e queremos estabelecer que T (n) e verdadeiro.

    T (n) 2T (n/2) + cn 2c(n/2) log2(n/2) + cn= cn[log2 n log2 2] + cn= cn log2 n cn + cn= cn log2 n

    o que estabelece a verdade de T (n). Isto prova, por inducao, queT (n) cn log2 n para todo n 2.

  • Introducao a Algoritmos 16 / 63

    Abordagens para Solucao de Recorrencias

    Substituicao Parcial

    I A substituicao acima e fraca porque fixa as constantes, porempodemos mostrar a veracidade sem fixar as constantes.

    I Suponha que acreditamos que T (n) O(n log n), mas naoestamos certos das contantes em O().

    I Suponha que desejamos mostrar que

    T (n) kn logb n

    para certos valores k e b, que serao determinados mais tarde.

  • Introducao a Algoritmos 17 / 63

    Abordagens para Solucao de Recorrencias

    Comecamos com o passo de inducao

    T (n) 2T (n/2) + cn 2k

    (n2

    )logb

    (n2

    )+ cn

    kn [logb n logb 2] + cn= kn logb n kn logb 2 + cn

    Agora podemos definir b = 2 pois ira tornar logb(n/2) = log2 n 1.

  • Introducao a Algoritmos 18 / 63

    Abordagens para Solucao de Recorrencias

    I Prosseguindo

    T (n) kn log2 n kn + cnI Existe uma escolha de k que ira tornar a expressao limitada

    por kn log2 n?

    I A resposta e sim, basta usar qualquer k c, para chegarmos a

    T (n) kn log2 n kn + cn kn log2 n

  • Introducao a Algoritmos 19 / 63

    Outras Recorrencias

    Sumario

    Merge Sort

    Abordagens para Solucao de Recorrencias

    Outras Recorrencias

    Contando Inversoes

    Encontrando os Pontos Mais Proximos

  • Introducao a Algoritmos 20 / 63

    Outras Recorrencias

    I Consideramos uma classe de recorrencias que generalizam arecorrencia do Merge-Sort.

    I Esta classe compreende a divisao e conquista querecursivamente resolve q subproblemas de tamanho n/2, edepois combina os resultados em tempo O(n).

    I Para alguma constante c,

    T (n) qT (n/2) + cn, quando n > 2T (2) c

  • Introducao a Algoritmos 21 / 63

    Outras Recorrencias

    Caso q > 2

    Usando o metodo da expansao:

    I avaliar os primeiros nveis

    I identificar um padrao

    I somar sobre todos os nveis de recursao

  • Introducao a Algoritmos 22 / 63

    Outras Recorrencias

    I nvel 0: cn

    I nvel 1: qc n2I nvel 2: q2c n4I nvel k: qkc n

    2k

  • Introducao a Algoritmos 23 / 63

    Outras Recorrencias

    T (n) q0c n20

    + q1cn

    21+ q2c

    n

    22+ + qkc n

    2k

    cnlog2 n1k=0

    (q2

    )k= cn

    (r log2 n 1)r 1 com r = q/2

  • Introducao a Algoritmos 24 / 63

    Outras Recorrencias

    Portanto,

    T (n) cn(r log2 n

    )r 1

    =

    (c

    r 1)nr log2 n

  • Introducao a Algoritmos 25 / 63

    Outras Recorrencias

    Substituicao Parcial

    I O aparecimento de log2 q no expoente seguiu naturalmente dasolucao da recorrencia, com q > 2, mas nao e necessariamenteuma expressao que anteciparamos.

    I Suponha que acreditamos que a solucao da recorrencia, comq > 2, tenha a forma T (n) knd para constantes k e d . Estee um chute bem geral.

  • Introducao a Algoritmos 26 / 63

    Outras Recorrencias

    Temos que

    T (n) qT (n/2) + cn

    e aplicando a hipotese indutiva em T (n/2) chegamos a

    T (n) qk(n

    2

    )d+ cn

    =q

    2dknd + cn

  • Introducao a Algoritmos 27 / 63

    Outras Recorrencias

    Exemplo: q = 3

  • Introducao a Algoritmos 28 / 63

    Outras Recorrencias

    Isto e muito proximo de uma formula que funciona se escolhermosd tal que q

    2d= 1, entao teremos

    T (n) knd + cn

    que e quase perfeito, exceto pelo termo cn.

  • Introducao a Algoritmos 29 / 63

    Outras Recorrencias

    I A escolha de d e facil, basta fazer q = 2d o que implicad = log2 q.

    I Para resolvermos/eliminarmos cn, vamos mudar o chute paraT (n) knd ln. Entao,

    T (n) qk(n

    2

    )d ql (n2

    )+ cn

    =q

    2dknd ql

    2n + cn

    = knd ql2n + cn

    = knd (ql

    2+ c

    )n

  • Introducao a Algoritmos 30 / 63

    Outras Recorrencias

    Esta hipotese funciona se escolhermos l tal que:

    ql

    2 c = l (q 2)l = 2c

    l = 2cq 2

    Ainda temos que resolver o caso base, com n = 2. Isto pode serresolvido selecionando k grande o suficiente para que o limite sejavalido quando n = 2.

  • Introducao a Algoritmos 31 / 63

    Outras Recorrencias

    Caso q = 1

    Aqui consideramos o caso quando q = 1, neste caso:{T (n) T (n/2) + cn quando n > 2T (2) c (1)

    Analise:

    1. analisando os primeiros nveis

    2. identificando um padrao

    3. somando sobre todos os nveis da recursao

  • Introducao a Algoritmos 32 / 63

    Outras Recorrencias

    I nvel 0: cn

    I nvel 1: cn/2

    I nvel 2 cn/4

  • Introducao a Algoritmos 33 / 63

    Outras Recorrencias

    Exemplo: q = 1

  • Introducao a Algoritmos 34 / 63

    Outras Recorrencias

    T (n) log2 n1j=0

    cn

    2j= cn

    log2 n1j=0

    (1

    2j

    )

    cnj=0

    (1

    2j

    )= cn

    1

    1 1/2 = 2cn

    = O(n)

  • Introducao a Algoritmos 35 / 63

    Outras Recorrencias

    Substituicao Parcial

    Da mesma forma que no caso anterior, vamos supor que

    T (n) knd

    Tentando estabelecer a veracidade por inducao,

    T (n) T (n/2) + cn k

    (n2

    )d+ cn

    =k

    2dnd + cn

  • Introducao a Algoritmos 36 / 63

    Outras Recorrencias

    Agora escolhamos d = 1 e k = 2c, obtendo

    T (n) k2n + cn

    =

    (k

    2+ c

    )n

    = kn

  • Introducao a Algoritmos 37 / 63

    Contando Inversoes

    Sumario

    Merge Sort

    Abordagens para Solucao de Recorrencias

    Outras Recorrencias

    Contando Inversoes

    Encontrando os Pontos Mais Proximos

  • Introducao a Algoritmos 38 / 63

    Contando Inversoes

    Contando Inversoes

    I Uma aplicacao que tem se tornado muito comum e conhecidacomo filtragem colaborativa, na qual se tenta casar aspreferencias de uma pessoa (livros, filmes e restaurantes) comas preferencias de outras pessoas na Internet.

    I Quando a Internet identifica pessoas com preferenciassimilares a`s suas, ela pode realizar recomendacoes.

    I Uma outra aplicacao e a meta-busca, que realiza buscas emdiferentes sites e depois combina os resultados baseando-senas similaridades e diferencas dos resultados.

  • Introducao a Algoritmos 38 / 63

    Contando Inversoes

    Contando Inversoes

    I Uma aplicacao que tem se tornado muito comum e conhecidacomo filtragem colaborativa, na qual se tenta casar aspreferencias de uma pessoa (livros, filmes e restaurantes) comas preferencias de outras pessoas na Internet.

    I Quando a Internet identifica pessoas com preferenciassimilares a`s suas, ela pode realizar recomendacoes.

    I Uma outra aplicacao e a meta-busca, que realiza buscas emdiferentes sites e depois combina os resultados baseando-senas similaridades e diferencas dos resultados.

  • Introducao a Algoritmos 38 / 63

    Contando Inversoes

    Contando Inversoes

    I Uma aplicacao que tem se tornado muito comum e conhecidacomo filtragem colaborativa, na qual se tenta casar aspreferencias de uma pessoa (livros, filmes e restaurantes) comas preferencias de outras pessoas na Internet.

    I Quando a Internet identifica pessoas com preferenciassimilares a`s suas, ela pode realizar recomendacoes.

    I Uma outra aplicacao e a meta-busca, que realiza buscas emdiferentes sites e depois combina os resultados baseando-senas similaridades e diferencas dos resultados.

  • Introducao a Algoritmos 39 / 63

    Contando Inversoes

    I O problema fundamental consiste da comparacao de doisranqueamentos. Voce ranqueia n filmes e o filtro colaborativoprocura na base de dados por pessoas que tem ranqueamentossimilares.

    I Voce rotula os filmes de 1 a n segundo os teus scores. Nos edado um conjunto de n numeros, a1, a2, . . ., an. Queremosmedir o quao distante sao estes numeros de uma ordemascendente.

    I A medida deve ser 0 de a1 < a2 < < an, aumentando a`medida que os numeros ficam embaralhados.

  • Introducao a Algoritmos 39 / 63

    Contando Inversoes

    I O problema fundamental consiste da comparacao de doisranqueamentos. Voce ranqueia n filmes e o filtro colaborativoprocura na base de dados por pessoas que tem ranqueamentossimilares.

    I Voce rotula os filmes de 1 a n segundo os teus scores. Nos edado um conjunto de n numeros, a1, a2, . . ., an. Queremosmedir o quao distante sao estes numeros de uma ordemascendente.

    I A medida deve ser 0 de a1 < a2 < < an, aumentando a`medida que os numeros ficam embaralhados.

  • Introducao a Algoritmos 39 / 63

    Contando Inversoes

    I O problema fundamental consiste da comparacao de doisranqueamentos. Voce ranqueia n filmes e o filtro colaborativoprocura na base de dados por pessoas que tem ranqueamentossimilares.

    I Voce rotula os filmes de 1 a n segundo os teus scores. Nos edado um conjunto de n numeros, a1, a2, . . ., an. Queremosmedir o quao distante sao estes numeros de uma ordemascendente.

    I A medida deve ser 0 de a1 < a2 < < an, aumentando a`medida que os numeros ficam embaralhados.

  • Introducao a Algoritmos 40 / 63

    Contando Inversoes

    I Uma maneira natural de quantificar esta nocao e atraves dacontagem de inversoes. Dizemos que dois ndices i < jformam uma inversao ser ai > aj , ou seja, se ai e aj estao forade ordem.

    I Queremos determinar o numero de inversoes na sequenciaa1, . . . , an.

    I Exemplo (2, 4, 1, 3, 5). Cada intersecao de segmentos de linhacorresponde a um par que esta fora da ordem.

    I Ha tres inversoes no exemplo: (2, 1), (4, 1) e (4, 3).

  • Introducao a Algoritmos 40 / 63

    Contando Inversoes

    I Uma maneira natural de quantificar esta nocao e atraves dacontagem de inversoes. Dizemos que dois ndices i < jformam uma inversao ser ai > aj , ou seja, se ai e aj estao forade ordem.

    I Queremos determinar o numero de inversoes na sequenciaa1, . . . , an.

    I Exemplo (2, 4, 1, 3, 5). Cada intersecao de segmentos de linhacorresponde a um par que esta fora da ordem.

    I Ha tres inversoes no exemplo: (2, 1), (4, 1) e (4, 3).

  • Introducao a Algoritmos 41 / 63

    Contando Inversoes

    I Se os ranqueamentos estao em total desacordo, entao onumero de inversoes e tal que todos pares definem uma

    inversao, ou seja,

    (n2

    )e o numero de inversoes.

  • Introducao a Algoritmos 42 / 63

    Contando Inversoes

    Projetando um Algoritmo

    I Uma possibilidade e examinar cada um dos pares, levando aum algoritmo de tempo O(n2).

    I Estrategia de divisao e conquista:I Divida a cadeia a1, . . . , an em duas metades, a1, . . . , am eam+1, . . . , an.

    I Calcule o numero de inversoes em cada metade.I Calcule o numero de inversoes (ai , aj) com ai e aj pertencendo

    a cadeias/metades distintas.

  • Introducao a Algoritmos 42 / 63

    Contando Inversoes

    Projetando um Algoritmo

    I Uma possibilidade e examinar cada um dos pares, levando aum algoritmo de tempo O(n2).

    I Estrategia de divisao e conquista:I Divida a cadeia a1, . . . , an em duas metades, a1, . . . , am eam+1, . . . , an.

    I Calcule o numero de inversoes em cada metade.I Calcule o numero de inversoes (ai , aj) com ai e aj pertencendo

    a cadeias/metades distintas.

  • Introducao a Algoritmos 43 / 63

    Contando Inversoes

    Exemplo: q = 1

  • Introducao a Algoritmos 44 / 63

    Contando Inversoes

    I Para nos ajudar a contar o numero de inversoes entre duasmetades, vamos fazer com que o algoritmo recursivamenteordene os numeros das duas metades.

    I Toda vez que o elemento ai e inserido na lista intercalada C ,nenhuma inversao e contabilizada pois ai e menor ou igual atodos os elementos em B.

    I Por outro lado, toda vez que um elemento bj e inserido em C ,incrementamos o numero de inversoes do numero deelementos restantes em A, pois eles sao todos maiores que bj .

  • Introducao a Algoritmos 44 / 63

    Contando Inversoes

    I Para nos ajudar a contar o numero de inversoes entre duasmetades, vamos fazer com que o algoritmo recursivamenteordene os numeros das duas metades.

    I Toda vez que o elemento ai e inserido na lista intercalada C ,nenhuma inversao e contabilizada pois ai e menor ou igual atodos os elementos em B.

    I Por outro lado, toda vez que um elemento bj e inserido em C ,incrementamos o numero de inversoes do numero deelementos restantes em A, pois eles sao todos maiores que bj .

  • Introducao a Algoritmos 44 / 63

    Contando Inversoes

    I Para nos ajudar a contar o numero de inversoes entre duasmetades, vamos fazer com que o algoritmo recursivamenteordene os numeros das duas metades.

    I Toda vez que o elemento ai e inserido na lista intercalada C ,nenhuma inversao e contabilizada pois ai e menor ou igual atodos os elementos em B.

    I Por outro lado, toda vez que um elemento bj e inserido em C ,incrementamos o numero de inversoes do numero deelementos restantes em A, pois eles sao todos maiores que bj .

  • Introducao a Algoritmos 45 / 63

    Contando Inversoes

    Merge-and-Count(A,B)

    I Maintain a Current pointer into each list, intialized to thefront

    I Maintain a variable Count for the number of inversion,initialized to 0

    I While both lists are nonemptyI Let ai and bj be the elements pointed by the Current pointerI Append the smaller element to the output listI If bj < ai , increment Count by the number of elements

    remaining in AI Advance the pointer Current in the list from which the smaller

    element was removed

    I Once one list is empty, append the remainder of the other tothe output

    I Return Count and the merged list

  • Introducao a Algoritmos 46 / 63

    Contando Inversoes

    Sort-and-Count(L)I If the list has one element then

    I there are no inversionsI Return (0, L)

    I elseI Divide the list in two halves: A contains the first dn/2e

    elements, B contains the remaining bn/2c elementsI (rA,A)=Sort-and-Count(A)I (rB ,B)=Sort-and-Count(B)I (r , L)=Merge-and-Count(A,B)I Return (rA + rB + r , L)

    Observacao

    Sort-and-Count roda em tempo O(n log n).

  • Introducao a Algoritmos 46 / 63

    Contando Inversoes

    Sort-and-Count(L)I If the list has one element then

    I there are no inversionsI Return (0, L)

    I elseI Divide the list in two halves: A contains the first dn/2e

    elements, B contains the remaining bn/2c elementsI (rA,A)=Sort-and-Count(A)I (rB ,B)=Sort-and-Count(B)I (r , L)=Merge-and-Count(A,B)I Return (rA + rB + r , L)

    Observacao

    Sort-and-Count roda em tempo O(n log n).

  • Introducao a Algoritmos 47 / 63

    Encontrando os Pontos Mais Proximos

    Sumario

    Merge Sort

    Abordagens para Solucao de Recorrencias

    Outras Recorrencias

    Contando Inversoes

    Encontrando os Pontos Mais Proximos

  • Introducao a Algoritmos 48 / 63

    Encontrando os Pontos Mais Proximos

    Definicao do Problema

    Dados n pontos no plano, encontre o par de pontos mais proximo.

    I Uma solucao obvia consiste em verificar todos os O(n2) parespossveis e selecionar o par mais proximo.

    I Shamos e Hoey se perguntaram se existiria um algoritmo maisrapido do que o algoritmo quadratico. Eles encontraram umalgoritmo de tempo O(n log n).

  • Introducao a Algoritmos 48 / 63

    Encontrando os Pontos Mais Proximos

    Definicao do Problema

    Dados n pontos no plano, encontre o par de pontos mais proximo.

    I Uma solucao obvia consiste em verificar todos os O(n2) parespossveis e selecionar o par mais proximo.

    I Shamos e Hoey se perguntaram se existiria um algoritmo maisrapido do que o algoritmo quadratico. Eles encontraram umalgoritmo de tempo O(n log n).

  • Introducao a Algoritmos 49 / 63

    Encontrando os Pontos Mais Proximos

    Projetando o Algoritmo

    I Seja P = {p1, . . . , pn} o conjunto de pontos onde pi = (xi , yi ).I Para dois pontos pi , pj P, d(pi , pj) e a distancia Euclidiana

    entre eles.

    I Nosso objetivo e encontrar o par de pontos pi , pj queminimiza d(pi , pj).

    I Assumimos que nao ha dois pontos em P com a mesmacoordenada x ou y .

  • Introducao a Algoritmos 49 / 63

    Encontrando os Pontos Mais Proximos

    Projetando o Algoritmo

    I Seja P = {p1, . . . , pn} o conjunto de pontos onde pi = (xi , yi ).I Para dois pontos pi , pj P, d(pi , pj) e a distancia Euclidiana

    entre eles.

    I Nosso objetivo e encontrar o par de pontos pi , pj queminimiza d(pi , pj).

    I Assumimos que nao ha dois pontos em P com a mesmacoordenada x ou y .

  • Introducao a Algoritmos 50 / 63

    Encontrando os Pontos Mais Proximos

    Divisao e Conquista

    Estrategia:

    1. Dividimos os pontos em uma metade esquerda e uma metadedireita.

    2. Encontramos o par mais proximo na metade esquerda, e o parmais proximo na metade direita.

    3. Usamos a informacao anterior para encontrar a solucao global.As combinacoes nao consideradas sao aquelas que envolvemum ponto da esquerda e da direita.

  • Introducao a Algoritmos 51 / 63

    Encontrando os Pontos Mais Proximos

    Definindo a Recursao

    Em qualquer chamada recursiva sobre um conjunto P P,iniciamos com duas listas:

    I A lista P x com os pontos de P ordenados em xI A lista P y com os pontos de P ordenados em y

    Recursao:

    I Definimos como Q os dn/2e primeiros pontos na lista Px e Ros bn/2c ultimos pontos na lista Px . Teremos quatro listas:Qx , Qy , Rx e Ry

  • Introducao a Algoritmos 51 / 63

    Encontrando os Pontos Mais Proximos

    Definindo a Recursao

    Em qualquer chamada recursiva sobre um conjunto P P,iniciamos com duas listas:

    I A lista P x com os pontos de P ordenados em xI A lista P y com os pontos de P ordenados em y

    Recursao:

    I Definimos como Q os dn/2e primeiros pontos na lista Px e Ros bn/2c ultimos pontos na lista Px . Teremos quatro listas:Qx , Qy , Rx e Ry

  • Introducao a Algoritmos 52 / 63

    Encontrando os Pontos Mais Proximos

    Ilustracao

  • Introducao a Algoritmos 53 / 63

    Encontrando os Pontos Mais Proximos

    Definindo a Recursao

    Recursivamente encontra-se os pontos mais proximos em Q e R:

    I Suponha q?0 e q?1 os mais proximos em Q

    I Suponha r?0 e r?1 os mais proximos em R

  • Introducao a Algoritmos 54 / 63

    Encontrando os Pontos Mais Proximos

    Combinando as Solucoes

    I Seja = {d(q?0 , q?1), d(r?0 , r?1 )}I Questao: Existem pontos q Q e r R para os quaisd(q, r) < ? Se nao, entao ja encontramos o par de pontosmais proximo recursivamente. Caso contrario q e r definem opar mais proximo.

    I Seja x? a coordenada x do ponto Q mais a` direita, e seja L alinha vertical definida pela equacao x = x?. Esta reta separaos pontos dos conjuntos Q e R.

  • Introducao a Algoritmos 55 / 63

    Encontrando os Pontos Mais Proximos

    Proposicao

    Se existe q Q e r R para os quais d(q, r) < , entao q e restao a uma distancia de L

    ProvaSuponha que q e r existem, onde q = (qx , qy ) e r = (rx , ry ). Peladefinicao de r?, sabemos que qx x? rx . Entao,

    x? qx rx qx d(q, r) <

    Alem disso,

    rx x? rx qx d(q, r) <

  • Introducao a Algoritmos 56 / 63

    Encontrando os Pontos Mais Proximos

    ProvaLogo, os pontos q e r tem uma coordenada-x a unidades de x?

    e, portanto, estao a uma distancia maxima da linha L.

  • Introducao a Algoritmos 57 / 63

    Encontrando os Pontos Mais Proximos

    Observacao

    I Para encontrar q e r , podemos restringir a busca a uma bandaconsistindo de pontos em P que estao a uma distancia de L.

    I Seja S P este conjunto de pontos.I Seja Sy a lista de S ordenada pela coordenada-y . Em uma

    passagem por Py , podemos produzir Sy em tempo O(n).

  • Introducao a Algoritmos 57 / 63

    Encontrando os Pontos Mais Proximos

    Observacao

    I Para encontrar q e r , podemos restringir a busca a uma bandaconsistindo de pontos em P que estao a uma distancia de L.

    I Seja S P este conjunto de pontos.I Seja Sy a lista de S ordenada pela coordenada-y . Em uma

    passagem por Py , podemos produzir Sy em tempo O(n).

  • Introducao a Algoritmos 57 / 63

    Encontrando os Pontos Mais Proximos

    Observacao

    I Para encontrar q e r , podemos restringir a busca a uma bandaconsistindo de pontos em P que estao a uma distancia de L.

    I Seja S P este conjunto de pontos.I Seja Sy a lista de S ordenada pela coordenada-y . Em uma

    passagem por Py , podemos produzir Sy em tempo O(n).

  • Introducao a Algoritmos 58 / 63

    Encontrando os Pontos Mais Proximos

    Proposicao

    Existe q Q e r R com d(q, r) < se, e somente se, existes, s S para os quais d(s, s ) < .

  • Introducao a Algoritmos 59 / 63

    Encontrando os Pontos Mais Proximos

    Ilustracao

  • Introducao a Algoritmos 60 / 63

    Encontrando os Pontos Mais Proximos

    Proposicao

    Se s, s S tem a propriedade que d(s, s ) < , entao s e s estaoa 15 posicoes um do outro na lista ordenada Sy .

    Prova

    I Considere o subconjunto Z no plano dos pontos que estao auma distancia de L.

    I Particionamos Z em caixas com largura/altura /2.

    I Suponha que dois pontos pertencam a uma mesma caixa,entao ambos pertencem a Q ou ambos pertencem a R.

  • Introducao a Algoritmos 60 / 63

    Encontrando os Pontos Mais Proximos

    Proposicao

    Se s, s S tem a propriedade que d(s, s ) < , entao s e s estaoa 15 posicoes um do outro na lista ordenada Sy .

    Prova

    I Considere o subconjunto Z no plano dos pontos que estao auma distancia de L.

    I Particionamos Z em caixas com largura/altura /2.

    I Suponha que dois pontos pertencam a uma mesma caixa,entao ambos pertencem a Q ou ambos pertencem a R.

  • Introducao a Algoritmos 60 / 63

    Encontrando os Pontos Mais Proximos

    Proposicao

    Se s, s S tem a propriedade que d(s, s ) < , entao s e s estaoa 15 posicoes um do outro na lista ordenada Sy .

    Prova

    I Considere o subconjunto Z no plano dos pontos que estao auma distancia de L.

    I Particionamos Z em caixas com largura/altura /2.

    I Suponha que dois pontos pertencam a uma mesma caixa,entao ambos pertencem a Q ou ambos pertencem a R.

  • Introducao a Algoritmos 61 / 63

    Encontrando os Pontos Mais Proximos

    Prova

    I Mas dois pontos em uma mesma caixa estao a uma distanciamaxima de

    2/2 < , contradizendo a definicao que e a

    distancia mnima entre dois pontos de Q ou de R.

    I Portanto, cada caixa contem no maximo 1 ponto.

    I Agora suponha que s, s S tem a propriedade qued(s, s ) < , e que eles estao a pelo menos 16 posicoes um dooutro em Sy .

    I Assuma que s tem a menor coordenada-y .

  • Introducao a Algoritmos 61 / 63

    Encontrando os Pontos Mais Proximos

    Prova

    I Mas dois pontos em uma mesma caixa estao a uma distanciamaxima de

    2/2 < , contradizendo a definicao que e a

    distancia mnima entre dois pontos de Q ou de R.

    I Portanto, cada caixa contem no maximo 1 ponto.

    I Agora suponha que s, s S tem a propriedade qued(s, s ) < , e que eles estao a pelo menos 16 posicoes um dooutro em Sy .

    I Assuma que s tem a menor coordenada-y .

  • Introducao a Algoritmos 61 / 63

    Encontrando os Pontos Mais Proximos

    Prova

    I Mas dois pontos em uma mesma caixa estao a uma distanciamaxima de

    2/2 < , contradizendo a definicao que e a

    distancia mnima entre dois pontos de Q ou de R.

    I Portanto, cada caixa contem no maximo 1 ponto.

    I Agora suponha que s, s S tem a propriedade qued(s, s ) < , e que eles estao a pelo menos 16 posicoes um dooutro em Sy .

    I Assuma que s tem a menor coordenada-y .

  • Introducao a Algoritmos 62 / 63

    Encontrando os Pontos Mais Proximos

    Prova

    I Como Z pode ter no maximo 1 ponto por caixa, ha pelomenos 3 linhas da caixa entre s e s .

    I Mas dois pontos quaisquer de Z separados por 3 ou maislinhas deve estar a uma distancia 3/2 um do outro, o queconfigura uma contradicao.

  • Introducao a Algoritmos 63 / 63

    Encontrando os Pontos Mais Proximos

    Encerramento

    I Fim!

    I Obrigado pela presenca