C'è un capitolo dedicato Introduction to Algorithms di trovare due punti più vicini in uno spazio bidimensionale in O (n * log n) tempo. Puoi verificarlo su google books. In effetti, lo consiglio a tutti perché il modo in cui applicano la tecnica divide et impera a questo problema è molto semplice, elegante e impressionante.
Anche se non può essere esteso direttamente al tuo problema (come costante 7
dovrebbe essere sostituito con 2^101 - 1
), dovrebbe andare bene per la maggior parte dei set di dati. Quindi, se hai un input ragionevolmente casuale, ti darà la complessità O(n*logn*m)
dove n
è il numero di punti e m
è il numero di dimensioni.
modificare
Questo è tutto a patto di avere spazio euclideo. La lunghezza del vettore v
è sqrt(v0^2 + v1^2 + v2^2 + ...)
. Se è possibile scegliere la metrica, tuttavia, potrebbero esserci altre opzioni per ottimizzare l'algoritmo.
fonte
2010-10-10 05:39:57
È uno spazio metrico? – Seth
Fuori interesse, dove hai preso uno spazio di 100 dimensioni? –
la domanda manca di chiarezza. questa è una domanda matematica? – Sarmaad