Daftar Isi ⇅
show
Algoritma dibutuhkan agar kita dapat memerintah komputer untuk mengambil langkah-langkah sistematis yang sesuai dengan permasalahan yang kita berikan. Meskipun dikerjakan oleh komputer, yang membuatnya tetaplah seorang manusia. Walaupun sistem sangat berkaitan erat dengan teknologi informasi, sejatinya sistem merupakan sistematika penyelesaian suatu persoalan yang sudah lama digunakan oleh manusia jauh sebelum lahirnya teknologi analog dan digital. Begitu pula dengan algoritma, penemuannya telah muncul jauh lebih lama sebelum ada komputer. Dengan demikian, algoritma merupakan konsepsi dasar yang dilahirkan untuk memecahkan masalah, baik menggunakan komputer atau pun tidak.
Hal inilah yang menyebabkan algoritma tetap banyak mendapatkan sorotan sosial. Misalnya, bagaimana para content creator selalu memiliki keresahan mengenai algoritma yang digunakan oleh suatu platform. Contohnya, para blogger selalu merasakan dampak langsung dari perubahan algoritma mesin pencari yang selalu konsisten dilakukan. Youtuber, selalu terimbas oleh berbagai perubahan algoritma yang dilakukan untuk menyortir penyajian rekomendasi kepada subscriber mereka. Berbagai fenomena tersebut terjadi sebagai akibat dari penyusunan algoritma.
Bukan hanya program komputer atau teknologi informasi lain yang memanfaatkan pemrograman saja yang menggunakan algoritma. Birokrasi pemerintah, evaluasi perusahaan, hingga diagnosa seorang dokter secara tidak langsung menerapkan algoritma juga pada langkah-langkah pemecahan masalahnya. Oleh karena itu, algoritma merupakan persoalan penting yang bermanfaat bagi semua bidang. Berikut adalah berbagai pemaparan mengenai algoritma untuk memperluas khazanah pengetahuan kita, baik dalam konteks informatika, maupun secara umum.
Pengertian Algoritma
Algoritma adalah urutan langkah-langkah untuk memecahkan masalah yang disusun secara sistematis dan logis (Dianta, 2021, hlm. 2). Definisi tersebut sejalan dengan pengertian algoritma secara leksikal dalam Kamus Besar Bahasa Indonesia, yakni: urutan logis pengambilan putusan untuk pemecahan masalah.
Saat sedang menghadapi masalah atau persoalan, tentunya kita ingin menyelesaikannya. Melalui algoritma, apa yang kita lakukan adalah menganalisis masalah itu lalu menyediakan prosedur atau langkah demi langkah untuk menyelesaikannya. Mengapa? Agar kita dapat melakukan prosedur sama untuk menyelesaikan persoalan lain yang serupa. Dengan demikian, algoritma adalah instruksi langkah demi langkah yang jelas untuk memecahkan masalah yang diberikan (Santoso, 2021, hlm. 4).
Sementara itu, secara historis dan etimologis, Istilah algoritma berasal dari kata “algorism” yang merujuk pada seorang ahli matematika muslim yang hidup di abad ke-19 bernama Ibnu Al-Khwarizmi (Indahyanti & Rahmawati, 2021, hlm. 2). Pada perkembangannya, konsep pemikiran terbut digunakan dalam menguraikan dan memecahkan permasalahan secara logis dan matematis, dengan cara diterapkan sebagai suatu metode algoritma dalam proses kerja komputer.
Selanjutnya, menurut Cormen (2013 dalam Indahyanti & Rahmawati, 2021, hlm. 2) algoritma adalah susunan langkah-langkah untuk menyelesaikan suatu persoalan secara logis, efisien dan restruktur untuk menghasilkan solusi yang tepat pada suatu masalah dengan cara menentukan prosedur dengan tepat pula. Artinya, algoritma tidak membicara permasalahan prosedur untuk memecahkan masalahnya saja, akan tetapi berkutat pula dengan solusi tepat yang dihasilkannya pula.
Dapat disimpulkan bahwa algoritma adalah suatu prosedur berupa urutan langkah-langkah yang terintegrasi dan sistematis dengan dan tanpa metode khusus yang dapat dilakukan untuk menyelesaikan suatu persoalan secara logis dan efisien sehingga mampu menghasilkan solusi yang tepat sesuai dengan persoalan yang diberikan.
Ciri-Ciri Algoritma
Selain melalui pengertiannya, kita juga dapat mengetahui definisi algoritma dari karakteristik yang menyelubunginya. Dengan demikian, kita dapat mengetahui bahwa sesuatu adalah algoritma jika memiliki ciri atau karakteristik khusus tersebut. Menurut Indahyanti & Rahmawati (2021, hlm. 7) algoritma mempunyai beberapa karakteristik unik, yakni sebagai berikut.
- Menerima beberapa masukan.
- Memproses masukan melalui langkah-langkah yang berurutan.
- Setiap langkah harus didefinisikan dengan jelas, sederhana, dan efektif.
- Urutan langkah tersebut harus terbatas dan berhenti.
- enghasilkan keluaran atau output.
Sementara itu, menurut Heriyanto dan Kadir ( 2005, hlm.6) terdapat lima karakteristik atau ciri-ciri penting yang harus dimiliki sebuah algoritma, yakni finiteness, definiteness, masukan, keluaran, dan efektivitas, yang akan dijelaskan sebagai berikut.
- Finiteness,
menyatakan bahwa suatu algoritma harus berakhir untuk semua kondisi setelah memproses sejumlah langkah. - Defineteness,
menyatakan bahwa setiap langkah harus dinyatakan dengan jelas (tidak rancu atau mendua arti). - Masukan (Input),
setiap algoritma dapat tidak memiliki masukan atau mempunyai satu atau beberapa masukan. Masukan merupakan suatu besaran yang diberikan di awal sebelum algoritma diproses. - Keluaran (Ouput),
setiap algoritma memiliki keluaran, entah hanya sebuah keluaran atau banyak keluaran. Keluaran merupakan besaran yang mempunyai kaitan atau hubungan dengan masukan. - Efektivitas,
algoritma diharapkan bersifat efektif, dalam arti semua operasi yang dilaksanakan oleh algoritma harus sederhana dan dapat dikerjakan dalam waktu yang terbatas. Secara prinsip, setiap intruksi dalam algoritma dapat dikerjakan oleh orang dengan hanya menggunakan kertas dan pensil.
Syarat Algoritma
Selain ciri di atas, suatu algoritma juga harus disusun atas dasar-dasar tertentu agar dapat menyelesaikan permasalahan dengan baik dan tidak mengalami galat saat dijalankan. Algoritma yang baik akan menghasilkan keluaran yang benar, tepat guna, serta waktu dan penggunaan resources yang relatif sedikit. Untuk mencapainya, kita dapat memastikan bahwa algoritma yang dibuat memiliki syarat-syarat tertentu yang membuatnya dapat bekerja secara efektif dan efisien. Syarat-syarat algoritma tersebut menurut Dianta (2021, hlm. 4) adalah sebagai berikut.
- Tingkat kepercayaannya tinggi (realibility).
Hasil yang diperoleh dari proses harus berakurasi tinggi dan benar. - Pemrosesan yang efisien (cost rendah).
Proses harus diselesaikan secepat mungkin dan frekuensi kalkulasi yang sependek mungkin. - Sifatnya general.
Bukan sesuatu yang hanya untuk menyelesaikan satu kasus saja, tapi juga untuk kasus lain yang lebih - Bisa dikembangkan (expandable).
Algoritma haruslah sesuatu yang dapat kita kembangkan lebih jauh berdasarkan perubahan requirement yang ada. - Mudah dimengerti.
Siapa pun yang melihat, dia akan bisa memahami algoritma Anda. Susah dimengertinya suatu program akan membuat susah di-maintenance (kelola). - Portabilitas yang tinggi (portability).
Dapat dengan mudah diimplementasikan di berbagai platform komputer. - Precise.
Algoritma yang dibuat haruslah tepat, betul, dan teliti. - Efektif.
Algoritma yang disusun haruslah memiliki nilai tepat guna yang tinggi. - Tidak boleh ada instruksi yang tidak mungkin dikerjakan oleh pemroses yang akan menjalankannya.
- Harus terminate.
Artinya, jalannya algoritma harus memiliki kriteria berhenti (tidak boleh tidak bisa dihentikan). - Output yang dihasilkan tepat.
Jenis-jenis Algoritma
Terdapat beberapa klasifikasi algoritma yang dibagi berdasarkan karakter tertentu. Salah satu cara dalam melakukan pembagian jenis tersebut adalah berdasarkan paradigma dan metode yang digunakan dalam perancangan algoritma tersebut. Beberapa paradigma yang digunakan untuk menyusun suatu algoritma antara lain adalah sebagai berikut.
- Divide and Conquer,
merupakan paradigma untuk membagi suatu permasalahan yang besar menjadi permasalahan-permasalahan yang kecil. Pembagian masalah ini dilakukan secara terus-menerus sampai ditemukan bagian masalah yang kecil dan mudah untuk dipecahkan. - Dynamic programming,
paradigma pemrograman dinamik akan sesuai jika digunakan pada suatu masalah yang mengandung sub-struktur yang optimal dan mengandung beberapa bagian permasalahan yang tumpang tindih. Paradigma ini sekilas terlihat mirip dengan paradigma divide and conquer, sama-sama mencoba untuk membagi permasalahan menjadi subpermasalahan yang lebih kecil, tapi secara intrinsic ada perbedaan dari karakter permasalahan yang dihadapi. - Metode serakah,
merupakan paradigma yang mirip dengan pemrograman dinamik, namun jawaban dari setiap submasalah tidak perlu diketahui dari setiap tahap, dan menggunakan pilihan apa yang terbaik pada saat itu. - Search and enumeration,
merupakan paradigma pemodelan yang memberikan aturan tertentu dalam pemecahan masalah dan optimalisasi.
Analisis Algoritma
Berdasarkan karakteristik, ciri, dan syarat yang harus dipenuhi oleh algoritma, tampak jelas bahwa perancangan dan pembuatannya memerlukan perhatian khusus yang amat teliti. Oleh karena itu, analisis algoritma menjadi lalapan yang digunakan oleh para perancang dan insinyur perangkat lunak untuk menciptakan algoritma yang baik.
Ada banyak cara untuk menyelesaikan persoalan, tentunya setelah difilter pada ketersediaan dan kenyamanannya pula. Demikian pula dalam algoritma, terdapat banyak algoritma yang tersedia untuk memecahkan permasalahan yang sama. Misalnya, terdapat bermacam algoritma untuk melakukan pengurutan, seperti pengurutan penyisipan, pengurutan pemilihan, pengurutan cepat, dan sebagainya. Analisis algoritma membantu kita untuk menentukan algoritma mana yang paling efisien dalam hal waktu dan ruang yang dikonsumsi.
Tujuan dari analisis algoritma adalah untuk membandingkan algoritma (atau solusi) terutama dalam hal waktu berjalan tetapi juga dalam hal faktor lain. Misalnya berapa banyak penggunaan sumber daya yang dibutuhkan? Bagaimana kontinuitasnya untuk dikembangkan? Berapa banyak waktu yang dibutuhkan untuk menyelesaikan suatu permasalahan? Apakah algoritma dapat menyelesaikan beberapa persoalan sekaligus? Dan sebagainya.
Berdasarkan uraian di atas, analisis algoritma harus memperhatikan beberapa hal di bawah ini.
1. Kebenaran (Correctness)
Dalam pembuktian kebenaran suatu algoritma, hasil akhir dari algoritma tersebut haruslah diperiksa apakah sudah sesuai dengan kondisi-kondisi yang telah diberikan pada awal masukan. Untuk melakukan pemeriksaan suatu algoritma yang kompleks, kita dapat membagi algoritma tersebut menjadi beberapa modul kecil, sehingga jika modul kecil tersebut benar maka seluruh program akan benar.
2. Jumlah Operasi yang Dilakukan (Amount of Work Done)
Penghitungan jumlah operasi yang dilakukan ini digunakan untuk membandingkan tingkat efisiensi suatu algoritma dengan algoritma lain dalam memecahkan suatu masalah yang sama. Hal ini dilakukan untuk mendapatkan algoritma yang dapat menghasilkan waktu eksekusi yang lebih cepat. Cara paling mudah dalam membandingkan dua buah algoritma adalah dengan menghitung jumlah operasi dasar yang dilakukan oleh algoritma tersebut, karena apabila dilakukan pembandingan langsung pada komputer, sering kali kondisi setiap komputer dan cara pembacaan setiap bahasa pemrograman mempengaruhi waktu pemecahan masalah.
3. Analisis Kemungkinan Terburuk (Worst Case)
Analisis worst case merupakan analisis yang digunakan untuk melihat tingkat efektifitas suatu algoritma dalam menyelesaikan masalah-masalah yang masukannya merupakan masukan yang terkadang tidak perlu dihitung atau cara mengatasi pada saat kemungkinan masukan salah.
4. Optimal (Optimality)
Untuk menganalisis suatu algoritma, biasanya selalu menggunakan kelas algoritma dan ukuran kompleksitas, misalnya, jumlah operasi dasar yang dilakukan. Sebuah algoritma disebut optimal (untuk worst case) jika tidak ada algoritma yang dapat melakukan operasi dasar yang lebih sedikit (untuk worst case).
5. Ikatan Terendah (Lower Bound)
Untuk membuktikan bahwa suatu algoritma adalah optimal, tidak diperlukan menganalisis setiap algoritma. Dengan membuktikan teoremateorema yang menentukan lower bound pada jumlah operasi yang diperlukan untuk menyelesaikan masalah, maka algoritma yang dapat melakukan jumlah operasi tersebut disebut optimal.
Referensi
- Dianta, I.A. (2021). Logika dan algoritma untuk merancang aplikasi komputer. Semarang: Yayasan Prima Agus Teknik.
- Indahyanti, U., Rahmawati, Y. (2021). Algoritma dan pemrograman dalam bahasa C++. Sidoarjo: UMSIDA Press.
- Santoso, J.T. (2021). Stuktur data dan algoritma (bagian1). Semarang: Yayasan Prima Agus Teknik.