Anda di halaman 1dari 4

Pengantar Algoritma

Algoritma dan struktur data adalah dua konsep dasar yang sangat penting dalam
bidang pemrograman. Belajar memprogram pada dasarnya adalah belajar mendesain dan
menganalisis algoritma beserta memilih struktur data yang sesuai dengan permasalahan yang
akan dicari solusinya. Akan tetapi, di lingkungan akademis bidang ilmu informatika, belajar
memprogram seringkali langsung dikaitkan dengan belajar sebuah atau bahkan beberapa
bahasa pemrograman. Padahal, belajar memprogram dan belajar bahasa pemrograman adalah
dua hal yang berbeda bila dilihat dari segi obyek utama pembelajaran.

Belajar memprogram bisa dilakukan lebih awal, terlepas dari pengetahuan akan
sebuah bahasa pemrograman. Yang menjadi obyek pembelajaran adalah metode-metode
pemecahan masalah, merepresentasikan masalah tersebut dengan suatu struktur data dan
dengan kerangka-kerangka dasar sebuah program. Sedangkan ketika kita sudah mulai belajar
bahasa pemrograman, yang menjadi obyek utama pembelajaran adalah penguasaan perintah-
perintah (syntax) beserta seluruh aturan-aturan penulisan kode program dalam bahasa
pemrograman tersebut yang akan kita gunakan untuk mengimplementasikan algoritma kita.

Untuk menuliskan suatu algoritma, kita harus menggunakan alat / metode / notasi
bantu sebagai pengganti dari perintah-perintah (syntax) dari bahasa pemrograman, sehingga
tetap dijamin adanya kesepahaman antara pembuat algoritma dan pembaca algoritma.
Misalnya, dalam kuliah-kuliah pemrograman, pihak pengajar dan mahasiswa harus
menyepakati lebih awal notasi apa yang akan digunakan untuk mengkomunikasikan
algoritma-algoritma yang ada selama proses belajar mengajar.

Menuliskan algoritma hanya dengan kalimat-kalimat seperti bercerita atau dengan


gambar-gambar, bagan atau diagram tentu saja dapat digunakan dan ini merupakan metode
yang paling sederhana. Akan tetapi, metode ini sangat sering memicu munculnya persepsi
ambigu (bermakna ganda) atau bahkan kesalahan persepsi antara penulis algoritma dan
pembaca algoritma. Untuk menghindari hal tersebut, maka dibuatlah beberapa metode yang
lebih baku untuk menuliskan algoritma. Metode yang paling dikenal luas adalah dengan
menggunakan flow-chart diagram. Flow-chart diagram ini dilengkapi dengan bagan-bagan
standar yang merepresentasikan suatu aksi yang harus dilakukan atau suatu kondisi yang akan
ditemukan pada suatu saat.

Apa itu algoritma ?

Kata kunci definisi algoritma : urutan, langkah, masalah, solusi, logis, sistematis.

Algoritma bisa didefinisikan sebagai langkah-langkah yang logis dan sistematis untuk
menemukan solusi dari suatu masalah. Solusi dari suatu masalah dalam pengertian yang lebih
luas bisa diartikan sebagai tujuan akhir yang ingin dicapai dari suatu kondisi awal yang ada.

Kita bisa menemukan banyak sekali contoh-contoh algoritma dalam kehidupan


sehari-hari. Tanpa kita sadari, kita hidup dengan banyak sekali algoritma. Misalnya, ketika
kita ingin minum teh, maka terlebih dahulu kita harus pergi ke dapur untuk mengambil gelas
terlebih dahulu, lalu membuat air panas, mengambil teh, mengambil gula, dan seterusnya
sampai teh siap untuk diminum.
Apakah algoritma membuat teh akan sama untuk setiap orang ? Mungkin saja ada
seorang ibu rumah tangga yang sudah menyimpan air panas dalam termos, sehingga ketika
akan membuat teh, tidak akan ada lagi langkah membuat air panas dalam algoritmanya. Atau
mungkin saja ada seorang bapak yang lebih suka teh tawar, jadi dalam algoritma membuat
tehnya tidak akan terdapat langkah mengambil gula. Contoh tersebut menunjukkan bahwa
solusi atau tujuan akhir dari algoritma membuat teh ini akan sangat bergantung dari kondisi
awal yang ada ketika akan membuat teh (sudah ada air panas atau belum ?), dan kondisi akhir
yang diinginkan (membuat teh manis atau teh tawar ?).

Bila kita ingin mendaftar segala kemungkinan yang ada dan yang mungkin terjadi
dalam algoritma membuat teh tersebut, maka sangat memungkinkan kita akan memperoleh
algoritma-algoritma yang berbeda yang tak terhingga banyaknya.

Untuk itulah kita harus mengenal tiga komponen penting dalam algoritma, yaitu :

