Rabu, 05 November 2014


PENGERTIAN ALGORITMA DAN PEMROGRAMAN

Menurut kamus besar bahasa indonesia terbitan balai pustaka tahun 1988, “algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah”.
Menurut Microsoft Book-shelf, “algoritma adalah urutan langkah berhingga untuk memecahkan masalah logika atau matematika”.
Berdasarkan defenisi-defenisi tersebut maka dapat disimpulkan, “algoritma adalah urutan langkah-langkah logis yang berhingga yang digunakan untuk memecahkan masalah”.

Langkah-langkah di dalam algoritma harus logis, ini berarti hasil dari urutan langkah-langkah tersebut harus dapat ditentukan, benar atau salah. Langkah-langkah yang tidak benar dapat memberikan hasil yang salah.

Menurut Donald E. Knuth dalam bukunya yang berjudul “the art of computer programming”, algoritma harus mempunyai lima ciri penting:
  1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah. Suatu program yang tidak pernah berhenti adalah program yang berisi algoritma yang salah.
  2. Setiap langkah harus didefenisikan dengan tepat dan tidak berarti-dua (ambigu).
  3. Algoritma memiliki nol atau lebih masukan (input). Masukan adalah besaran yang diberikan kepada algoritma sebelum algoritma mulai bekerja.
  4. Algoritma mempunyai nol atau lebih keluaran (output). Keluaran ialah besaran yang memiliki hubungan dengan masukan.
  5. Algoritma harus sangkil (efektif). Setiap langkah harus sederhana sehingga dapat dikerjakan dalam sejumlah waktu yang masuk akal.

Algoritma adalah jantung ilmu komputer atau informatika. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun demikian, jangan beranggapan algoritma selalu identik dengan ilmu komputer saja. Dalam kehidupan sehari-haripun banyak proses yang digambarkan dalam suatu algoritma.
Realisasi algoritma dalam bahasa pemrograman disebut dengan program. Sedangkan pemrograman adalah kegiatan mengkonversi algoritma ke dalam bahasa pemrograman. Bahasa pemrograman atau bahasa komputer adalah teknik komunikasi standar untuk memerintah komputer. Bahasa pemrograman adalah suatu set aturan sintaks dan semantik yang dipakai untuk mendefinisikan program komputer. Suatu bahasa memungkinkan seorang programmer secara persis menentukan data yang mana akan diolah oleh komputer, bagaimana data ini akan disimpan/diteruskan, dan langkah apa secara persis yang akan diambil dalam berbagai situasi.

NOTASI ALGORITMA

Notasi algoritma merupakan hal dasar yang harus diketahui oleh setiap orang yang ingin membuat suatu pogram, karena dalam notasi algoritma inilah terdapat instruksi atau langkah-langkah suatu program. Notasi algoritma bukan notasi bahasa pemrograman, karena itu program dalam notasi algoritma tidak dapat dijalankan oleh komputer. Notasi algoritma bukan notasi bahasa pemrograman, sehingga siapapun dapat membuat notasi algoritma yang berbeda.

Ciri notasi algoritma yang baik yaitu dapat diterjemahkan ke dalam berbagai bahasa pemrograman. Hal yang penting mengenai notasi tersebut adalah mudah dibaca dan dimengerti. Di bawah ini ada 3 notasi yang umum digunakan dalam penulisan algoritma, yaitu :
  1. Notasi Alami
  2. Flowchart / Diagram Alur
  3. Pseudocode

a.      Notasi Alami
Penulisan algoritma dengan notasi alami adalah dengan cara menuliskan instruksi-instuksi yang harus dilaksanakan untuk memecahkan masalah dalam bentuk untaian kalimat deskriptif.
Dengan notasi bergaya kalimat ini, deskripsi setiap langkah dijelaskan dengan bahasa yang gamblang. Proses diawali dengan kata kerja seperti ‘baca’, ‘hitung’, ‘bagi’, ‘ganti’, dan sebagainya, sedangkan pernyataan kondisional dinyatakan dengan ‘jika…maka…’. Notasi ini bagus untuk algoritma yang pendek, namun untuk masalah yang algoritmanya besar, notasi ini jelas tidak efisien. Selain itu, pengkonversian notasi algoritma ke notasi bahasa pemrograman cenderung relative sukar.

Contoh:
Algoritma_Menghitung_Luas_Persegi_Panjang
Langkah 1: Baca nilai panjang.
Langkah 2: Baca nilai lebar.
Langkah 3: Kalikan nilai panjang dengan nilai lebar dan berikan nilainya ke hasil.
Langkah 4: Tampilkan nilai hasil.

