Kaymış maksimum değeri bulmak için doğrusal zaman algoritması


11

Negatif olmayan tamsayılar içeren bir dizi verildiğini varsayın (mutlaka farklı değildir).A[1..n]

Let olmak artmayacak sırasına göre sıralanır. değerini hesaplamak istiyoruz BA

m=maxi[n]B[i]+i.

Açık çözüm A'yı sıralamak Ave sonra m'yi hesaplamaktır m. Bu, en kötü durumda O (n \ lg n) zamanında çalışan bir algoritma verir O(nlgn).

Daha iyisini yapmak mümkün mü? Biz hesaplayabilir m doğrusal zamanda?


Benim asıl sorum yukarıdaki soru. Ancak sorunun aşağıdaki genelleştirilmesi hakkında bilmek ilginç olacaktır.

Let B olmak A bazı karşılaştırma torpil göre düzenlenmiş ve f bir oracle tarafından verilen bir fonksiyonu. \ Leq ve f için A ve oracles verildiğinde , [n]} f (B [i], i) cinsinden m = \ max_ {i \ hesaplamak için gereken süre hakkında ne söyleyebiliriz ?fm=maksimumben[n]f(B[ben],ben)

Hala işlem olabilir m de Ö(nlgn) süresi. Fakat bu genelleştirilmiş durum için süper doğrusal bir alt sınır olduğunu kanıtlayabilir miyiz?

Eğer cevap evet ise, alt sınır tamsayılarda olağan sıra olduğunu ve "güzel" bir fonksiyon (monoton, polinom, doğrusal, vb.) varsayar mı?f

Yanıtlar:


10

Biz hesaplayabilir doğrusal zamanda.m

Basitlik açısından, dizilerin 0 tabanlı olduğunu varsayalım: , . hesaplamak istiyoruz .B [ 0 .. n - 1 ] m = maks. İ B [ i ] + ibir[0 ..n-1]B[0..n1]m=maxiB[i]+i

Let . Açıkçası .m a x mmax=maxiA[i]maxm

Let olduğu sıraladıktan sonra. Eğer Elimizdeki B [ k ] A [ j ] m a x - n B [ k ] + k B [ k ] + ( n - 1 ) = A [ j ] + ( n - 1 ) ( m a x - n ) + ( n - 1 ) =bir[j]B[k]bir[j]mbirx-n

B[k]+kB[k]+(n1)=A[j]+(n1)(maxn)+(n1)=max1<maxm.

Bu nedenle göz ardı edilebilir olduğunda . Yalnızca aralığındaki sayıları dikkate almamız gerekir .A[j]A[j]maxn[maxn,max]

Biz sıralamak için sıralama sayma kullanabilir aralığında olan doğrusal zamanında ve bilgi işlem için sıralı bir listesini kullanmak .A[maxn,max]m


... aaa ... ama C [x] = C [x] +1 maliyeti nedir?!?
Marzio De Biasi

1
[Mn,M]|f(B[i],i)B[i]|=O(n)i

Teşekkürler @Marzio. :) Açıklık için cevabınızı biraz düzenledim. Düzenlememi geri almaktan veya daha fazla düzenlemekten çekinmeyin.
Kaveh

1
f(x,i)xin|f(x,i)x|=O(n)

@Kaveh: edit is ok! Cevabı hızlı bir şekilde yazdım ve doğruluğundan bile emin değildim: -S
Marzio De Biasi

-1

Am=max(A)+1B1

f(B[i],j)i=jf(B[i],i)imaxif(B[i],i)AΩ(nlogn)A[i]=B[j]f(A[i],j)f


1
A'nın n - 1 sıfır ve bir tane varsa ne olur? O zaman cevap n değil, 1 değil.
Grigory Yaroslavtsev

bir

ABfo(nlgn)f(B[i],i)f
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.