Bir dizideki K. en küçük elemanı (örneğin medyanı) en kötü durumda doğrusal O(n) zamanda bulan seçim algoritmasıdır.
Sıra İstatistikleri (Order Statistics), bir dizideki K. en küçük veya en büyük elemanın seçilmesi problemiyle ilgilenir. Bu işlemin en basit yolu diziyi sıralayıp K. indekse bakmaktır (O(n log n)). Ancak sıralama yapmadan daha hızlı seçim yapmak mümkündür.
Quickselect algoritması, quicksort bölümleme mantığını kullanarak ortalama durumda O(n) sürede K. elemanı bulur. Ancak pivot kötü seçilirse en kötü durumda O(n^2) sürebilir.
En Kötü Durumda Doğrusal K. Eleman (Worst-Case Linear Kth Element veya Median of Medians), diziyi 5'erli alt gruplara bölerek bunların medyanlarını bulur. Ardından bu medyanların medyanını pivot olarak seçer. Bu sayede her adımda dizinin en az %30'unun eleneceği garanti edilir ve en kötü durumda da O(n) çalışma süresi sağlanır.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function medianOfMedians(arr: number[], k: number): number {2 if (arr.length <= 5) {3 arr.sort((a, b) => a - b);4 return arr[k];5 }67 const medians: number[] = [];8 for (let i = 0; i < arr.length; i += 5) {9 const group = arr.slice(i, i + 5);10 group.sort((a, b) => a - b);11 medians.push(group[Math.floor(group.length / 2)]);12 }1314 const pivot = medianOfMedians(medians, Math.floor(medians.length / 2));15 16 const low: number[] = [];17 const equal: number[] = [];18 const high: number[] = [];1920 for (const num of arr) {21 if (num < pivot) low.push(num);22 else if (num === pivot) equal.push(num);23 else high.push(num);24 }2526 if (k < low.length) {27 return medianOfMedians(low, k);28 } else if (k < low.length + equal.length) {29 return pivot;30 } else {31 return medianOfMedians(high, k - low.length - equal.length);32 }33}Sayıları ve aradığınız sırayı (K - sıfır indeksli) noktalı virgülle ayırın. Örnek: 12,3,5,7,4,19,26; 3
Sayıları ve aradığınız sırayı (K - sıfır indeksli) noktalı virgülle ayırın. Örnek: 12,3,5,7,4,19,26; 3
En İyi Durum: O(n)
Ortalama Durum: O(n)
En Kötü Durum: O(n)
O(n) - Çalışma süresi, giriş boyutu ile doğrusal olarak artar.
Sıra İstatistikleri / K. Eleman (Order Statistics / Kth Element) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: