Minimisasi Sirkuit adalah masalah untuk meminimalkan ukuran sirkuit yang diberikan. Apakah ada yang serupa untuk program umum?
Khususnya pertanyaan saya adalah -
Apakah ada algoritma untuk meminimalkan # instruksi untuk program yang diberikan. Saya tahu ini masalah yang tidak dapat diputuskan, tetapi saya tidak mencari solusi yang mengembalikan sesuatu yang optimal.
Sementara seseorang dapat menerapkan transformasi kompiler yang sudah ada sebelumnya untuk mencapai ini, saya mencari sesuatu di mana saya tidak harus mendefinisikan satu set transformasi yang sangat sempit dan algoritma untuk mencari mereka sebelumnya.
Sunting: Pertanyaan lain yang saya miliki adalah apakah seseorang dapat memiliki kalkulus yang baik dan lengkap yang memungkinkan kita menjelajahi seluruh ruang dari program yang secara semantik setara atau tidak mungkin.
Jawaban:
Ada algoritma naif untuk program dengan input ukuran terbatas: sebutkan semua program dengan urutan penambahan panjang (atau waktu eksekusi, yang merupakan fungsi panjang yang dibatasi). Jika Anda dapat membuktikan bahwa program tersebut setara dengan yang asli, hentikan; jika tidak, terus mencari.
Algoritma ini adalah suara. Agar lengkap, Anda harus dapat membuktikan bahwa semua program yang ditolak tidak setara dengan yang asli. Ini dimungkinkan dalam model mesin finitari, selama Anda memiliki batasan untuk ukuran input.
Perhatikan bahwa ketika waktu pelaksanaan program tergantung pada input, mungkin tidak ada solusi optimal. Jika Anda mencari misalnya ikatan kasus terburuk, Anda akan dengan cepat mengalami kesetaraan yang tidak dapat diputuskan ketika Anda menghitung semua kemungkinan input yang tidak terikat, dan menjadi masalah yang tidak dapat diatasi jika input dibatasi.
Satu dekade yang lalu, “Denali: A Optimal-Directed Goal” oleh Rajeev Joshi, Greg Nelson dan Keith Randall mampu menemukan program optimal sekitar 5 instruksi mesin. Saya belum melihat hasil yang lebih baru.
sumber