Sabtu, 14 September 2013

Peranan Algoritma dalam proses komputasi


Pernah denger terminologi algoritma? Mungkin kalo pernah nonton film Die Hard 4, Social Network, atau film film yang berbau hacker atau komputer mungkin pernah denger. Menurut saya, algoritma merupakan serangkaian langkah-langkah terurut yang dilakukan untuk menyelesaikan suatu kasus atau masalah. Contoh gampangnya ialah resep membuat rendang. Ada bahan-bahan (input) yang harus disediakan seperti daging, santan, serta bumbu-bumbu masak. Setelah bahan-bahan tersedia, terdapat langkah-langkah untuk membuat rendang dari niat, menyembelih sapi, memotong daging, sampai tahap penyajian (proses). Setelah proses selesai dilakukan, maka akan menghasilkan rendang (output). Sama seperti resep, algoritma dalam komputer dapat diartikan sebagai suatu langkah yang memproses satu atau lebih input menjadi satu nilai atau sekumpulan nilai output.
Salah satu contoh algoritma yang sering digunakan pada kebanyakan program-program komputer ialah algoritma sorting atau pengurutan. Misalkan kita mempunyai himpunan A = {1,5,3,2,4}. Kita ingin mengurutkan anggota himpunan A dari yang terkecil hingga yang terbesar. Secara formal dapat dituliskan sebagai berikut:
Input : Himpunan A.
Output : Himpunan A yang sudah terurut.
Dengan algoritma sorting, anggota himpunan A berubah urutannya menjadi A = {1,2,3,4,5}. Pada dunia komputer kita menggunakan istilah instance sebagai pengganti input karena gak semua input diproses oleh algoritma. Jadi, instance adalah input yang dibutuhkan algoritma untuk menghasilkan output (solution). Algoritma dikatakan correct atau tepat atau efektif jika semua instance dapat menghasilkan nilai output yang benar.
Ada banyak jenis masalah yang dapat diselesaikan oleh algoritma, berikut contoh-contoh kegunaan algoritma:
1. Bidang Biologi
Data gen dan DNA yang sudah terkumpul saat ini telah berhasil diidentifikasi sebanyak kurang lebih 100.000 gen. Untuk melihat apakah satu sequence DNA mirip dengan sequence DNA lainnya membutuhkan waktu relatif lama. Algoritma Long Common Sequence membuat proses identifikasi kemiripan dapat dilakukan secara otomatis dan dengan waktu relatif lebih cepat.
2. Komunikasi Data
Pada saat kita mencari suatu artikel di mesin pencarian Google, hasil dari pencarian akan menyajikan hasil yang mendekati dengan keinginan kita. Mesin Google akan bekerja untuk mengumpulkan data atau artikel, mengelompokan artikel, sampai menyajikan informasi menggunakan algoritma-algoritma yang cerdas dan bekerja secara sinergis. Tanpa ada algoritma, hasil pencarian akan jauh dari query yang kita masukan.
3. Perusahaan Minyak
Perusahaan minyak membutuhkan informasi lokasi kandungan minyak potensial. Ada beberapa paramter yang digunakan untuk menentukan lokasi minyak. Dengan menggunakan algoritma, diharapkan hasil yang diperoleh menjadi cepat dan dilakukan secara otomatis. Informasi yang tepat dapat menyebabkan perusahaan minyak mendapatkan laba yang besar.
Efesiensi
Fokus mempelajari algoritma salah satunya ialah untuk mencari algoritma yang efesien yaitu yang mampu menyelesaikan masalah dengan waktu relatif cepat dan memori yang sedikit. Algoritma yang berkualitas baik ialah algoritma yang efektif dan efesien. Seberapa penting sih efesiensi suatu algoritma dalam program komputer? Yuk, kita bandingkan 2 algoritma sorting berikut: Insertion Sort dan Merge Sort.
Algoritma Insertion Sort memiliki c­­­­­1n­2langkah dengan c1 merupakan konstanta yang bernilai tetap dan n merupakan jumlah instance sehingga jumlah instance hanya memengaruhi nilai n. Jika jumlah instance sebanyak 20, maka akan dilakukan 400c1langkah untuk melakukan pengurutan atau sorting. Jika kita tambah menjadi 1.000 instance, maka akan dilakukan 1.000.000c­1 langkah. Banyak bener ya. Coba kita gunakan algoritma Merge Sort yang memiliki c2 n log(n) langkah. Jika jumlah instance sebanyak 20, maka akan dilakukan c2 x 20 x log(20), yaitu sekitar 26c2 langkah. Jika jumlah instance 1.000 maka akan dibutuhkan 3000c2 langkah.
Misalkan kita tentukan nilai c1 = 1 dan c2 = 100. Pada saat nilai instance sebesar 20, langkah yang ditempuh dengan algoritma insertion sort ialah 400 x 1 = 400 langkah sedangkan algoritma merge sort menggunakan 26 x 100 = 2600 langkah. Untuk kasus ini, algoritma insertion sort lebih baik dibandingka merge sort. Oke, kita tambah deh jumlah instance menjadi 1000, maka langkah insertion sort menjadi 1.000.000 x 1  = 1.000.000 langkah namun langkah merge sort menjadi 3000 x 100 = 300.000 langkah. Pada kasus kedua, algoritma merge sort lebih baik dibandingkan insertion sort.
Dari ilustrasi di atas, ada kalanya bahwa algoritma insertion sort merupakan yang paling efesien dalam proses sorting namun ada kalanya justru merge sort yang lebih efesien. Namun, secara keseluruhan algoritma merge sort lebih baik dibandingkan insertion sort.
Ribet banget sih mikir ini itu, toh semakin ke depan kan hardware komputer semakin canggih. Betul kalau semakin ke depan, teknologi CPU semakin canggih. Namun, untuk membeli teknologi seperti itu membutuhkan biaya yang tinggi sedangkan kebutuhan untuk segera menyelesaikan suatu masalah tidak kalah penting apalagi kalo duit cekak :p
Kita gunakan ilustrasi tadi. Misalkan kita punya komputer A dan komputer B. Komputer A dapat memroses 1000 langkah dalam 1 detik, sedangkan komputer B hanya dapat memroses 10 langkah dalam 1 detik. Jika kita menggunakan algoritma insertion sort pada komputer A, waktu yang dibutuhkan ialah 1.000.000/1.000 langkah = 1.000 detik = 16 menit. Jika menggunakan komputer B untuk algoritma merger sort maka waktu yang dibutuhkan ialah 300.000/500 = 600 detik = 10 menit. Untuk kasus tersebut, penggunaan algoritma yang tepat sangat memengaruhi proses untuk mencari solusi yang efesien. Jadi, semakin canggih CPU di masa depan, kita gunakan untuk menyelesaikan jumlah instance yang lebih besar karena efesiensi proses sudah dihandle oleh algoritma yang kita design.
Bukannya sekarang pemrograman sudah semakin canggih ya? Bukankah sudah ada Object Orientaion Programming,  integrated Website, fast networking, parallel programming dsb? Emang betul semua itu memperbaiki waktu dan memori dalam menjalankan aplikasi. Namun, perlu diingat bahwa setiap bagian dari program komputer menggunakan algoritma untuk menyelesaikan sub problem. Kadangkala, pada saat waktu yang dibutuhkan menyelesaikan sub problem membutuhkan waktu yang lama, maka akan memengaruhi keseluruhan program.
Jadi, algoritma memegang peranan yang sangat penting dalam membuat program komputer yang berkualitas. Algoritma juga yang membedakan  antara programmer pemula dengan programmer expert. So, yuk kita pelajari algoritma lebih dalam :D

Daftar Pustaka:
Corem Thomas, at all. 2009. Introduction to Algorithm 3rd. Massachusetts: MIT Press
http://alifkurniawan08.wordpress.com/2013/06/11/peranan-algoritma-dalam-proses-komputasi/

Tidak ada komentar: