Masalah Penentuan
Mengapa program bisa disebut sebagai decidable, undecidable, maupun semi-decidable? Apakah ada hubungannya dengan decision (penentuan)?
Benar sekali. Ketiga istilah tersebut sebetulnya merupakan istilah khusus dalam kategori permasalahan yang disebut sebagai masalah penentuan atau decision problem.
Masalah penentuan
Ada kategori permasalahan yang disebut sebagai masalah penentuan (decision problem). Masalah penentuan pada dasarnya adalah persoalan atau pertanyaan yang jawabannya hanya ya
atau tidak
. Misalnya pertanyaan-pertanyaan berikut ini:
- Apakah 18 bilangan prima?
- Apakah kata
streptococcus
mengandung huruf k? - Apakah di kelas 10-6 ada siswa bernama Bleki?
Pertanyaan-pertanyaan tersebut dapat dimodelkan sebagai program. Sebagai contoh, sebelumnya kamu telah melihat ada program primakah(), yang adalah program untuk menentukan apakah suatu bilangan adalah bilangan prima. Di bawah ini program primakah() ditulis ulang sebagai program P(), yang menjawab Ya
dan Tidak
. Jika benar prima P akan menghasilkan output Ya
, dan jika tidak akan menghasilkan output Tidak
.
Beberapa contoh hasil yang dapat kamu peroleh:
| P(n) | Pertanyaan | Jawaban |
|---|---|---|
| P(18) | Apakah 18 bilangan prima? | Tidak |
| P(20) | Apakah 20 bilangan prima? | Tidak |
| P(23) | Apakah 23 bilangan prima? | Ya |
Algoritma di atas akan memeriksa setiap bilangan asli dari 1 hingga input n yang diberikan. Jadi kita bisa yakin program ini pasti akan berhenti berapapun n-nya, asal masih berhingga.
Karena berhenti, maka program ini akan selalu dapat memberikan jawaban Ya
maupun Tidak
kepada kita. Dengan demikian, program akan selalu dapat menentukan (decide) jawabannya, sehingga disebut sebagai decidable.
Sistem deduktif dan masalah penentuan
Ketika kamu mempelajari sistem deduktif, kamu berhadapan dengan berbagai pertanyaan yang termasuk dalam kategori penentuan:
- Apakah
m(A,B) ? - Apakah
m(B,C) salah? - Apakah
m(B,B) adalah teorema?
Karena pertanyaan-pertanyaan tersebut memiliki batasan jawaban ya
atau tidak
, maka pertanyaan tentang teorema sistem deduktif merupakan masalah penentuan.
Ketika pertanyaan tersebut dapat dijawab dan dibuktikan, pertanyaan tersebut disebut sebagai decidable. Jika dalam sistem yang diberikan hal tersebut tak dapat ditunjukkan dengan langkah-langkah pembuktian, pertanyaan tersebut adalah undecidable.
Contoh-contoh lainnya
Mencari huruf dalam kata
Di atas ada sebuah pertanyaan, Apakah huruf k terkandung dalam kata 'streptococcus'?
Program Python untuk menjawab persoalan tersebut adalah seperti di bawah ini.
Program ini juga akan selalu berhenti asalkan jumlah huruf dalam kata yang diberikan adalah berhingga. Dengan demikian program ini decidable.
Adakah sisi miring n?
Program di bawah ini akan berusaha menentukan apakah
Dengan kata lain, ada bilangan asli a, b, dan n yang merupakan tripel Pythagoras.
Program ini tidak efektif, karena jika tidak berhasil menemukan bilangan Ya,
program akan berhenti, tetapi jika jawaban yang seharusnya adalah Tidak,
program tidak akan berhenti.
Karena program hanya dapat menentukan (decide) sebagian kemungkinan jawaban, program ini disebut sebagai semi-decidable.
Permasalahan Collatz
Permasalahan Collatz adalah salah satu permasalahan matematika yang hingga tulisan ini dibuat belum dapat dipecahkan.
Permasalahannya seperti ini:
Input adalah bilangan asli n.
- Jika n genap, bagi n dengan 2.
- Jika n ganjil, hitung 3n + 1.
- Ulangi terus dengan n = bilangan baru hasil perhitungan.
Pertanyaannya: Jika proses ini diulang terus, apakah bilangan yang dihasilkan adalah 1?
Cobalah berbagai macam input, kamu akan mendapatkan jawaban Ya
. Namun apakah ada bilangan yang ketika kamu masukkan sebagai input, jawabannya akan Tidak
? Hingga hari ini pertanyaan ini belum terjawab.
Berikutnya: Permasalahan dan program