🧠

Kompleksitas dan Teknik Memoization

Jun 27, 2025

Overview

Materi ini membahas kompleksitas algoritma dalam penyusunan kembali string (string reconstruction), membandingkan pendekatan brute-force, greedy, dan dynamic programming serta pentingnya teknik memoization untuk efisiensi waktu dan memori.

Permasalahan String Reconstruction

  • String reconstruction bertujuan membagi urutan karakter menjadi kata-kata bermakna berdasarkan kamus.
  • Komputer harus secara sistematis mencoba kemungkinan peletakan spasi, berbeda dengan manusia yang intuitif.
  • Algoritma brute-force mengetes setiap kemungkinan peletakan spasi, tetapi sangat tidak efisien.
  • Greedy approach memilih kata terpanjang yang valid pada setiap langkah, namun belum tentu mendapatkan hasil optimal.
  • Keduanya dapat menyebabkan computational cost yang tinggi dan hasil yang kurang akurat.

Kompleksitas Algoritma & Dynamic Programming

  • Brute-force dan greedy cenderung menghasilkan time complexity eksponensial (O(2^n)) pada jumlah karakter besar.
  • Dynamic programming memecah masalah besar menjadi subproblem kecil yang hasilnya disimpan untuk menghindari kalkulasi ulang.
  • Teknik ini disebut memoization, digunakan untuk mengurangi repetisi proses komputasi yang sama di subproblem yang overlap.
  • Dengan menyimpan hasil sementara di cache/tabel, efisiensi waktu dan ruang dapat dicapai.
  • Prinsip bottom-up: selesaikan masalah kecil, lalu gunakan hasilnya untuk masalah yang lebih besar.

Contoh Penerapan

  • Pada string β€œapplepie” dengan kamus {apple, pie}, dynamic programming membagi string dan mengecek setiap substring pada kamus, menyimpan hasil intermediate.
  • Teknik memoization sangat membantu bila jumlah kemungkinan pecahan string sangat banyak (n besar).
  • Untuk kasus kecil, perbedaan tanpa memoization tidak terlalu signifikan, tetapi untuk input besar sangatlah penting.

Catatan Implementasi Memoization

  • Gunakan cache untuk menyimpan hasil sementara perhitungan subproblem.
  • Perhatikan penggunaan memori, cache hanya digunakan bila hasil sering dipakai kembali.
  • Sesuaikan dimensi penyimpanan (1D, 2D, 3D) sesuai kebutuhan masalah.
  • Pastikan melakukan benchmark waktu eksekusi masing-masing subproblem.

Kesimpulan dan Aplikasi

  • Algoritma efisien diperlukan agar komputer dapat menyelesaikan masalah yang tampak mudah bagi manusia.
  • Dynamic programming terbukti jauh lebih efisien dibanding brute-force dan greedy approach untuk kasus string reconstruction.
  • Paradigma penyelesaian masalah kecil (subproblem) relevan untuk berbagai aplikasi praktis, seperti spell checker atau autocorrect di AI/NLP.

Key Terms & Definitions

  • String Reconstruction β€” Proses menyusun kembali karakter acak menjadi kalimat bermakna menggunakan referensi kamus.
  • Brute-force β€” Pendekatan mencoba semua kemungkinan solusi, sangat tidak efisien.
  • Greedy Approach β€” Memilih solusi lokal terbaik di setiap langkah, kadang menghasilkan hasil suboptimal.
  • Dynamic Programming β€” Teknik memecah masalah besar menjadi subproblem kecil yang hasilnya disimpan (memoization).
  • Memoization β€” Penyimpanan hasil komputasi subproblem agar tidak dihitung ulang.
  • Time Complexity β€” Ukuran waktu eksekusi algoritma sehubungan dengan input.
  • Cache β€” Tempat sementara menyimpan hasil komputasi.

Action Items / Next Steps

  • Latihan membagi string dan implementasi dynamic programming dengan memoization.
  • Evaluasi efisiensi algoritma dengan mengukur time complexity pada berbagai ukuran input.
  • Pelajari lebih lanjut penerapan dynamic programming untuk kasus lain seperti scheduling dan simulasi di berbagai bidang.