สมมติว่าได้รับการแก้ไข (เป็นทั้งการบรรยายที่เชื่อมโยงกัน) จากนั้นตัวเลือกขั้นตอนวิธีของคุณจะกำหนดว่าการคำนวณของคุณใช้เวลารันไทม์O ( n d + k n )หรือO ( n d kkO(nd+kn)รันไทม์O(ndk)
อันดับแรกให้พิจารณาO(nd+kn)อัลกอริทึมรันไทม์ :
- เตรียมสำหรับการสังเกตทั้งหมดฉันอยู่ในชุดฝึกอบรมselectedi=0i
- สำหรับการฝึกอบรมในแต่ละชุดการสังเกตคำนวณd ฉันs T ฉัน , ระยะทางจากการสังเกตใหม่เพื่อการฝึกอบรมชุดสังเกตฉันidistii
- สำหรับจะk : ห่วงผ่านทุกการสังเกตการฝึกอบรมชุดเลือกดัชนีฉันมีขนาดเล็กที่สุดd ฉันs T ฉันคุ้มค่าและการที่s อีลิตรอีคทีอีd ฉัน = 0 เลือกข้อสังเกตนี้โดยการตั้งค่าของอีลิตรอีคทีอีd ฉัน = 1j=1kidistiselectedi=0selectedi=1
- ส่งคืนดัชนีที่เลือกk
การคำนวณระยะทางแต่ละครั้งต้องใช้รันไทม์ดังนั้นขั้นตอนที่สองต้องใช้รันไทม์O ( n d ) สำหรับแต่ละย้ำในขั้นตอนที่สามเราดำเนินการO ( n )การทำงานโดยการวนลูปผ่านการสังเกตการฝึกอบรมชุดดังนั้นขั้นตอนโดยรวมต้องO ( n k )การทำงาน ขั้นตอนแรกและขั้นตอนที่สี่จำเป็นต้องใช้งานO ( n )เท่านั้นดังนั้นเราจึงได้O ( n d + k n )รันไทม์O(d)O(nd)O(n)O(nk)O(n)O(nd+kn)
Now, let's consider a O(ndk) runtime algorithm:
- Initialize selectedi=0 for all observations i in the training set
- For j=1 to k: Loop through all training set observations and compute the distance d between the selected training set observation and the new observation. Select the index i with the smallest d value for which selectedi=0. Select this observation by setting selectedi=1.
- Return the k selected indices
O(nd)O(ndk)
O(n)O(nd)selected vector, requiring O(n) storage, the storage of the two algorithms is asymptotically the same. As a result, the better asymptotic runtime for k>1 makes the first algorithm more attractive.
It's worth noting that it is possible to obtain an O(nd) runtime using an algorithmic improvement:
- For each training set observation i, compute disti, the distance from the new observation to training set observation i
- Run the quickselect algorithm to compute the kth smallest distance in O(n) runtime
- Return all indices no larger than the computed kth smallest distance
This approach takes advantage of the fact that efficient approaches exist to find the kth smallest value in an unsorted array.
quickselect
.