Asumsikan kita diberi larik berisi bilangan bulat tidak negatif (tidak harus berbeda).
Biarkan menjadi diurutkan dalam urutan yang tidak bertambah. Kami ingin menghitung A m = maks i ∈ [ n ] B [ i ] + i .
Solusi yang jelas adalah menyortir dan kemudian menghitung . Ini memberikan algoritma yang berjalan dalam waktu dalam kasus terburuk.
Apakah mungkin melakukan lebih baik? Bisakah kita menghitung dalam waktu linier?
Pertanyaan utama saya adalah yang di atas. Tetapi akan menarik untuk mengetahui tentang generalisasi masalah berikut.
Biarkan menjadi diurutkan berdasarkan beberapa perbandingan oracle dan suatu fungsi yang diberikan oleh oracle. Diberikan dan nubuat untuk dan , apa yang bisa kita katakan tentang waktu yang diperlukan untuk menghitung ?
Kita masih dapat menghitung dalam waktu . Tapi bisakah kita membuktikan batas bawah super-linear untuk kasus umum ini?
Jika jawabannya adalah ya, apakah batas bawahnya berlaku jika kita menganggap adalah urutan yang biasa pada bilangan bulat dan adalah fungsi "baik" (monoton, polinomial, linier, dll.)?
Jika array terdiri dari bilangan bulat yang berbeda, maka , karena jarak antara entri yang berdekatan di setidaknya ; situasinya lebih menarik ketika mereka tidak perlu berbeda.m = maks ( A ) + 1 B 1SEBUAH m=max(A)+1 B 1
Untuk pertanyaan yang lebih umum, bayangkan situasi di mana hanya "menarik" ketika . Tampaknya mungkin untuk membangun argumen musuh yang memaksa Anda untuk meminta untuk semua yang sebelum Anda tahu , maka Anda perlu mengurutkan untuk temukan jawabannya, yang mengambil perbandingan . (Ada beberapa komplikasi karena mungkin itu kasus yang dapat kita uji apakah dalam waktu konstan daripada linear dengan menanyakan .) Ini adalah kasus bahkan jika adalah polinom (derajat tinggi).i = j f ( B [ i ] , i ) i max i f ( B [ i ] , i ) A Ω ( n log n ) A [ i ] = B [ j ] f ( A [ i ] , j ) ff(B[i],j) i=j f(B[i],i) i maxif(B[i],i) A Ω(nlogn) A[i]=B[j] f(A[i],j) f
sumber