Kamis, 06 Desember 2012

algoritma



BUBBLE SORT
algoritma
flowchart + program

Pengurutan model ini mengambil ide dari gelembung air, yaitu mengapungkan elemen yang bernilai kecil dari bawah ke atas. Proses pengapungan dilakukan dengan pertukaran elemen-elemen tabel.

Apabila kita menginginkan array terurut menaik, maka elemen array yang berharga paling kecil “diapungkan” artinya diangkat ke “atas” (atau ke ujung kiri array) melalui proses pretukaran. Proses pengapungkan ini dilakukan sebanyak n-1 langkah (satu langkah disebut satu kali pass) dengan n adalah ukuran array.


ALGORITMA

1.       Tentukan Jumlah Bilangan yang akan di inputkan (contoh  : 3)
2.       Inputkan bilangan 1,2,3
3.       Bandingkan bilangan 1 >/< bilangan 2
4.       Jika benar pindahkan bilangan 2 ke bilangan sisip
5.       Pindahkan bilangan 1 ke bilangan 2
6.       Pindahkan bilangan sisip ke bilangan 1
7.       Jika tidak lanjutkan proses
8.       Bandingkan bilangan 2 >/< bilangan 3
9.       Jika benar pindahkan bilangan 3 ke bilangan sisip
10.   Pindahkan bilangan 2 ke bilangan 3
11.   Pindahkan bilangan  sisip ke bilangan 2
12.   Jika tidak lanjutkan proses
13.   Ulangi langkah no 3 hingga hasil sesuai yang diinginkan

flowchart
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd0mRP7X7Gop3tO9oXbn1Mi7WsxILW-FmtP5VydT2oBs-vvmN1XKbwGM-UFErXg_zyZK-A23m7dJCno-4gwQdWFIcP8e7wjT8fyFZGukZT8i4wVO-4F3Y_lo2Uny-6EoHzQeiB4P-7XzU/s400/Struktur+Data.jpg

program  :
#include <iostream.h>
main ()
int jmlh,i,n,bils,jwb;
int bil[50];
cout <<endl;
cout <<"                --------------------------------------------"<<endl;
cout <<"                              Program Sorting               "<<endl;
cout <<"                --------------------------------------------"<<endl;
cout <<endl;
cout <<"Inputkan Jumlah Bilangan : ";
cin  >>jmlh;
cout <<endl;
for (i=0;i<jmlh;i++)
cout <<"Inputkan Bilangan ke "<<i+1<<"   : ";
cin  >>bil[i];
cout <<endl;
cout <<"1. Ascanding  (Kecil ke Besar)"<<endl;
cout <<"2. Descanding (Besar ke Kecil)"<<endl;
cout <<"Jenis Sorting apa yang anda inginkan ? : ";
cin  >>jwb;
if (jwb==1)
for (i=0;i<50;i++)
for (n=0;n<jmlh-1;n++)
if (bil[n]>bil[n+1])
bils     = bil[n+1] ;
bil[n+1] = bil[n]   ;
bil[n]   = bils     ;

else
continue;
else
for (i=0;i<50;i++)
for (n=0;n<jmlh-1;n++)
if (bil[n]<bil[n+1])
bils     = bil[n+1] ;
bil[n+1] = bil[n]   ;
bil[n]   = bils     ;

else
continue;
cout <<endl;
cout <<"Sortingnya Adalah : ";
for (i=0;i<jmlh;i++)
cout <<bil[i]<<" ";
return 0;}


ALGORITMA PENCARIAN BINER (BINARY SEARCH)


Pencarian Biner (Binary Search) pada array yang sudah terurut


Pencarian Biner (Binary Search) dilakukan untuk :
   memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya.
   Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data tidak ditemukan).
   Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut, misalkan terurut menaik.

ALGORITMA  

Kamus
      Const N : integer = 8  { misalkan jumlah elemen array maksimum = 8 }
      Type A = array [ 1 ..... N ] of integer
      Cari, BatasAtas, BatasBawah, Tengah : Integer
      Ketemu : boolean
ALGORITMA
         Input (cari) { meminta nilai data yang akan dicari}
         BatasAtas     ¬  1 { indeks array dimulai dari 1 }
         BatasBawah     ¬   N    
         Ketemu   ¬  False
         While (BatasAtas < BatasBawah) and (not ketemu) do
               Tengah ¬   (BatasAtas  + BatasBawah) div 2
               If A [Tengah] = cari then
                  Ketemu ¬ true
                           Else
                                 If ( A [Tengah]  < cari ) then { cari di bagian kanan }
                                       BatasAtas ¬ Tengah + 1
                                 Else
                                       BatasBawah ¬ Tengah – 1 { cari di bagian kiri }
                                 Endif
                           Endif
         EndWhile
         If (ketemu) then
                     Output ( ‘Data berada di index nomor’, Tengah )
         Else     Output ( ‘Data tidak ditemukan’ )
         Endit

Contoh Nilai-Nilai data yang sudah terurut :

A
2
5
8
12
15
25
37
57

1
2
3
3
5
6
7
8

