Encontre a menor distância par a par de pontos em o (n log n)?

11

O exercício a seguir foi entregue aos alunos que eu supervisiono:

Dados n pontos no plano, crie um algoritmo que encontre um par de pontos cuja distância seja mínima entre todos os pares de pontos. O algoritmo deve ser executado no tempo o(n2) .

Existe um algoritmo de divisão e conquista (relativamente) simples que resolve a tarefa no tempo Θ(nlogn) .

Pergunta 1 : Existe um algoritmo que resolve o problema em questão exatamente na pior das hipóteses, o(nlogn) ?

O que me fez suspeitar que isso seja possível é um resultado que lembro de ter visto em alguma conversa (referência apreciada). Ele afirmou algo ao longo das linhas que não mais do que um número constante cN de pontos pode ser arranjado no plano em torno de algum ponto p dentro de um círculo de raio rR , com r a distância mínima entre dois dos pontos envolvidos . Eu acho que c=7 , os pontos formando um hexágono equilateral com p no centro (no caso extremo).

Nesse caso, o algoritmo a seguir deve resolvê-los em n etapas.

fun mindist [] | p::[] = INFINITY
|   mindist p1::p1::[] = dist(P[0], P[1])
|   mindist p::r = let m = mindist(r) in
                     min(m, nextNeighbour(p, r, m))
                   end

Note que este é (alegou ser) em tempo linear, pois apenas um número constante de pontos rpode haver farer longe do que ma partir de p(assumindo acima declaração); somente esses pontos precisam ser investigados para encontrar um novo mínimo. Há uma pegadinha, é claro; como você implementa nextNeighbour(talvez com pré-processamento em tempo linear)?

Pergunta 2 : Deixe um conjunto de pontos e um ponto p R . Seja m R comRpRmR

mmin{dist(p1,p2)p1,p2R}

e

Rp,m:={ppRdist(p,p)m} .

Suponha que seja finito. É possível encontrar com distância mínima de em tempo (amortizado) ? (Você pode supor que seja construído adicionando pontos investigados um por um.) p 'R p , m p ó ( 1 ) R pRp,mpRp,mpO(1)Rp

Rafael
fonte
2
Eu proporia a pesquisa com "par mais próximo" como uma palavra-chave.
Yoshio Okamoto
Isso já é padrão, veja os dois primeiros capítulos aqui: goo.gl/pLiEO
Sariel Har-Peled
Ps. Se você quiser o tempo esperado, poderá calcular a triangulação de Delaunay, que contém a distância mínima.
Domotorp 22/01/12
Após a pergunta 1, você escreve "não é possível organizar mais do que um número constante de pontos no plano em torno de algum ponto p dentro de um círculo de raio r, com r a distância mínima entre p e qualquer outro ponto". Isso certamente não é verdade: você pode pegar qualquer número de pontos no círculo do raio r. Sua afirmação é verdadeira se r é a distância mínima entre dois pontos, caso em que a prova é bastante simples.
Domotorp 22/01/12
a primeira pergunta é sobre material didático, como já foi apontado: definitivamente não é o nível de pesquisa. eu não entendo a segunda pergunta: para qualquer , o você está pedindo ou não existe ou é o vizinho mais próximo para em . Então, como isso é diferente da pergunta 1? sobre o que você está amortizando (ou seja, se essa é uma questão de estrutura de dados, quais são as atualizações e consultas)? p p RmppR
Sasho Nikolov

Respostas:

12

É impossível resolver o problema em menos de tempo em modelos padrão, por exemplo, usando árvores de decisão algébricas. Isso se segue do trabalho de Yao e Ben-Or, que mostra que, neste modelo, não é possível decidir se um conjunto de números de entrada é diferente ou não (consulte http://people.bath.ac.uk/masnnv /Eaching/AAlg11_8.pdf ). No caso de seu problema, imagine que todos eles estejam na linha real. Se dois pontos forem iguais, sua saída será de dois pontos com distância zero, caso contrário não, portanto, uma solução para o seu problema também resolveria o problema DISTINCT NUMBERS. Se você quiser supor que todos os seus pontos são diferentes, basta adicionar aon i ε x i n ε 2 n ε ohms ( N log N )cnlognniϵxientradas do problema DISTINCT NUMBERS, neste caso, se sua saída for no máximo , os números não serão todos distintos. (Embora, neste caso, você precise usar uma versão de promessa em que a diferença de dois números distintos seja pelo menos , mas acho que a mesma prova funciona para mostrar que você também precisa de neste caso.)nϵ2nϵΩ(nlogn)

domotorp
fonte
De fato, obrigado. Isso responde à pergunta 2 (negativamente) também.
Raphael
Aparentemente, o problema mencionado é também conhecido como Problema de Distinção de Elemento .
Raphael
A referência de @Sariel Har-Peled ( goo.gl/pLiEO ) apresenta um algoritmo prático de tempo linear para encontrar o par mais próximo. Esse documento aborda diretamente esse argumento e explica que ele não se aplica porque o algoritmo usa um modelo de computação mais poderoso.
22612 kevin cline
1
Sim, mas a pergunta pedia especificamente o pior caso de tempo de execução. Mas concordo que todas as minhas observações já aparecem na tese de Sariel.
Domotorp
17

Existe um algoritmo linear aleatório de tempo esperado por Rabin; veja, por exemplo, Rabin lança uma moeda no blog de Lipton.

David Eppstein
fonte
0

Por mais que eu entenda a pergunta 2, o algoritmo de Rabin fornece uma espécie de resposta para isso também. Em cada etapa do tempo, a estrutura de dados é uma grade com largura de célula menor que a menor distância entre pares de pontos vistos até agora, dividida por (para que nenhuma célula contenha mais que um único ponto). Para responder à consulta na pergunta 2, você só precisa mapear para uma célula na grade e observar um número constante de células ao seu redor. Pela análise do algoritmo, se o conjunto de pontos de entrada for examinado em ordem aleatória, o tempo de atualização amortizado para a grade será por novo ponto na expectativa. pO(1)2pO(1)

Sasho Nikolov
fonte
BTW, estou me referindo não à versão do algoritmo como Lipton o descreve, mas como é descrito no primeiro comentário (e no livro de Kleinberg e Tardos).
Sasho Nikolov
Somente na expectativa, veja a resposta da domotorps.
Raphael
não vejo em nenhum lugar que você queira se restringir a algoritmos determinísticos. O algoritmo de rabin é interessante precisamente porque contorna os limites inferiores da árvore de decisão (isso é semelhante aos limites inferiores para algoritmos de classificação por comparação versus algoritmos de classificação por número inteiro). btw, há provavelmente mais que usos Rabin para ir ao redor do nomeadamente o truque limite inferior, hash usado para acesso a rede
Sasho Nikolov
4
Re "mais que Rabin usa": também a capacidade de arredondar entradas de números reais para números inteiros. É preciso ter muito cuidado com isso: se você configurar um modelo de computação no qual é possível executar operações aritméticas padrão e arredondar números reais, tudo em tempo constante por operação, é possível resolver problemas completos do PSPACE em tempo polinomial neste modelo. Mas Rabin apenas arredonda os números de entrada (para diferentes níveis de precisão em diferentes iterações), e essa forma circunscrita de arredondamento não é problemática.
David Eppstein
@SashoNikolov Eu estava procurando pelo pior caso em , então também pelo pior caso na questão 2. Isso não tem nada a ver com o fato de o algoritmo ser determinístico. Não sei o que acontece se você combinar o tempo esperado e o amortizado. O ( 1 )o(nlogn) O(1)
Raphael