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? | Ya |
| 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.
Mencari huruf dalam kata
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
Berikutnya: Halting Problem