Kasus 1  : cari = 12

Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
                           A [Tengah] = A [4] = 12, berarti loop pertama data langsung ditemukan

Kasus 2  : cari = 15

Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 +  8) div 2 = 4
                                    A [Tengah] = A [4] = 12 < cari = 15, berarti BatasAtas = Tengah + 1 = 4 + 1 = 5
Loop kedua :     Tengah = (BatasAtas + BatasBawah) div 2 = (5 +  8) div 2 = 6
                                    A [Tengah] = A [6] = 25 > cari = 15, berarti BatasBawah = Tengah - 1 = 6 - 1 = 5
Loop ketiga :     Tengah = (BatasAtas + BatasBawah) div 2 = (5 +  5) div 2 = 5
                                    A [Tengah] = A [5] = 15, berarti  setelah loop ketiga, data ditemukan

Kasus 3  : cari = 10

Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 +  8) div 2 = 4
                                    A [Tengah] = A [4] = 12 > cari = 10, berarti BatasBawah = Tengah - 1 = 4 - 1 = 3
Loop kedua :     Tengah = (BatasAtas + BatasBawah) div 2 = (1 +  3) div 2 = 2
                                    A [Tengah] = A [2] = 5 < cari = 10, berarti BatasAtas = Tengah + 1 = 2 + 1 = 3
Loop ketiga :     Tengah = (BatasAtas + BatasBawah) div 2 = (3 +  3) div 2 = 3
                                    A [Tengah] = A [3] = 8, berarti  setelah loop ketiga, data tidak ditemukan

Untuk jumlah data sebanyak n, maka proses pembandingan maksimal sebanyak ( log n ) kali. Untuk contoh di atas, jumlah data 8, maka proses pembandingan maksimal sebanyak 3 kali.
Matriks transpose 
yaitu matriks yang diperoleh dari memindahkan elemen-elemen baris menjadi elemen pada kolom atau sebaliknya.
Transpose matriks A dilambangkan dengan AT
Contoh: A3×2 =  http://kaaeka.files.wordpress.com/2011/07/3-x-2.jpg?w=46&h=82&h=82   , maka AT  =http://kaaeka.files.wordpress.com/2011/07/2-x-3.jpg?w=79&h=66&h=66   , perhatikan bahwa ordo dari A adalah 2 x 3.
Algoritma Transpose Matrik
  1. Masukkan ordo matrik(n)
  2. Input matrik di dalam array [0][0] sampai dengan array[n][n]
  3. ditampilkan matrik tersebut
  4. menukar matrik[i][j] menjadi matrik[j][i]
  5. ditampilkan hasil matrik tranpose
Deklarasi :
a[10][10]         : int
m,n,i,j              : int
Deskripsi :
Baca (m)
Baca (n)
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{Tulis a[i][j]Transpose :for(i=0;i<m;i++){for(j=0;j<n;j++)
{
Transpose a[j][i]


 [/sourcecode]
01
#include <cstdlib>

02
#include <iostream>
03


04
using namespace std;
05


06
int main(int argc, char *argv[])
07
{

08

09
int a[10][10],m,n,i,j;

10
cout<<"Masukkan Jumlah Baris: ";
11
cin>>m;

12
cout<<"Masukkan Jumlah kolom: ";
13
cin>>n;

14

15
cout<<endl<<"Elemen matriks: "<<endl;

16
for(i=0;i<m;i++)
17
{

18
for(j=0;j<n;j++)
19
{

20
cout<<"masukkan elemen a: "<<i+1<<j+1<<": ";
21
cin>>a[i][j];

22
}
23
}

24
cout<<endl<<"Matriks: "<<endl<<endl;
25
for(i=0;i<m;i++)

26
{
27
for(j=0;j<n;j++)

28
{
29
cout<<a[i][j]<<" ";

30
}
31
cout<<endl<<endl;

32
}
33
cout<<endl<<"Transpose Matriks: "<<endl<<endl;

34
for(i=0;i<m;i++)
35
{

36
for(j=0;j<n;j++)
37
{

38
cout<<a[j][i]<<" ";
39
}

40
cout<<endl<<endl;
41
}

42

43
system("PAUSE");



44
return EXIT_SUCCESS;
45
}

Dari judulnya saja bisa ditebak bahwa KuraKura akan membahas tentang 'algortima swap' atau tata cara untuk menukar nilai suatu variabel. Tapi algoritma yang akan saya bahas ini hanya dapat dilakukan pada variabel bilangan (real, integer dkk) karena teknik yang digunakan adalah operasi aritmatik. Dan algoritma ini sering keluar pada soal olimpiade komputer tingkat OSK ataupun OSP. Berikut penjelasannya

Algoritma Swap yang dilakukan dengan operasi aritmatik hanya memerlukan operator penjumlahan dan pengurangan. berikut contoh potongan programmnya

a:=10;
b:=5;
a:=b-a;
b:=b-a;
a:=a+b;
nah, a=b-a kan -5
terus b=b-a --> berarti b=5-(-5)= 10
habis itu a=(-5)+10 = 5

Tidak ada komentar:

Posting Komentar