Anda dapat melakukannya dalam waktu dan ruang ekstra sebagai berikut:O(l+k log l)O(l)
- Buat tumpukan biner dengan satu entri untuk setiap array. Kunci untuk entri adalah elemen terkecil dalam array . Ini membutuhkan waktu .iAiO(l)
- Pilih entri terkecil dari heap dan hapus (ambil ) waktu). Tambahkan entri itu kembali ke tumpukan menggunakan entri terkecil berikutnya dalam array yang relevan sebagai kuncinya (lagi waktu).O(log lO(log l)
- Lakukan langkah kali sebelumnya . Elemen terakhir yang Anda hapus dari tumpukan adalah jawaban Anda.k
Jika Anda mengganti tumpukan biner dengan tumpukan Fibonacci, saya pikir ini membuat Anda turun ke waktu diamortisasi , tetapi dalam praktiknya akan lebih lambat daripada tumpukan biner kecuali jika BESAR.O(l+k)l
Saya menduga bahwa tumpukan Fibonacci terikat optimal, karena secara intuitif Anda akan harus memeriksa setidaknya elemen untuk menemukan th terkecil, dan Anda akan harus memeriksa setidaknya satu elemen dari masing-masing array karena Anda tidak tahu bagaimana mereka diurutkan, yang segera memberi batas bawah .kklΩ(max(k,l))=Ω(k+l)