mesin keadaan mengambil input yang mungkin atau mungkin tidak mengubah negaranya menjadi salah satu dari set terbatas negara lain. Apa bedanya dengan program komputer lainnya?
Beberapa jawaban di sini menekankan bahwa di alam semesta kita yang terbatas (semuanya) terbatas, semua program komputer berjalan dalam waktu terbatas, oleh karena itu secara teknis semuanya adalah mesin keadaan-terbatas. Itu "secara teknis benar (jenis terbaik yang benar)", tetapi juga benar-benar kehilangan intinya.
Intinya adalah ini: - Beberapa program komputer membutuhkan lebih banyak memori kerja ketika mereka mendapatkan input yang lebih besar dan lebih kompleks. Beberapa tidak.
Jika Anda menyadari hal ini, Anda akan mendapatkan wawasan teoretis-informatika yang memungkinkan Anda untuk menulis program yang lebih efisien dan elegan ketika Anda menghadapi masalah yang diberikan. Ini juga akan memungkinkan Anda untuk mengenali jenis masalah di mana ini mungkin berlaku.
Berikut adalah dua contoh mainan:
Masalah 1: Suatu program menerima daftar karakter pada input standar. Setelah semua karakter diproses, program harus mencetak apakah jumlah karakter "x" dalam input itu ganjil atau genap .
Masalah 2: Suatu program menerima daftar karakter pada input standar. Setelah semua karakter diproses, program harus mencetak apakah jumlah karakter "x" dalam input lebih kecil , sama , atau lebih besar dari jumlah karakter "y".
Anda mungkin ingin berhenti membaca sekarang, menyelesaikan masalah dalam bahasa pemrograman favorit Anda (atau hanya kodesemu), dan kembali lagi nanti.
...
Hal penting yang mungkin Anda perhatikan adalah sebagai berikut: Untuk menerapkan solusi untuk masalah 1 dengan benar, Anda hanya perlu satu bit memori. Anda tidak harus menghitung berapa banyak "x" yang sudah Anda proses - hanya apakah jumlah "x" yang diproses sejauh ini ganjil atau genap. Saat Anda menemukan "x" lainnya, balikkan bitnya. Di akhir program, lihat bit dan cetak jawabannya.
Apakah input Anda mengandung selusin karakter? Ribuan karakter? Karakter Googolplex (tentu saja, secara hipotetis)? Tidak apa-apa; sedikit memori yang bekerja masih akan cukup.
Anda tidak dapat melakukan hal yang sama dengan masalah 2. Saat membaca karakter, Anda harus mengingat perbedaan antara jumlah yang sudah diproses "x" dan "y"; jika tidak, Anda tidak dapat mencetak jawaban yang benar dengan andal. Anda mungkin menyadari bahwa Anda benar-benar tidak perlu mengingat kedua jumlah "x" 's dan 'y'' s - satunya perbedaan mereka, sejauh; satu nilai integer yang akan Anda tingkatkan ketika Anda menemukan "x" lainnya, dan berkurang ketika Anda menemukan "y" lainnya - tetapi tetap saja, jika Anda memutuskan untuk menggunakan mis. 32 bit memori untuk mempertahankan nilai ini, Anda mungkin mendapatkan input ( beberapa miliar karakter) yang tidak dapat Anda proses dengan benar dengan jumlah memori terbatas yang diberikan.
Inilah yang kami maksud dengan mengatakan bahwa masalah 1 dapat diselesaikan dengan "mesin negara", dan masalah 2 tidak bisa. Jumlah memori yang terbatas sudah cukup untuk input ukuran apa pun.
(Tentu saja, Anda juga bisa menulis solusi yang tidak efisien untuk masalah 1, di mana Anda akan mencoba menghitung semua "x", dan kemudian Anda mungkin juga mendapatkan masalah kehabisan memori. Tetapi perbedaannya adalah bahwa solusi efisien untuk masalah 1 ada , sementara solusi sama efisien untuk masalah 2 tidak tidak .)
Mengapa ini penting dalam kehidupan nyata?
Pertama, tidak seperti dengan dua contoh mainan ini, dilema mungkin bukan antara satu bit dan satu nilai integer, tetapi antara beberapa struktur data yang besar dan beberapa bahkan lebih besar. Kadang-kadang struktur data "yang lebih besar" tidak sesuai dengan memori komputer, atau cukup memperlambat program, bahkan untuk input yang realistis.
Kedua, solusi menggunakan mesin negara mungkin akan jauh lebih cepat. Juga akan skala secara linear dengan panjang input; artinya, memproses input 10 kali lebih lama akan membutuhkan waktu 10 kali lebih banyak (berbeda dengan misalnya waktu 100 kali lebih banyak). Itu properti yang diinginkan ketika Anda perlu memproses banyak data.
Ketiga, penggunaan memori terbatas vs tidak terbatas berdampak pada keamanan . Jika Anda menulis sebuah program yang hanya membutuhkan memori terbatas, Anda tidak perlu khawatir tentang kelebihan memori dan bagaimana mereka berpotensi disalahgunakan untuk membahayakan keamanan seluruh sistem.
Keempat, ini adalah bagian dari apa yang seharusnya menjadi kurikulum ilmu komputer standar di sekolah yang layak: bahasa formal , automata , kompleksitas komputasi , dan lain-lain. Untuk memahami gambaran yang lebih besar di balik desain komputer, dan bukan sekadar "uhh, saya menggabungkan beberapa kode dari internet, saya sangat berharap ini berhasil, tetapi saya tidak bisa memastikan" pendekatan.
Untuk mengambil keuntungan dari teori ini, Anda tidak benar-benar membutuhkan mesin khusus, kerangka kerja atau pustaka ... Anda hanya perlu menyadari "oh, bagian dari masalah ini sebenarnya dapat diselesaikan dengan menggunakan jumlah memori yang terbatas" dan menulis program Anda (dalam bahasa pemrograman favorit Anda) sesuai. Tetapi dalam beberapa situasi lebih baik menggunakan perpustakaan yang ada, jadi Anda tidak perlu menemukan kembali roda.