2013-03-10 32 views
6

Algoritmaların 2. baskısına giriş okuyorum, ve bir soru var ki n tamsayılarını, 0 ile n arası -1 arasında lineer zamanda sıralayabiliyoruz. IBM'in çapsal sıralama yaklaşımı düşünüyorum. En az anlamlı basamakla başlarım, en az anlamlı rakamlara göre ayrı sayıları alıyorum ve sonra sıralayın, sonra bir sonraki en az anlamlı basamağa göre ayırın. Her ayrıştırma O (n) zamanını alır. Ancak, şüphesiz, örneğin, sayılardan biri n basamaktan oluşuyorsa, o zaman algoritma O (1 * n + 2 * n + ... + n * n) = O (n) zamanını alır, sağ? Sayıların n haneden daha az oluşundan emin olabilir miyiz, ya da kimse soru için başka bir ipucu verebilir mi? TeşekkürlerDoğrusal zamanda sıralama

+6

Her sayı 0 ile n^3 - 1 arasındadır. Böylece en fazla 3 basamak baz n olacaktır. –

+0

teşekkürler, bu bilgilerle, çözümüm doğru mu? – yrazlik

+0

evet buna inanıyorum. –

cevap

3

Radix Sıralama karmaşıklığı, d ile bir sayıdaki basamak sayısı olarak O(dn)'dir.

Algoritma yalnızca d sabit olduğunda doğrusal modda çalışır! Sizin durumunuzda d = 3log(n) ve algoritmanız O(nlog(n))'da çalışacaktır.

Doğruluğunda bu sorunu nasıl çözeceğimi bilmiyorum. Sayıların doğasıyla ilgili başka bir bilgi parçacığı var mıdır? Sayıların doğasıyla ilgili herhangi bir bilginin eksik olup olmadığını merak ediyorum ...

+0

cevabınız için teşekkürler, cevabı aslında buldum, sayıları 2- olarak ele alıyoruz Radyal numaradaki sayıları n sonra 2 basamaklı sayıları sıralarız. Toplam süre O (n) – yrazlik

+0

2 rakamlı 'tuşlarda' bir sayı koparırsanız, 'd = 3log (n)/2' ile bitmez mi? Algoritmanın ayrıntılı bir analizine ilişkin bir bağlantınız var mı? teşekkürler – Gevorg

+0

ACtually, kitabın öğretim üyesinin el kitabından buldum ve işte tam olarak ne diyor: Sayıları nx cinsinden 2 basamaklı sayılarla işleme. Her rakam 0 ile n −1 arasında değişir. Bu 2 basamaklı sayıları radix sort ile sıralayın. Sayma sıralaması için 2 çağrı vardır, her biri Θ (n + n) = Θ (n) zaman alır, böylece toplam süresi Θ (n) olur. – yrazlik

2

Bir kelime RAM modeli varsayarsak, ve o, N'ye uyuyor. (1) kelimeler, doğrusal bir zaman algoritması vardır.

Her sayıyı baz n'ye yazın ve bir yarıçap sıralaması yapın (sayım sıralamasının durağan bir sayım türüyle birlikte).

Sınırsız n'yi varsayalım, daha sonra giriş kütüğünün büyüklüğünü, n '' n '' n '' n '' (n = n (n = n) ') tekrar işleyecektir. Doğrusal zaman algoritması! (Tabii ki, sanırım bunu hala aritmetik olduğunu varsayalım O (1) ...)

+0

'linearithmic' aslında 'doğrusal' mı? – Gevorg

+0

Sadece bir süredir konuştuğumuzdan beri takip etmek için! :) 'O (nlog (n))' a nasıl ulaştığınızdan emin değilim, fakat bunu lineer bir çözüm olarak kabul ederseniz, sorun QuickSort, MergeSort veya başkalarının iyi bir uygulamasıyla önemsiz bir şekilde çözülecektir. – Gevorg

+0

@Gevorg: Hayır, tamsayıları karşılaştırarak O (log n), ve Quicksort vb. Theta (n (log n)^2) olacaktır. Temel hesaplama modeli önemlidir. Çoğu algoritma ders kitabı WORD RAM modelini kullanır ve pratikte çoğu insan bunu düşünmeden kullanır, çünkü gerçek bir bilgisayara en yakın olanıdır. Bu durumda (yani WORD RAM modelinde), giriş boyutu Theta (n), radix sorti O (n) ve quicksort vb. O (n log n) 'dir. – Knoothe