Ermitteln der minimalen Differenz zwischen jedem Element eines Vektors und einem anderen Vektor

8

Ich habe zwei Vektoren von Ganzzahlen und für jedes Element des zweiten Vektors möchte ich den minimalen Abstand zu jedem Element des ersten Vektors finden - zum Beispiel

%Vor%

gibt

zurück %Vor%

Gibt es einen effizienteren Weg? Ich möchte dies auf Tausende (Millionen?) Von obj1 & amp; obj2.

Danke, Aaron

    
Aaron Statham 27.10.2009, 02:01
quelle

2 Antworten

14

Ich würde eine Schrittfunktion verwenden, die nach dem ersten Vektor sortiert ist. Dies vermeidet Schleifen und ist ziemlich schnell in R.

%Vor%

Jetzt gibt myfun(1) Ihnen den Index des größten Elements von sorted.x , dessen Wert kleiner als 1 ist. In meinem Fall

%Vor%

Sie wissen also, dass das nächste Element entweder sorted.x[myfun(1)] oder sorted.x[myfun(1) + 1] ist. Folglich (und Auffüllen für 0),

%Vor%     
Jonathan Chang 27.10.2009, 03:48
quelle
2

Beginnen Sie mit dem Sortieren von obj1

Dann können Sie eine binäre Suche in obj1 für jedes Element von obj2 durchführen. Wenn Sie wissen, wo das Element sein würde, können Sie die Entfernung zu den beiden nahegelegenen Elementen von obj1 vergleichen und erhalten so den Mindestabstand.

Laufzeit (wobei n1 = | obj1 | und n2 = | obj2 |): (n1 + n2) log (n1)

    
Jayen 27.10.2009 02:13
quelle

Tags und Links