SORU
7 HAZİRAN 2009, Pazar


(N günlük N) Karmaşıklığı doğrusal Benzer?

Böyle önemsiz bir soru ama bir konuda kafam karıştı sorduğum için gömülü alacağım sanırım.

Java ve C quicksort uygulanan ve bazı temel comparissons yapıyordum. Grafik C 4ms daha hızlı 100,000 rasgele tamsayılar üzerinde Java daha mevkidaşı ile iki düz çizgiler olarak ortaya çıktı.

Results

Benim test kodu burada bulunabilir;

android-benchmarks

(N günlük n) bir çizgi gibi görünür ama düz olacağını düşünmemiştim ne olduğundan emin değildim. Ben sadece bu beklenen bir sonuç olduğunu ve benim kodunda bir hata bulmaya gidiyorum diye kontrol etmek istedim.

Başında bir ilginçlik ile düz bir çizgi gibi görünüyor 10 tabanı için excel içine ve formül koydum. Günlük(n) ve log(n 1) arasındaki fark doğrusal olarak artar, çünkü bu?

Teşekkürler

Gav

CEVAP
7 HAZİRAN 2009, Pazar


Grafiği büyütmek ve O(n logn) oldukça düz bir çizgi olmadığını görürsünüz. Ama evet, neredeyse doğrusal bir davranış. Neden görmek için sadece çok büyük birkaç sayı logaritma alır.

Örneğin (taban 10):

log(1000000) = 6
log(1000000000) = 9
…

, 1,000,000 numaraları sıralamak için O(n) logn sıralama ekler cimri bir faktör 6 (ya da daha çoğu sıralama algoritmaları 2 tabanında logaritma bağlıdır beri sadece bir bit). Fazla bir şey değil.

Aslında, bu günlük faktördürbu yüzdenbüyüklüğü en siparişler için bu olağanüstü küçük, kurulan O(n logn) algoritmalar doğrusal zaman daha iyi performans algoritmaları. Belirgin bir örnek soneki dizi veri yapısının oluşturulması.

Basit bir durum son zamanlarda beni when I tried to improve a quicksort sorting of short strings by employing radix sort ısırdı. Meğerse, kısa dizeler, bu (doğrusal zaman) taban olmuştu daha hızlı daha quicksort, ama bir devrilme noktası için hala nispeten kısa dizeler beri taban sıralama derece bağlıdır uzunluğu dizeleri sıralamak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • Press Start

    Press Start

    4 HAZİRAN 2006
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009