b.      Flowchart / Diagram Alir
Flowchart adalah gambaran dalam bentuk diagram alir dari algoritma-algoritma dalam suatu program, yang menyatakan arah alur program tersebut. Diagram alur lebih menggambarkan aliran instruksi di dalam program secara visual dibanding memperlihatkan struktur program. Notasi diagram alur lebih cocok digunakan untuk masalah yang kecil, untuk masalah yang besar tidak cocok digunakan karena membutuhkan berlembar halaman kertas. Selain itu, pengkonversian notasi algoritma ke bahasa pemrograman cenderung relatif sukar.

Berikut adalah beberapa simbol yang digunakan dalam menggambar suatu flowchart :
SIMBOL
NAMA
FUNGSI
TERMINATOR
Permulaan/akhir program
GARIS ALIR
(FLOW LINE)
Arah aliran program
PREPARATION
Proses inisialisasi/pemberian harga awal
PROSES
Proses perhitungan/proses pengolahan data
INPUT/OUTPUT DATA
Proses input/output data, parameter, informasi
PREDEFINED PROCESS
(SUB PROGRAM)
Permulaan sub program/proses menjalankan sub program
DECISION
Perbandingan pernyataan, penyeleksian data yang memberikan pilihan untuk langkah selanjutnya
ON PAGE CONNECTOR
Penghubung bagian-bagian flowchart yang berada pada satu halaman
OFF PAGE CONNECTOR
Penghubung bagian-bagian flowchart yang berada pada halaman berbeda











Contoh Flowchart:
Flowchart_Menghitung_Luas_Persegi_Panjang

 

c.       Pseudocode
Pseudo-code adalah notasi yang menyerupai notasi bahasa pemrograman tingkat tinggi, khususnya Pascal dan C. Bahasa pemrograman umumnya mempunyai notasi yang hampir mirip untuk beberapa instruksi seperti notasi if-then-else, while-do, repeat-until, read, write, dan sebagainya. Namun tidak seperti bahasa pemrograman yang direpotkan dengan tanda titik koma, indeks, format keluaran, kata-kata khusus, dan sebagainya, sembarang versi Pseudocode dapat diterima asalkan perintahnya tidak membingungkan pembaca.

Keuntungan menggunakan notasi Pseudocode adalah kemudahan mentranslasi ke notasi bahasa pemrograman, karena terdapat korespodensi antara setiap Pseudocode dengan notasi bahasa pemrograman. Sehingga Pseudocode cocok untuk algoritma yang rumit.


Contoh notasi pseudocode adalah sebagai berikut:
Algoritma_Menghitung_Luas_Persegi_Panjang
DEKLARASI:
            Panjang : integer
            Lebar : integer
            Luas : integer
DESKRIPSI:
            read (Panjang)
            read (Lebar)
            Luas          Panjang * Lebar

            write (Luas)

Aturan penulisan algoritma dalam notasi pseudocode.
Dalam pseudocode algoritma terbagi atas 3 bagian, yaitu :
  1. Judul Algoritma
Judul algoritma adalah bagian yang terdiri atas nama algoritma dan penjelasan (spesifikasi) tentang algoritma tersebut. Nama algoritma sebaiknya singkat namun cukup menggambarkan apa yang dilakukan oleh algoritma tersebut.
Contoh judul algoritma:
      Algoritma LUAS_PERSEGIPANJANG
{ Menghitung luas persegi panjang. Algoritma menerima masukan panjang dan lebar, menghitung luas, lalu mencetak luas persegi panjang ke piranti keluaran }
Keterangan:
Algoritma LUAS_PERSEGIPANJANG merupakan judul algoritma, sedangkan yang di dalama kurung kurawal ({ }) merupakan spesifikasi atau penjelasan singkat tentang algoritma luas persegi panjang.
  1. Deklarasi
Bagian deklarasai berguna untuk mendefenisikan semua nama yang dipakai dalam algoritma. Nama tersebut dapat berupa nama tetapan, nama peubah (variable), nama tipe, nama prosedur, dan nama fungsi.
Contoh deklarasi:
      DEKLARASI
{ nama peubah (variable) }
p       : integer           { tempat menampung data panjang }
l        : integer           { tempat menampung data lebar }
L       : integer           { tempat menampung data hasil penghitungan luas }
  1. Deskripsi
Deskripsi merupakan bagian inti dari suatu algoritma. Bagian ini berisi uraian langkah-langkah penyelesaian masalah. Langkah-langkah ini dituliskan dalam notasi yang akan di jelaskan pada bab selanjutnya. Misalnya notasi write digunakan untuk mencetak data/informasi, notasi read digunakan untuk membaca data, dan lain sebagainya. Setiap langkah algoritma dibaca dari “atas” ke “bawah”. Urutan penulisan menentukan urutan pelaksanaan perintah.
Contoh deskripsi:
      DESKRIPSI
read (Panjang)
read (Lebar)
Luas         Panjang * Lebar

write (Luas)
                 
      Keterangan:

      Lambang            berarti penugasan atau penginputan

