Saya telah belajar hari ini bahwa analisis algoritma berbeda berdasarkan pada model komputasi. Itu adalah sesuatu yang tidak pernah saya pikirkan atau dengar.
Contoh yang diberikan kepada saya, yang menggambarkannya lebih lanjut, oleh Pengguna @chi adalah:
Misalnya, pertimbangkan tugas: diberikan kembalikan . Dalam RAM ini dapat diselesaikan dalam karena akses array adalah waktu konstan. Dengan menggunakan TM, kita perlu memindai seluruh input, jadi
Ini membuat saya bertanya-tanya tentang bahasa fungsional; Dari pemahaman saya, "Bahasa fungsional terkait erat dengan kalkulus lambda" (dari komentar oleh Yuval Filmus di sini ). Jadi, jika bahasa fungsional didasarkan pada kalkulus lambda, tetapi mereka berjalan pada mesin berbasis RAM, apa cara yang tepat untuk melakukan analisis kompleksitas pada algoritma yang diimplementasikan menggunakan struktur data dan bahasa murni fungsional?
Saya belum memiliki kesempatan untuk membaca Struktur Data Murni Fungsional tetapi saya telah melihat halaman Wikipedia untuk subjek, dan tampaknya beberapa struktur data mengganti array tradisional dengan:
"Array dapat diganti dengan peta atau daftar akses acak, yang mengakui implementasi murni fungsional, tetapi waktu akses dan pembaruan adalah logaritmik."
Dalam hal itu, model komputasi akan berbeda, benar?
Jawaban:
Itu tergantung pada semantik bahasa fungsional Anda. Anda tidak dapat melakukan analisis algoritma pada bahasa pemrograman secara terpisah, karena Anda tidak tahu apa arti pernyataan itu sebenarnya. Spesifikasi untuk bahasa Anda perlu memberikan semantik yang cukup rinci. Jika bahasa Anda menentukan semuanya dalam hal kalkulus lambda, Anda memerlukan ukuran biaya untuk pengurangan (apakah mereka O (1) atau apakah mereka bergantung pada ukuran istilah yang Anda kurangi?).
Saya pikir sebagian besar bahasa fungsional tidak melakukannya dan sebaliknya memberikan pernyataan yang lebih berguna seperti "panggilan fungsi adalah O (1), menambahkan ke kepala daftar adalah O (1)", hal-hal seperti itu.
sumber