- Keadaan / kondisi / input awal yang diberikan (Initial State)


- Keadaan / kondisi / output akhir yang akan dituju (Final State)
- Batasan-batasan yang sudah diberikan atau yang mungkin baru akan ditemukan
selama penyusunan algoritma (Constraint and Assumption)

Ketiga komponen tersebut harus didefinisikan secara eksplisit, detail dan selengkap
mungkin, sehingga dapat menghasilkan algoritma yang valid dan tangguh. Khusus untuk
pendefinisian Constraint dan Assumption, penulis algoritma memang memiliki wewenang
untuk memberikan batasan-batasan dan asumsi baru dalam algoritmanya, akan tetapi harus
tetap dalam kerangka logis yang wajar (batasan dan asumsi yang beralasan).

Komputer lebih pintar dari manusia ?

Sebaiknya tidak usah berpikir panjang lebar untuk menjawab pertanyaan tersebut.
Karena memang tidak akan pernah ada jawaban yang pasti dan paling benar. Satu hal yang
dapat kita lakukan hanyalah membedakan apa yang dapat dilakukan komputer dan apa yang
dapat dilakukan oleh manusia. Komputer adalah sebuah mesin yang dapat melakukan
perhitungan dengan cepat dan dapat mengingat banyak hal dalam kurun waktu yang lama.
Jadi komputer memiliki kemampuan menghitung, mengingat dan menyimpan informasi jauh
di atas kemampuan rata-rata manusia. Akan tetapi, seluruh perhitungan dan proses
manajemen informasi yang harus dilakukan komputer adalah atas perintah manusia. Ide
solusi dari suatu permasalahan yang berbentuk sebuah algoritma diberikan oleh manusia,
untuk dieksekusi oleh komputer. Jadi mana yang lebih pintar ? Yang mampu menghitung
cepat dan mengingat banyak hal (Hardware), atau yang mampu memberikan ide solusi untuk
algoritma (Brainware) ? Terserah Anda ! Satu hal yang pasti adalah, keduanya harus bekerja
sama (Software) untuk benar-benar mencapai dan menemukan solusi yang diinginkan.
Notasi Algoritmik
Notasi algoritmik dianggap perlu untuk menjembatani keragaman dan kompleksitas bahasa
sehingga mahasiswa mampu melakukan ‘abstraksi’. Notasi ini akan merangkum semua
konsep pemrograman prosedural yang harus dapat dengan mudah dituliskan di atas kertas.
Notasi ini lebih berorientasi kepada detail design dibandingkan coding. Notasi ini hanyalah
alat untuk menuangkan rancangan secara prosedural yang selanjutnya dengan mudah dapat
ditranslasi menjadi salah satu program dalam bahasa tertentu. Suatu saat, jika pemrogram
menghadapi dunia profesional yang membutuhkan hasil yang siap pakai, notasi dapat
disesuaikan dan dibuat lebih dekat dengan bahasa pemrograman yang dipakai.

Contoh skema global teks algoritmik :

Judul
{judul bisa berupa sebuah program, function atau procedure}
{berikan spesifikasi algoritma, penjelasan singkat dan jelas tentang
algoritma yang ditulis}

kamus
{deklarasi variabel, definisi konstanta, definisi type, dan spesifikasi fungsi atau prosedur lain
yang digunakan}
x : integer {contoh deklarasi variabel}
L : real
T : array[1..10] of integer {contoh deklarasi array}
type point : <absis : integer, ordinat : integer> {contoh definisi
type}
P : point
constant phi : real = 3.14 {contoh definisi konstanta}
function Luas(r : integer) -> real {contoh spesifikasi fungsi}
{menghitung luas lingkaran dengan jari-jari r}

{contoh spesifikasi prosedur}


procedure TransAbsisPoint(input x : integer, input/output P : point)
{I.S : Point P terdefinisi
F.S : absis point P bertranslasi sejauh x
Proses : mentranslasi Point P sejauh x pada arah absisnya}

algoritma
{pada bagian ini, seluruh teks diluar tanda kurung kurawal adalah
teks algoritmik}
x  5 {contoh notasi pengisian nilai ke variabel}
read(T[1]) {contoh input dari user dan akses elemen array}
write(x) {contoh memberikan output untuk user}
x  x + T[1] {contoh operasi aritmetika}
P.absis  x {contoh akses komponen type bentukan}

if x<3 then {contoh notasi kondisional}


P.ordinat  6
else
P.ordinat  8
endif

for x=1 to 5 do {contoh notasi for}


T[x]  x
endfor
{notasi while … do dan repeat … until tetap menggunakan skema biasa
yang sudah dikenal, hanya saja while dilengkapi dengan endwhile}

{contoh pemanggilan fungsi dan prosedur}


L  Luas(x)
TransAbsispoint(x,P)

Anda mungkin juga menyukai