Apa itu algoritma?
Sebuah algoritma adalah langkah-langkah untuk memecahkan masalah tertentu dalam jumlah langkah terbatas untuk masukan berukuran terbatas. Algoritma dapat diklasifikasikan dalam berbagai cara. Mereka adalah:
- Metode Implementasi
- Metode Perancangan
- Pendekatan Perancangan
- Klasifikasi Lainnya
Dalam artikel ini, berbagai algoritma dalam setiap metode klasifikasi dibahas.
Klasifikasi algoritma penting karena beberapa alasan:
- Organisasi: Algoritma bisa sangat kompleks, dan dengan mengklasifikasikannya, menjadi lebih mudah untuk mengatur, memahami, dan membandingkan berbagai algoritma.
- Pemecahan Masalah: Masalah yang berbeda memerlukan algoritma yang berbeda, dan dengan memiliki klasifikasi, dapat membantu mengidentifikasi algoritma terbaik untuk masalah tertentu.
- Perbandingan Kinerja: Dengan mengklasifikasikan algoritma, memungkinkan untuk membandingkan kinerja mereka dalam hal kompleksitas waktu dan ruang, membuat lebih mudah memilih algoritma terbaik untuk kasus penggunaan tertentu.
- Daur Ulang: Dengan mengklasifikasikan algoritma, menjadi lebih mudah untuk mendaur ulang algoritma yang sudah ada untuk masalah serupa, dengan demikian mengurangi waktu pengembangan dan meningkatkan efisiensi.
- Penelitian: Klasifikasi algoritma sangat penting untuk penelitian dan pengembangan di bidang ilmu komputer, karena membantu mengidentifikasi algoritma baru dan meningkatkan yang sudah ada.
Secara keseluruhan, klasifikasi algoritma memainkan peran penting dalam ilmu komputer dan membantu meningkatkan efisiensi dan efektivitas dalam pemecahan masalah.
Klasifikasi berdasarkan Metode Implementasi: Ada tiga kategori utama di mana algoritma dapat diklasifikasikan dalam jenis ini. Mereka adalah:
- Rekursi atau Iterasi: Algoritma rekursif adalah algoritma yang memanggil dirinya sendiri berulang-ulang sampai kondisi dasar tercapai, sementara algoritma iteratif menggunakan perulangan dan/atau struktur data seperti tumpukan, antrian untuk memecahkan masalah. Setiap solusi rekursif dapat diimplementasikan sebagai solusi iteratif dan sebaliknya. Contoh: Menara Hanoi diimplementasikan secara rekursif, sedangkan masalah Stock Span diimplementasikan secara iteratif.
- Tepat atau Mendekati: Algoritma yang mampu menemukan solusi optimal untuk masalah apa pun dikenal sebagai algoritma yang tepat. Untuk semua masalah di mana tidak mungkin menemukan solusi yang paling dioptimalkan, digunakan algoritma pendekatan. Algoritma pendekatan adalah jenis algoritma yang menemukan hasil sebagai hasil rata-rata dari hasil sub untuk masalah tertentu. Contoh: Untuk Masalah NP-Hard, digunakan algoritma pendekatan. Algoritma pengurutan adalah algoritma yang tepat.
- Serial atau Paralel atau Algoritma Terdistribusi: Dalam algoritma serial, satu instruksi dieksekusi pada satu waktu, sedangkan algoritma paralel adalah yang membagi masalah menjadi submasalah dan mengeksekusinya pada prosesor yang berbeda. Jika algoritma paralel didistribusikan pada mesin yang berbeda, maka dikenal sebagai algoritma terdistribusi.
Klasifikasi berdasarkan Metode Perancangan: Ada tiga kategori utama di mana algoritma dapat diklasifikasikan dalam jenis ini. Mereka adalah:
- Metode Rakus: Dalam metode rakus, pada setiap langkah, keputusan diambil untuk memilih pilihan lokal terbaik, tanpa mempertimbangkan konsekuensi di masa depan. Contoh: Ransum Fraksional, Pemilihan Aktivitas.
- Pecah dan Taklukkan: Strategi Pecah dan Taklukkan melibatkan membagi masalah menjadi submasalah, secara rekursif memecahkannya, dan kemudian menggabungkannya kembali untuk jawaban akhir. Contoh: Pengurutan Gabungan (Merge sort), Quicksort.
- Pemrograman Dinamis: Pendekatan Pemrograman Dinamis mirip dengan pecah dan taklukkan. Perbedaannya adalah bahwa ketika kita memiliki pemanggilan fungsi rekursif dengan hasil yang sama, daripada memanggilnya lagi, kami mencoba menyimpan hasilnya dalam struktur data dalam bentuk tabel dan mengambil hasil dari tabel tersebut. Dengan demikian, kompleksitas waktu keseluruhan berkurang. "Dinamis" berarti kami secara dinamis memutuskan apakah akan memanggil fungsi atau mengambil nilai dari tabel. Contoh: Ransum 0-1, masalah jumlah sub himpunan.
- Pemrograman Linier: Dalam Pemrograman Linier, terdapat ketidaksetaraan dalam hal input dan memaksimalkan atau meminimalkan beberapa fungsi linier dari input. Contoh: Aliran Maksimum Graf Terarah.
- Reduksi (Transformasi dan Taklukkan): Dalam metode ini, kami memecahkan masalah sulit dengan mentransformasikannya menjadi masalah yang sudah dikenal dengan solusi optimal. Pada dasarnya, tujuannya adalah menemukan algoritma pengurangan yang kompleksitasnya tidak didominasi oleh algoritma pengurangan yang dihasilkan. Contoh: Algoritma Seleksi untuk menemukan median dalam daftar melibatkan pengurutan daftar dan kemudian mencari elemen tengah dalam daftar yang diurutkan. Teknik-teknik ini juga disebut transformasi dan taklukkan.
- Pencarian Kembali (Backtracking): Teknik ini sangat berguna dalam memecahkan masalah kombinatorial yang memiliki solusi unik tunggal. Di mana kita harus menemukan kombinasi langkah yang benar yang mengarah pada pemenuhan tugas. Masalah semacam itu memiliki tahapan yang berbeda dan ada beberapa pilihan di setiap tahap. Pendekatan ini didasarkan pada mengeksplorasi setiap pilihan yang tersedia di setiap tahap satu per satu. Saat menjelajahi pilihan, jika mencapai titik yang tidak tampak mengarah pada solusi, kontrol program mengembalikan satu langkah, dan mulai menjelajahi opsi berikutnya. Dengan cara ini, program menjelajahi semua kemungkinan tindakan dan menemukan rute yang mengarah pada solusi. Contoh: Masalah N-Queen, masalah jagung.
- Cabang dan Batas (Branch and Bound): Teknik ini sangat berguna dalam memecahkan masalah optimisasi kombinatorial yang memiliki banyak solusi dan kita tertarik untuk menemukan solusi yang paling optimum. Dalam pendekatan ini, ruang solusi keseluruhan direpresentasikan dalam bentuk pohon ruang keadaan. Saat program berkembang, setiap kombinasi status dieksplorasi, dan solusi sebelumnya digantikan oleh yang baru jika itu tidak optimal dari solusi saat ini. Contoh: Penjadwalan pekerjaan, masalah salesman yang bepergian.
Klasifikasi berdasarkan Pendekatan Perancangan: Ada dua pendekatan untuk merancang algoritma. Pendekatan-pendekatan ini termasuk:
- Pendekatan Atas-Bawah:
- Pendekatan Bawah-Atas
Pendekatan Atas-Bawah: Dalam pendekatan atas-bawah, masalah besar dibagi menjadi masalah sub yang lebih kecil dan terus-menerus mengulangi proses memecah masalah hingga masalah kompleks terselesaikan.
Pendekatan Bawah-Atas: Pendekatan bawah-atas juga dikenal sebagai kebalikan dari pendekatan atas-bawah. Dalam pendekatan ini, bagian dari program kompleks dipecahkan menggunakan bahasa pemrograman, dan kemudian ini digabungkan menjadi program lengkap.
Pendekatan Atas-Bawah (dalam Python):
def selesaikan_masalah(masalah):
if masalah == "sederhana":
return "terselesaikan"
elif masalah == "kompleks":
masalah_sub = pecah_masalah_kompleks(masalah)
solusi_sub = [selesaikan_masalah(sub) for sub in masalah_sub]
return gabungkan_solusi_sub(solusi_sub)
Pendekatan Bawah-Atas (dalam Python):
def selesaikan_masalah_sub(masalah_sub):
return [selesaikan_masalah_sub(sub) for sub in masalah_sub]
def gabungkan_solusi_sub(solusi_sub):
# implementasi untuk menggabungkan solusi sub untuk memecahkan masalah yang lebih besar
def selesaikan_masalah(masalah):
if masalah == "sederhana":
return "terselesaikan"
elif masalah == "kompleks":
masalah_sub = pecah_masalah_kompleks(masalah)
solusi_sub = selesaikan_masalah_sub(masalah_sub)
return gabungkan_solusi_sub(solusi_sub)
Klasifikasi Lainnya: Selain mengklasifikasikan algoritma ke dalam kategori-kategori besar di atas, algoritma dapat diklasifikasikan ke dalam kategori-kategori besar lainnya seperti:
- Algoritma Acak (Randomized Algorithms): Algoritma yang membuat pilihan acak untuk solusi yang lebih cepat dikenal sebagai algoritma acak. Contoh: Algoritma QuickSort Acak.
- Klasifikasi berdasarkan kompleksitas: Algoritma yang diklasifikasikan berdasarkan waktu yang dibutuhkan untuk mendapatkan solusi untuk masalah tertentu dengan ukuran masukan. Analisis ini dikenal sebagai analisis kompleksitas waktu. Contoh: Beberapa algoritma memerlukan O(n), sementara beberapa algoritma memerlukan waktu eksponensial.
- Klasifikasi berdasarkan Area Penelitian: Dalam ilmu komputer, setiap bidang memiliki masalahnya sendiri dan memerlukan algoritma yang efisien. Contoh: Algoritma Pengurutan, Algoritma Pencarian, Pembelajaran Mesin, dll.
- Branch and Bound, Pencacahan dan Pencarian Kembali (Backtracking): Ini sebagian besar digunakan dalam Kecerdasan Buatan.