Ini adalah pertanyaan menarik yang saya temukan di web. Diberikan array yang berisi n angka (tanpa informasi tentangnya), kita harus memroses terlebih dahulu array dalam waktu linier sehingga kita dapat mengembalikan elemen terkecil k dalam waktu O (k), ketika kita diberi angka 1 <= k <= n
Saya telah membahas masalah ini dengan beberapa teman tetapi tidak ada yang bisa menemukan solusi; bantuan apa pun akan dihargai!
catatan cepat: -rangka k elemen terkecil tidak penting-elemen dalam array adalah angka, mungkin bilangan bulat dan mungkin bukan (jadi tidak ada jenis radix) -jumlah k yang tidak diketahui pada tahap pra-pemrosesan. preprocessing adalah O (n) waktu. fungsi (temukan k elemen terkecil) pada waktu O (k).
Jawaban:
Memproses ulang array nilai dalam waktu O ( n ) :n O ( n )
Total waktu precomputation adalah dalamO(1+2+4+...+n)⊆O(n)
Jawab pertanyaan untuk elemen terkecil di A dalam waktu O ( k ) :k A O(k)
berisielemen terkecil k .A[1..k] k
Referensi:
sumber
sumber
Frederickson, Greg N. , Algoritma yang optimal untuk seleksi dalam min-heap , Inf. Komputasi. 104, No. 2, 197-214 (1993). ZBL0818.68065 ..
sumber
sumber