Digamos que você tenha k
matrizes de tamanho N
, cada uma contendo valores exclusivos de 1
até 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 1
e 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 k
matrizes), mas existe uma solução melhor?
Quero implementar esse algoritmo em C ++, mas qualquer descrição de uma solução seria útil.
fonte
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=3
será a distância máxima e1
será 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/2
matrizes (na maioria das vezes), ele já estará no topo médio (> =2
da distância), mesmo se eles estiverem1
distantes nas outrask/2
matrizes. Essa poderia ser uma solução para o melhor caso emO(2k)
=O(k)
.fonte