Saya tidak bekerja dalam teori, tetapi pekerjaan saya membutuhkan membaca (dan memahami) makalah teori sesekali. Setelah saya memahami (set) hasil, saya membahas hasil ini dengan orang-orang yang bekerja dengan saya, yang sebagian besar tidak bekerja secara teori juga. Selama salah satu diskusi tersebut, pertanyaan berikut muncul:
Kapan ada yang mengatakan bahwa dua algoritma yang diberikan "mirip"?
Apa yang saya maksud dengan "mirip"? Katakanlah dua algoritme dikatakan serupa jika Anda dapat membuat salah satu dari klaim berikut dalam makalah tanpa membingungkan / mengganggu pengulas mana pun (disambut dengan definisi yang lebih baik):
Klaim 1. "Algoritma , yang mirip dengan algoritma , juga memecahkan masalah "X
Klaim 2. "Algoritme kami mirip dengan Algoritma "
Biarkan saya membuatnya sedikit lebih spesifik. Misalkan kita bekerja dengan algoritma grafik. Pertama, beberapa kondisi yang diperlukan untuk kedua algoritme agar serupa:
- Mereka harus memecahkan masalah yang sama.
- Mereka harus memiliki ide intuitif tingkat tinggi yang sama.
Sebagai contoh, berbicara tentang traversal grafik, traversal lebar-pertama dan kedalaman-pertama memenuhi dua kondisi di atas; untuk perhitungan jalur terpendek, luasnya pertama dan algoritma Dijkstra memenuhi dua kondisi di atas (tentu saja, pada grafik tidak berbobot); dll.
Apakah ini juga kondisi yang memadai? Lebih khusus, anggap dua algoritma memenuhi kondisi yang diperlukan untuk menjadi serupa. Apakah Anda memang memanggil mereka serupa, jika
- mereka memiliki kinerja asimptotik yang berbeda?
- untuk kelas grafik khusus, satu algoritma memerlukan waktu sementara yang lain membutuhkan waktu ?
- mereka memiliki kondisi pemberhentian yang berbeda? (ingat, mereka memecahkan masalah yang sama)
- langkah pra-pemrosesan berbeda dalam dua algoritma?
- kompleksitas memori berbeda dalam dua algoritma?
Sunting: Pertanyaannya jelas sangat tergantung konteks dan subyektif. Saya berharap bahwa lima kondisi di atas, akan memungkinkan mendapatkan beberapa saran. Saya senang untuk memodifikasi pertanyaan lebih lanjut dan memberikan rincian lebih lanjut, jika diperlukan untuk mendapatkan jawaban. Terima kasih!
sumber
Jawaban:
Ini adalah masalah yang sulit untuk memberikan definisi yang koheren tentang "Algoritma A mirip dengan Algoritma B". Untuk satu, saya tidak berpikir bahwa "mereka harus menyelesaikan masalah yang sama" adalah kondisi yang diperlukan. Seringkali ketika seseorang mengatakan dalam sebuah makalah bahwa "algoritma dari Theorem 2 mirip dengan algoritma B di Theorem 1 ", algoritma A sebenarnya memecahkan masalah yang berbeda dari B , tetapi memiliki beberapa modifikasi kecil untuk menangani masalah baru .A 2 B 1 A B
Bahkan mencoba menentukan apa artinya dua algoritma menjadi sama adalah masalah yang menarik dan sulit. Lihat kertas "Kapan dua algoritma itu sama?" http://research.microsoft.com/~gurevich/Opera/192.pdf
sumber
Lebih sering daripada tidak, itu berarti "Saya tidak ingin menuliskan Algoritma B secara rinci, karena semua detail menarik hampir identik dengan yang ada di Algoritma A, dan saya tidak ingin melampaui batas 10 halaman, dan lagi pula tenggat waktu pengiriman adalah tiga jam. "
sumber
Jika Anda bermaksud "serupa" dalam arti sehari-hari, saya pikir jawaban JeffE menangkap apa yang beberapa orang maksudkan.
Dalam arti teknis, itu tergantung pada apa yang Anda pedulikan. Jika hanya kompleksitas waktu asimptotik yang Anda pedulikan, perbedaan antara rekursi dan iterasi mungkin tidak masalah. Jika hanya kemampuan komputasi yang Anda pedulikan, perbedaan antara variabel penghitung dan tumpukan satu simbol tidak penting.
Untuk membandingkan algoritma, langkah pertama adalah membuat gagasan tentang kesetaraan menjadi tepat. Secara intuitif, biarkan menjadi ruang algoritma dan M menjadi ruang objek matematika dan s e m : A → M menjadi encoding fungsi yang s e m ( P ) adalah makna dari algoritma P . Ruang M dapat berisi apa saja mulai dari jumlah variabel dalam algoritme Anda, hingga grafik keadaannya atau kompleksitas waktunya. Saya tidak percaya ada gagasan absolut tentang apa yang bisa M. Diberikan MSEBUAH M. s e m :A→M s e m (P) P M. M. M. meskipun, kita dapat mengatakan dua algoritma setara jika sama dengan s e m ( Q ) . Izinkan saya menambahkan bahwa saya pikir masing-masing dari lima kriteria yang Anda sebutkan dapat diformalkan secara matematis dengan cara ini.s e m (P) s e m (Q)
Jika kita ingin berbicara tentang suatu algoritma yang lebih umum daripada yang lain (atau suatu algoritma yang memperbaiki yang lain), saya akan memberi lebih banyak struktur. Bayangkan bahwa ( M , ⊑ ) adalah himpunan yang diurutkan sebagian dan urutan x ⊑ y menyandikan bahwa x adalah objek yang lebih didefinisikan daripada y . Misalnya, jika M berisi kumpulan jejak suatu algoritma dan ⊑ diatur penyertaan, s e m ( P ) ⊑ s e m ( Q ) berarti bahwa setiap jejak PM. ( M., ⊑ ) x ⊑ y x y M. ⊑ s e m (P) ⊑ s e m ( Q ) P adalah jejak . Kita bisa menafsirkan ini sebagai mengatakan bahwa P lebih deterministik dari Q .Q P Q
Selanjutnya, kita bisa bertanya apakah mungkin untuk mengukur seberapa dekat dua algoritma itu. Dalam hal ini, saya akan membayangkan bahwa harus diberkahi dengan metrik. Kemudian, kita dapat mengukur jarak antara objek matematika yang diwakili oleh dua algoritma. Kemungkinan selanjutnya adalah memetakan algoritma untuk mengukur ruang atau ruang probabilitas dan membandingkannya menggunakan kriteria lain.M.
Secara umum, saya akan bertanya - apa yang Anda pedulikan (dalam istilah intuitif), apa saja objek matematika yang mewakili properti intuitif ini, bagaimana saya bisa memetakan dari algoritma ke objek-objek ini, dan apa struktur ruang ini? Saya juga akan bertanya apakah ruang objek menikmati struktur yang cukup untuk mengakui gagasan kesamaan. Ini adalah pendekatan yang akan saya ambil dari perspektif semantik bahasa pemrograman. Saya tidak yakin apakah Anda menganggap pendekatan ini menarik, mengingat budaya pemikiran yang sangat berbeda dalam ilmu komputer.
sumber
Sejalan dengan jawaban Jeff, dua algoritma serupa jika penulis salah satunya mengharapkan bahwa penulis yang lain mungkin akan meninjau makalahnya.
Tapi bercanda samping, dalam komunitas teori, saya akan mengatakan bahwa apa algoritma masalah A adalah penyelesaian agak tangental apakah itu "mirip" dengan algoritma B, yang mungkin memecahkan masalah yang sama sekali berbeda. A mirip dengan B jika "bekerja" karena ide teoretis utama yang sama. Misalnya, apakah ide utama dalam kedua algoritma tersebut adalah Anda dapat memproyeksikan data ke dalam ruang dimensi yang jauh lebih rendah, mempertahankan norma dengan lemma Johnson-Lindenstrauss, dan kemudian melakukan pencarian brute-force? Kemudian algoritma Anda mirip dengan algoritma lain yang melakukan ini, tidak masalah apa pun yang Anda pecahkan. Ada sejumlah kecil teknik algoritme tugas berat yang dapat digunakan untuk menyelesaikan berbagai masalah, dan saya akan berpikir bahwa teknik ini membentuk centroid dari banyak set algoritma "mirip".
sumber
Pertanyaan yang sangat menarik, dan kertas Ryan yang sangat bagus!
Saya benar-benar setuju dengan gagasan bahwa membuat penilaian tentang kesamaan keseluruhan antara algoritma terutama merupakan penilaian nilai subyektif. Sementara dari sudut pandang teknis ada sejumlah fitur yang diamati dengan cermat untuk memutuskan kesamaan algoritma, pada akhirnya, itu juga masalah selera pribadi. Saya akan mencoba memberikan deskripsi tentang pentingnya kedua sisi dari koin yang sama sambil merujuk pada poin-poin tertentu dari pertanyaan Anda:
Dari sudut pandang teknis:
Jadi apa yang membuat algoritma menjadi serupa / berbeda? Dalam pandangan saya (dan ini murni spekulatif), perbedaan utama adalah tentang apa yang mereka sarankan kepada Anda. Banyak, banyak (banyak!) Algoritma berbeda hanya dalam beberapa teknis ketika melayani untuk tujuan yang sama sehingga kasus khas berbeda untuk rentang input yang berbeda. Namun, perbedaan terbesar adalah (menurut saya) apa yang mereka sarankan kepada Anda. Algoritma memiliki kemampuan yang berbeda dan oleh karena itu kekuatan dan kelemahan mereka sendiri. Jika dua algoritma terlihat seperti sama tetapi mungkin diperluas dengan cara yang berbeda untuk mengatasi kasus yang berbeda maka saya akan menyimpulkan bahwa mereka berbeda. Namun, sering kali, dua algoritme terlihat sangat mirip sehingga Anda akan menganggapnya sama ... sampai seseorang tiba membuat perbedaan utama dan tiba-tiba, mereka benar-benar berbeda!
Maaf, tanggapan saya pada akhirnya begitu lama ...
Bersulang,
sumber
Penyebutan kesamaan tanpa mendefinisikan kesamaan metrik tidak didefinisikan dengan baik. Ada banyak cara di mana dua algoritma dapat serupa:
Quicksort dan Mergesort memecahkan masalah yang sangat mirip, tetapi mereka menggunakan algoritma yang berbeda untuk melakukannya. Mereka memiliki kompleksitas algoritmik yang serupa (meskipun kinerja kasus terburuk dan penggunaan memori dapat bervariasi). Quicksort dan Mergesort keduanya mirip dengan Bubblesort, namun Bubblesort memiliki metrik kinerja yang sangat berbeda. Jika Anda mengabaikan statistik kompleksitas Quicksort, Mergesort dan Bubblesort semuanya berada dalam kelas ekivalensi yang sama. Namun, jika Anda sama sekali peduli tentang kompleksitas algoritmik, maka Quicksort dan Mergesort jauh lebih mirip satu sama lain daripada keduanya adalah Bubblesort.
Pemrograman dinamis Smith-Waterman dan upaya perbandingan urutan HMM untuk memecahkan masalah menyelaraskan dua urutan. Namun, mereka mengambil input berbeda. Smith-Waterman mengambil dua sekuens sebagai input, dan perbandingan sekuens HMM mengambil HMM dan sekuens sebagai input. Kedua keselarasan urutan output. Dalam hal memotivasi ide, keduanya mirip dengan jarak sunting Levenshtein , tetapi hanya pada tingkat yang sangat tinggi.
Berikut adalah beberapa kriteria yang dengannya dua algoritma dapat disebut serupa:
Keputusan kritis tentang arti kesamaan tetap ada. Terkadang Anda peduli dengan kompleksitas suatu algoritma, terkadang Anda tidak. Karena definisi kesamaan tergantung pada konteks diskusi, istilah "algoritma yang serupa" tidak didefinisikan dengan baik.
sumber