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
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
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),
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)
Tags und Links r