SORU
28 NİSAN 2010, ÇARŞAMBA


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!
  • 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
  • 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

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
28 NİSAN 2010, ÇARŞAMBA


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!)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MobileTechReview

    MobileTechRe

    6 HAZİRAN 2008
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008