Saya ingin memulai dengan mengatakan bahwa ini BUKAN pertanyaan pekerjaan rumah. Saya membaca Pengantar Algoritma - teks CLRS yang terkenal untuk menjadi programmer yang lebih baik. Saya mencoba untuk menyelesaikan masalah dan latihan yang diberikan dalam buku sendiri.
Saya mencoba untuk menyelesaikan Latihan 10.1-2 dari Bab 10 Struktur Data Dasar dari CLRS Edisi Kedua. Inilah yang dinyatakan:
Jelaskan bagaimana menerapkan dua tumpukan dalam satu array A [1..n] sedemikian rupa sehingga tidak ada tumpukan yang meluap kecuali jumlah total elemen dalam kedua tumpukan bersama adalah n . Operasi PUSH dan POP harus berjalan dalam O (1) waktu.
Solusi yang saya buat sejauh ini adalah:
Biarkan array A [1..n] mengimplementasikan dua tumpukan: S1 [1..i] dan S2 [i..n] .
Untuk operasi PUSH-S1 dan PUSH-S2 , jika stack 'penuh' maka mulailah mendorong elemen ke stack lain (mis. Jika stack S1 penuh ketika elemen baru mencoba untuk didorong masuk, kemudian dorong elemen itu ke dalam tumpukan S2 dan sebaliknya).
Masalah dengan pendekatan ini adalah saya tidak akan bisa POP-S1 atau POP-S2 andal karena tidak ada cara 'mengingat' elemen mana yang termasuk stack. Jika elemen-elemen stack adalah (kunci, nilai) pasangan, kuncinya adalah nomor stack, maka untuk memunculkan elemen saya harus mencari, dalam kasus terburuk, i atau (ni) kali - yang akan menjadi O (n ) (jangan ragu untuk mengoreksi saya jika saya salah di sini), yang tidak akan menjadi O (1) .
Saya telah membenturkan kepala saya pada pertanyaan untuk beberapa waktu sekarang. Apakah saya di jalur yang benar? Adakah yang bisa memberikan petunjuk saya untuk menyelesaikan masalah ini?
Secara umum, bagaimana saya harus 'memikirkan' masalah ini? Atau bisakah hanya orang yang benar-benar pintar memecahkan masalah seperti ini? Akankah mengatasi / memecahkan masalah seperti ini (yaitu mendapatkan pengalaman) membantu saya menjadi lebih baik dalam hal ini?
Saya menunggu pencerahan.