Domanda

Ho un oggetto con una serie di parametri come:

var obj = new {Param1 = 100; Param2 = 212; Param3 = 311; param4 = 11; Param5 = 290;}

Dall'altro lato ho un elenco di oggetti:

var obj1  = new {Param1 = 1221 ; Param2 = 212 ; Param3 = 311 ; param4 = 11  ; Param5 = 290 ; }
var obj3  = new {Param1 = 35   ; Param2 = 11  ; Param3 = 319 ; param4 = 211 ; Param5 = 790 ; }
var obj4  = new {Param1 = 126  ; Param2 = 218 ; Param3 = 2   ; param4 = 6   ; Param5 = 190 ; }
var obj5  = new {Param1 = 213  ; Param2 = 121 ; Param3 = 61  ; param4 = 11  ; Param5 = 29  ; }
var obj7  = new {Param1 = 161  ; Param2 = 21  ; Param3 = 71  ; param4 = 51  ; Param5 = 232 ; }
var obj9  = new {Param1 = 891  ; Param2 = 58  ; Param3 = 311 ; param4 = 21  ; Param5 = 590 ; }
var obj11 = new {Param1 = 61   ; Param2 = 212 ; Param3 = 843 ; param4 = 89  ; Param5 = 210 ; }

Qual è l'algoritmo migliore (più semplice) per trovare la corrispondenza più vicina per il primo oggetto negli oggetti elencati?

È stato utile?

Soluzione

È necessario definire il termine corrispondenza più vicina prima di cercarlo!!



1- Un modo in cui molte persone lo usano è Errore quadratico medio (O Distanza euclidea) :

Calcola l'errore quadratico medio per tutti gli oggetti:

Sqr(obj.Param1-obj1.Param1) + Sqr(obj.Param2-obj1.Param2) + ..... // for obj1
Sqr(obj.Param1-obj2.Param1) + Sqr(obj.Param2-obj2.Param2) + ..... // for obj2

e scegli quello con il valore minimo...



2- Puoi anche utilizzare Errore assoluto minimo:

Abs(obj.Param1-obj1.Param1) + Abs(obj.Param2-obj1.Param2) + ..... // for obj1
Abs(obj.Param1-obj2.Param1) + Abs(obj.Param2-obj2.Param2) + ..... // for obj2

e scegli quello con il valore minimo...



3- Inoltre puoi candidarti k-vicino più vicino con qualsiasi criterio tu abbia scelto sopra



Tutto dipende dalle proprietà di questi parametri...

Per ulteriori letture potresti guardare Elenco degli algoritmi di classificazione

Altri suggerimenti

Dipende, immagino.Mi vengono in mente diverse possibilità:

  • TRISTE:calcola la differenza assoluta di ciascuna coppia di parametri (quello che testi e ciascuno dei tuoi candidati) e sommali.Il numero più basso è il più vicino
  • Norma L2:Calcola la differenza di ciascuna coppia di parametri, elevali al quadrato, sommali, calcola la radice quadrata
  • Coseno:Moltiplicare ciascun parametro per l'altro parametro e sommare.Dividere il risultato per il prodotto della lunghezza (L2-Norm) di entrambi gli oggetti

ovviamente ci sono mille altre possibilità, quindi devi specificare cosa vuoi esattamente!

Si potrebbe anche utilizzare il distanza euclidea .

In sostanza si fa finta ogni oggetto è un punto in 5 dimensioni e il look per il punto che è più vicino (cioè .: ha la distanza più breve).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top