Neredeyse sıralanmış bir dizi (k) elemanları daha fazla yanlış)sıralama
Bu soru yakın zamanda soruldu:
Neredeyse
N
elementlerin her doğru sıralanmış siparişten 1 ** pozisyonları daha fazla yanlış olabilir bu sıralama, bir dizi verilen konum. Uzay ve zamanı verimli bir algoritma diziyi sıralamak için.
Aşağıdaki gibi O(N log k)
bir çözüm buldum.
Hadi arr[0..n)
dizinden dizi N
(özel) 0
(dahil) elemanları anlamına göstermek.
- Sıralama
arr[0..2k)
- Şimdi
arr[0..k)
final sıralanmış konumlarında olduğunu biliyoruz - ...ama
arr[k..2k)
k
tarafından yanlış olabilir!
- Şimdi
- Sıralama
arr[k..3k)
- Şimdi
arr[k..2k)
final sıralanmış konumlarında olduğunu biliyoruz - ...ama
arr[2k..3k)
k
tarafından yanlış olabilir
- Şimdi
arr[2k..4k)
tür- ....
arr[ik..N)
, sıralama kadar sonra bitti!- Bu son adım
2k
elementler sol daha az zaman diğer adımları daha ucuz olabilir
- Bu son adım
Her adımda, her adımın sonunda final sıralanmış konumlarında O(k log k)
en az k
koyarak 2k
en öğeleri öğeleri sıralamak. O(N/k)
adım vardır, genel karmaşıklığı O(N log k)
.
Benim sorular şunlardır:
O(N log k)
en uygunudur? Bunun üzerine geliştirilebilir?- (Kısmen) yeniden sıralama aynı elemanları olmadan bunu yapabilir misin?
CEVAP
Bob Sedgewick tez çalışmaları (ve eklentileri izleyin) gösterdiği gibi, eklemeli sıralama kesinlikleezer"neredeyse sıralanmış dizi". Senin asymptotics iyi ama k < bak bu durumda; 12 eklemeli sıralama her zaman kazanır eminim. İyi bir açıklaması var bilmiyorumnedeneklemeli sıralama çok iyi yapar, ama arama yeri Sedgewick bu ders kitabı hak bir olurAlgoritmaları(farklı diller için birçok sürümleri yaptı).
Hiçbir fikrim yok olsun O(N log k) optimal, ama daha önemlisi, ben aslında bakım-k küçük, sabit faktörler önemli, ve eğer k büyük olabilir gibi sanki dizi.
Eklemeli sıralama yeniden sıralama aynı elemanları olmadan bu sorun nail olur.
Büyük-O gösterimi çok iyi algoritma sınıfı için, ama gerçek dünyada, sabitler olsun. Çok kolay bu Gözden kaybetmek. (Büyük-O gösterimi öğreten bir profesör olarak söylüyorum!)
Nasıl MySQL SIRALAMA türü sütun için d...
Neden sıralanmamış bir dizi daha hızlı...
Neden sıralanmış bir dizi sıralanmamış...
Nasıl eclipse 512 daha fazla bellek ve...
Neden yabancı anahtarları uygulamada d...