5 Ocak 2011, ÇARŞAMBA
Nasıl iki sıralı diziler Birliği hazırlanmasında en küçük elemanı bulmak için?
Bu Ödev bir soru. N
M
diziler uzunlukları nerede O(logN logM)
aldıklarını söylüyorlar.
Hadi adını diziler a
b
. Açıkçası ben ^ a[i]
b[i]
tüm göz ardı edebiliriz . k.
İlk edelim a[k/2]
b[k/2]
karşılaştırın. b[k/2]
^ edelim . a[k/2]
. Bu nedenle de tüm i ^ b[i]
, iptal edebiliriz . k/2.
Şimdi tüm ben < k ve b[i]
nereye ben < k)/2 a[i]
cevap bulmak zorundayız.
Bir sonraki adım ne olacak?
CEVAP
5 Ocak 2011, ÇARŞAMBA
O kadar paran var, yürümeye devam et! Ve dizinler dikkat et...
O N ve M herhalde biraz kolaylaştırmak için vardır >k, karmaşıklığı buraya kadar(log log N M) Ç olan O(log k) ' dir.
Pseudo-kodu:
i = k/2
j = k - i
step = k/4
while step > 0
if a[i-1] > b[j-1]
i -= step
j = step
else
i = step
j -= step
step /= 2
if a[i-1] > b[j-1]
return a[i-1]
else
return b[j-1]
Gösteri için j = k i döngü değişmeyen kullanabilirsiniz, ama tüm ödevlerini yap :) vermem
Bunu Paylaş:
Nasıl O n uzunluğu sıralanmamış bir di...
Şelale grafikler, sorun/çözüm bulmak i...
Nasıl Chrome Geliştirici Araçları kull...
Nasıl sıralanmış bir dizi içine iki sı...
Nasıl mysql sıralı numaralandırma boşl...