Angenommen, ist fest (wie in beiden verknüpften Vorlesungen), dann bestimmen Ihre algorithmischen Entscheidungen, ob Ihre Berechnung Laufzeit oder Laufzeit benötigt.O ( n d + k n ) O ( n d k )kO ( n d+ k n )O ( n dk )
Betrachten wir zunächst einen -Laufzeitalgorithmus:O ( n d+ k n )
- Initialisieren Sie für alle Beobachtungen im Trainingssatzis e l e c t e dich= 0ich
- Für jeden Trainingssatz Beobachtung , berechnet , der Abstand von der neuen Beobachtung Trainingssatz Beobachtungd i s t i iichdich s tichich
- Für bis : Durchlaufen Sie alle Trainingssatzbeobachtungen, indem Sie den Index mit dem kleinsten Wert , für den . Wählen Sie diese Beobachtung aus, indem Sie .k i d i s t i s e l e c t e d i = 0 s e l e c t e d i = 1j = 1kichdich s tichs e l e c t e dich= 0s e l e c t e dich= 1
- Gibt die ausgewählten Indizes zurückk
Für jede Entfernungsberechnung ist eine -Laufzeit erforderlich , sodass für den zweiten Schritt eine -Laufzeit erforderlich ist . Für jede Iteration im dritten Schritt führen wir -Arbeit durch, indem wir die Beobachtungen des Trainingssatzes durchlaufen, sodass für den gesamten Schritt erforderlich ist . Der erste und vierte Schritt erfordern nur Arbeit, sodass wir eine Laufzeit erhalten.O ( n d ) O ( n ) O ( n k ) O ( n ) O ( n d + k n )O ( d)O ( n d)O ( n )O ( n k )O ( n )O ( n d+ k n )
Betrachten wir nun einen -Laufzeitalgorithmus:O ( n dk )
- Initialisieren Sie für alle Beobachtungen im Trainingssatzis e l e c t e dich= 0ich
- Für bis : Durchlaufen Sie alle Trainingssatzbeobachtungen und berechnen Sie den Abstand zwischen der ausgewählten Trainingssatzbeobachtung und der neuen Beobachtung. Wählen Sie den Index mit dem kleinsten Wert, für den . Wählen Sie diese Beobachtung aus, indem Sie .k d i d s e l e c t e d i = 0 s e l e c t e d i = 1j = 1kdichds e l e c t e dich= 0s e l e c t e dich= 1
- Gibt die ausgewählten Indizes zurückk
Für jede Iteration im zweiten Schritt berechnen wir den Abstand zwischen der neuen Beobachtung und jeder Beobachtung des Trainingssatzes, wobei für eine Iteration und damit insgesamt .O ( n d k )O ( n d)O ( n dk )
Der Unterschied zwischen den beiden Algorithmen besteht darin, dass der erste die Entfernungen vorberechnet und speichert (was zusätzlichen Speicher erfordert ), während der zweite dies nicht tut. Da wir jedoch bereits den gesamten Trainingssatz speichern, der -Speicher erfordert , sowie den Vektor, der -Speicher erfordert , ist die Speicherung der beiden Algorithmen asymptotisch gleich. Infolgedessen macht die bessere asymptotische Laufzeit für den ersten Algorithmus attraktiver.O ( n d ) s e l e c t e d O ( n ) k > 1O ( n )O ( n d)s e l e c t e dO ( n )k > 1
Es ist erwähnenswert, dass es mit einer algorithmischen Verbesserung möglich ist, eine -Runtime zu erhalten :O ( n d)
- Für jeden Trainingssatz Beobachtung , berechnet , der Abstand von der neuen Beobachtung Trainingssatz Beobachtungd i s t i iichdich s tichich
- Führen Sie den Quickselect-Algorithmus aus , um die kleinste Distanz in -Laufzeit zu berechnen O ( n )kt hO ( n )
- Gibt alle Indizes zurück, die nicht größer als der berechnete kleinste Abstand sindkt h
Dieser Ansatz nutzt die Tatsache , dass eine effiziente Ansätze existieren , um die zu finden kleinsten Wert in einer unsortierten Array.kt h
quickselect
.