PENGERTIAN BUBLE SORT

Pengertian/Konsep Buble Sort
Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai pada pengurutan gelembung.
Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat.

Kelebihan Bubble Sort
  • Metode Buble Sort merupakan metode yang paling simpel
  • Metode Buble Sort mudah dipahami algoritmanya
Kelemahan Bubble Sort
Meskipun simpel metode Bubble sort  merupakan metode pengurutanyang paling tidak efisien. Kelemahan buble sort adalah pada saat mengurutkan data yang sangat besar akan mengalami kelambatan luar biasa, atau dengan kata lain kinerja memburuk cukup signifikan ketika data yang diolah jika  data cukup banyak. Kelemahan lain adalah jumlah pengulangan akan tetap sama jumlahnya walaupun data sesungguhnya sudah cukup terurut. Hal ini disebabkan setiap data dibandingkan dengan setiap data yang lain untuk menentukan posisinya.

Algoritma Bubble Sort
  1. Membandingkan data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika tidak sesuai maka tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data ke-i). Apa maksudnya tidak sesuai? Jika kita menginginkan algoritme menghasilkan data dengan urutan ascending (A-Z) kondisi tidak sesuai adalah data ke-i > data ke-i+1, dan sebaliknya untuk urutan descending (A-Z).
  2. Membandingkan data ke-(i+1) dengan data ke-(i+2). Kita melakukan pembandingan ini sampai data terakhir. Contoh: 1 dgn 2; 2 dgn 3; 3 dgn 4; 4 dgn 5 … ; n-1 dgn n.
  3. Selesai satu iterasi, adalah jika kita sudah selesai membandingkan antara (n-1) dgn n. Setelah selesai satu iterasi kita lanjutkan lagi iterasi berikutnya sesuai dengan aturan ke-1. mulai dari data ke-1 dgn data ke-2, dst.
  4. Proses akan berhenti jika tidak ada pertukaran dalam satu iterasi.
Contoh Kasus Bubble Sort
Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan kita ingin mengurutkan data ini (ascending) dengan menggunakan bubble sort. Berikut ini adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3, 2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2, 6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai

Analisis Algoritma Bubble Sort
Tujuan dari analisis  algoritma adalah untuk  mengetahui efisiensi dari algoritma. Dalam hal ini dilakukan pembandingan antara dua atau lebih algoritma pengurutan.Tahap analisis adalah melakukan pengecekan program untuk memastikan bahwa program telah benar secara logika maupun sintak (tahap tracing atau debugging). Tahap selanjutnya yaitu menjalankan program untuk mengetahui running time atau waktu komputasi dalam hal ini
termasuk jumlah langkah. Data uji yang digunakan adalah data yang tidak terurut atau data random, terurut membesar/, dan terurut mengecil.
Salah satu cara untuk menganalisa kecepatan algoritma sorting saat running time adalah dengan menggunakan notasi Big O. Algoritma  sorting mempunyai kompleksitas waktu terbaik, terburuk, dan rata-rata.  Dengan notasi Big O, kita dapat mengoptimalkan penggunaan algoritma sorting. Sebagai contoh, untuk kasus  dimana jumlah masukan untuk suatu pengurutan banyak, lebih baik digunakan algoritma sorting seperti quick sort, merge sort, atau heap sortkarena kompleksitas waktu untuk kasuk terburuk  adalah  O(n log n). Hal ini tentu akan sangatberbeda jika kita menggunakan algoritma sorting insertion sort atau bubble sort dimana waktu yang dibutuhkan untuk melakukan pencarian akan sangat lama. Hal ini disebabkan kompleksitas waktu terburuk untuk algoritma sorting tersebut dengan jumlah masukan yang banyak adalah O(n
2).
Dari grafik dibawah dapat diketahui buble sort adalah metode yang paling lambat dari yang lambat-lambat..heheheh..

Description: Analisis Algoritma Buble Sort
Grafik Metode Pengurutan berode O(n2)


Implementasi Bubble Sort dalam Bahasa C/C++
Berikut ini listing program  atau kode program metode bubble sort dalam bahasa C/C++

#include<stdio.h>
void bubbleSort(int data[], int n){
int i, j=0, temp, flag = 1;
while(flag){
flag = 0;
for(i=0; i<n; i++){
if(data[i]>data[i+1]){
temp = data[i];
data[i] = data[i+1];
data[i+1] = temp;
flag++;
}
}
}
}
main(){
int data[1000];
int n, i;
printf("________.:: BUBBLE SORT :.________\n");
printf("Enter numbers of data(maks 1000): ");
scanf("%d", &n);
printf("Data (separate by space): ");
for(i=0; i<n; i++)
scanf("%d", &data[i]);
bubbleSort(data, n);
printf("\nOutput after sort:\n");
for(i=0; i<n; i++)
printf("%d ", data[i]);
getch();
return 0;}