Distância média máxima entre dois números em várias matrizes

8

Digamos que você tenha kmatrizes de tamanho N, cada uma contendo valores exclusivos de 1até N.

Como você encontraria os dois números que estão, em média, os mais distantes um do outro?

Por exemplo, dadas as matrizes:

[1,4,2,3]
[4,2,3,1]
[2,3,4,1]

Então a resposta seria item 1e 2, porque eles estão à distância 2 nos dois primeiros arrays e 3 números no último.

Estou ciente de uma solução O (kN ^ 2) (medindo a distância entre cada par de números para cada uma das kmatrizes), mas existe uma solução melhor?

Quero implementar esse algoritmo em C ++, mas qualquer descrição de uma solução seria útil.

Magnus EF
fonte

Respostas:

3

Após uma transformação em tempo linear indexando os números, esse problema se resume a calcular o diâmetro de um conjunto de pontos em relação à distância L1. Infelizmente, esse problema está sujeito à maldição da dimensionalidade.

Dado

    1 2 3 4
1: [1,4,2,3]
2: [4,2,3,1]
3: [2,3,4,1]

nós computamos

    1 2 3
1: [1,4,4]
2: [3,2,1]
3: [4,3,2]
4: [2,1,3]

e então a distância L1 entre 1e 2é |1-3| + |4-2| + |4-1| = 8, que é a distância média (em termos de problemas) dos tempos k = 3.

Dito isto, você pode aplicar um algoritmo de vizinho mais próximo aproximado usando a entrada acima como banco de dados e a imagem de cada ponto no banco de dados sob N+1-vcomo uma consulta.

David Eisenstat
fonte
Essa referência sugere um algoritmo aleatório com tempo de execução linear esperado que pode ser de interesse do OP.
hilberts_drinking_problem 6/03
@hilberts_drinking_problem Pode ser útil, mas apenas para dimensões baixas.
David Eisenstat
Você acha que seria possível combinar isso com uma abordagem heurística descrita em outra resposta?
Magnus EF
@ MagnusE-F Existem muitos algoritmos vizinhos mais próximos por aí. Eu alterei minha resposta sobre como reduzir esse problema para a RNA.
David Eisenstat
1

Eu tenho uma sugestão para o melhor caso . Você pode seguir uma abordagem heurística.

Por exemplo, você sabe que N=4, se , N-1=3será a distância máxima e 1será o mínimo. A distância média é 10/6=1,66667 (somas de distâncias entre pares dentro da matriz / número de pares dentro de uma matriz).

Então, você sabe que se dois números estiverem nas bordas das k/2matrizes (na maioria das vezes), ele já estará no topo médio (> = 2da distância), mesmo se eles estiverem 1distantes nas outras k/2matrizes. Essa poderia ser uma solução para o melhor caso em O(2k)= O(k).

samthegolden
fonte
Parece uma boa abordagem. No meu caso, N é muito maior que ke acho que um algoritmo heurístico terá um bom desempenho
Magnus EF
E o pior caso desse algoritmo? Ainda é O (k N ^ 2)?
Jérôme Richard
@ JérômeRichard não alteramos o algoritmo, apenas adicionamos uma heurística que, se aplicável, se aplica apenas a um bom cenário. Na pior das hipóteses, o algoritmo principal o resolverá.
samthegolden 6/03