1.
Masalah
Manusia hidup dengan segala masalah yang
melingkupinya. Masalah adalah
pertanyaan atau tugas yang kita cari jawabannya.
Contoh beberapa masalah dalam kehidupan
sehari-hari misalnya :
a.
Diberikan setumpuk kartu
pasien disebuah tempat praktek dokter yang tersusun secara acak. Setiap kartu
memepunyai nomor registrasi pasien. Bagaimana mengurutkan kartu-kartu tersebut
berdasarkan nomor urut pasien sehingga tersusun dengan nomor kecil diatas dan
nomor besar dibawah ? jawaban dari masalah ini adalah barisan kartu pasien yang
sudah terurut dari kecil ke besar.
b.
Diberikan daftar nama
pejabat baru beserta jumlah kekayaannya. Tentukan pejabat mana yang mempunyai
kekayaan paling besar ? Jawaban dari masalah ini adalah nama pejabat yang mempunyai
kekayaan paling besar.
Tentu masih banyak lagi masalah
yang muncul dibidang pekerjaan seseorang. Beberapa masalah yang muncul didalam
dunia nyata banyak memiliki kemiripan substansi.
Oleh karena itu, secara generik kita sering mendeskripsikan maslah-masalah yang
muncul didunia nyata dengan menggunakan beberapa ukuran (parameter). Mialnya
sebagai berikut :
1.
[Masalah pengurutan]
Diberikan sebuah (list) S yang
terdiri dari n buah nilai bilangan
bulat. Bagaimana mengurutkan n buah nilai tersebut sehingga terurut secara
menaik ?
2.
[Masalah pencarian]
Tentukan apakah suatu nilai x
terdapat dalam sebuah list S yang
berisi n buah bilangan bulat !
3.
[Masalah mencari elemen
terbesar] Diberikan list S yang
terdiri dari n buah bilangan bulat.
Carilah elemen terbesar di dalam list tersebut.
Setiap masalah umunya mengandung
satu atau lebih parameter yang
dinyatakan didalam masalah tersebut. Misalnya pada contoh masalah pengurutan
diatas, S dan n adalah parameter masalah. Parameter ini di dalam pernyataan
masalah belum diberi nilai spesifik, dan semua nilai parameter merupakan
masukan (input) untuk maslah
tersebut. Setiap pemberian nilai untuk semua parameter masalah dinamakan instansiasi masalah (instance of a problem). Jawaban
terhadap instansiasi maslah disebut solusi.
Sebagai contoh, instansiasi masalah untuk masalah pengurutan adalah
S = [15,4,8,11,2,10,19], n = 7
Dan solusinya adalah barisan nilai terurut S = [2,4,8,10,11,15,19].
2.
Algoritma
Untuk masalah dengan instansiasi kecil,
kita dapat menemukan solusinya dengan mudah dan cepat. Bagaimana kalu
instansiasi masalah berukuran besar ? jelas tidak mudah mengurutkan data dalam
jumlah banyak. Oleh karena itu, kita perlu menuliskan prosedur yang berisi
langkah-langkah pengurutan sehingga prosedur tersebut dapat dijalankan oleh
sebuah pemroses (Komputer,manusia,robot
dan sebagainya) untuk menghasilkan solusi setiap instansiasi masalah
pengurutan. Kita katakan langkah-langkah pengurutan penyelesai masalah disebut algoritma.
Algoritma
adalah urutan langkah-langkah untuk memecahkan suatu masalah.
Terdapat beberapa definisi lain dari
algoritma. Tetapi pada prinsipnya senada dengan definisi yang diungkapkan
diatas. Antara lain :
Algoritma
adalah deretan langkah-langkah komputasi yang mentransformasikan data masukan
menjadi keluaran.
Algoritma
adalah deretan intruksi yang jelas untuk memecahkan maslah, yaitu untuk
memperoleh keluaran yang diinginkan dari suatu masukan dalam jumlah waktu yang
terbatas.
Algoritma
adalah prosedur komputasi yang tedefinisi dengan baik yang menggunakan bebrapa
nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran.
Jadi, algoritma adalah deretan langkah komputasi yang mentranformasikan masukan
menjadi keluaran.
Mari kita tinjau kembali masalah
mengurutkan kartu. Jika kita mempunyai setumpuk kartu yang berjumlah n = 30 buah. Langkah-langkah pengurutan
30 buah kartu dapat kita tuliskan sebagai brikut (setiap langkah diberi nomor
urut 1,2,3, dan seterusnya):
1.
Cari kartu dengan nomor
terkecil
2.
Tempatkan kartu tersebut
pada posisi paling atas
3.
Cari kartu dengan nomor
terkecil berikutnya
4.
Tempatkan kartu tersebut
dibawah kartu pertama
5.
Cari kartu dengan nomor
terkecil berikutnya
6.
Tempatkan kartu tersebut dibawah
kartu kedua
...
................................................................
xx. Cari kartu
dengan nomor terkecil berikutnya
xxx. Tempatkan
kartu tersebut dibawah kartu ke-28
(tersisa
satu kartu lagi, tetapi tidak perlu diurutkan lagi)
Perhatikanlah
bahwa sebenarnya di dalam rangkaian langkah-langkah diatas terjadi pengulangan
2 langkah penting, yaitu (i) cari kartu dengan nomor terkecil, dan (ii)
tempatkan kartu tersebut pada posisi yang tepat. Kedua langkah utama ini
diulang berkali-kali sampai hanya tersisa sebanyak 1 kartu saja (berarti jumlah
pengulangan adalah sebanyak n = 50 -1
= 49 kali). Maka, secara garis besar kita dapat menuliskan langkah-langkah
mengurutkan n buah kartu sebagai berikut :
1.
Cari kartu dengan nomor
terkecil diantara kartu yang tersisa
2.
Tempatkan kartu tersebut
pada posisi yang tepat
3.
Ulangi kembali dari langkah
1 sebanyak n - 1 kali.
Langkah-langkah
yang kita tuliskan diatas itulah yang disebut algoritma. Dikatakan bahwa kita
telah menspesifikasikan algoritma pengurutan.
Dalam
kehidupan sehari-hari kita banyak menemukan langkah-langkah pekerjaan sesuatu
meskipun kita tidak menyebutnya sebagai algoritma : “Itu bukan algoritma, tapi
cara melakukan sesuatu”.
Contoh langkah-langkah pengerjaan di
dalam resep masakan :
1.
Tuangkan satu gelas santan
kedalam wajan
2.
Masukkan bumbu-bumbu yang
sudah dihaluskan, aduk hingga merata
3.
Tambahkan garam, merica,
dan kecap asin
4.
Masak dengan api sedang
sambil diaduk.
Meskipun kita tidak menyebutnya
langkah-langkah pengerjaan itu sebagai algoritma, tetapi dalam konteks ini
semua diatas adalah algoritma.
Sejarah Algoritma
Algoritma adalah jantung
ilmu komputer atau informatika. Banyak cabang dari ilmu komputer yang diacu
dalam terminologi algoritma, misalnya algoritma perutean (routing) pesan didalm jaringan komputer, algoritma brensenham untuk menggambar garis lurus
(bidang grafika komputer), algoritma Knuth-Morris-Prat untuk mencari suatu pola
didalm teks (bidang information retrievel), dan sebagainya.
Kata “algoritma” sendiri mempunyai sejarah yang cukup aneh.
Kata ini tidak muncul di dalm kamus Webster sampai akhir tahun 1957. Orang
hanya menemukan kata algorism yang
berarti proses menghitung dengan angka Arab. Anda dikatakan algorist jika anda menggunakan angka
Arab. Para ahli bahasa berusaha menemukan asal kata algorism ini namun hasilnya kurang memuaskan. Akhirnya para ahli
sejarah matematika menemukan asal mula
kata tersebut. Kata algorism berasal
dari nama penulis buku Arab yang terkenal, yaitu Abu Ja’far Muhammad ibnu Musa
Al-Khuwarizmi (al-Khuwarizmi dibaca orang Barat menjadi algorism). Al-Khuwarizmi menulis buku yang berjudul Kitab al jabar wal-muqabala, yang
artinya “Buku pemugaran dan pengurangan” (The
book of restoration and reduction). Dari judul buku ini kita juga memperoleh
akar kata “aljabar” (algebra).
Perubahan dari kata algorism menjadi algorithm
muncul karena kata algorism sering
dikelirukan dengan arithmetic,
sehingga akhiran –sm berubah menjadi
–thm. Karena perhitungan dengan angka
Arab sudah menjadi hal yang sudah biasa., maka lambat laun kata algorithm berangsur-angsur dipakai
sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna
aslinya. Dalam bahasa Indonesia, kata algorithm
diserap menjadi “algoritma”.