Rabu, 22 Desember 2010

Algoritma Pemrograman 2 (Rangkuman tentang searching)


Searching
Pencarian (searching) merupakan proses funda mental dalam pengelolaan data. Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan data yang bertipe sama (baik bertipe dasar atau bertipe bentukan). Search algoritma adalah algoritm, yang menerima argument a dan mencoba untuk mencari record yang mana key-nya adalah Algoritma bisa mengembalikan nilai record, atau pointer ke record.
·         Dalam kehidupan sehari-hari kita sering melakuakan pecarian (searching) data dari sejumlah data yang da untukmenemukan informasi yang dibutuhkan.
·         Dalam chapter ini akan dibahas metode pencarian data dalam suatu array, baik pada array yang sudah terurut maupun belum terurut.
·         Metode pencaian yang akan digunakan adalah :
1.    Sequential Search
2.    Binary Search

1.    Sequential Search
·         Metode sequential search atau disebut pencarian beruntun dapat digunakan untuk melakukan pencarian data baik pada aray yang sudah terurut maupun yang belum terurut.
Proses metode sequential search
·         Proses yang  terjadi pada metode pencarian ini adalah sebagai berikut :
1.    Membaca array data
2.    Menentukan data yang dicari
3.    Ulai dari data pertama sampai dengan data terakhir, data yang dicari dibandingkan dengan masing-masing data dalam array.
a.    Jika data yang dicari tidak ditemukan maka semua data aau elemen array dibandingkan sampai selesai
b.    Jika data yang dicari ditemukan makan perbandingan akan dihentikan.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.    

GAMBARAN KERJA
Pada program diatas jumlah data yang akan diolah berjumlah 10 data dan disimpan kedalam array A[10] yang bejenis integer, array index[10] digunakan untuk mencatat index pada array A dimana data ditemukan daya tampung array sama dengan array A karena ada kemungkinan data yang akan dicari adalah semua data yang ada dalam array A. sedangkan variable I digunakan sebagai counter dalam proses perulangan, variable j digunakan sebagai counter untuk menghitung jumlah data yang ditemukan dan variable k digunakan untuk menyimpan data yang akan dicari.
Proses pertama adalah memasukkan data-data yang akan diolah ke dalam array A dan data yang akan dicari ke dalam variable K. setelah itu akan dilakukan perulangan sebanyak data yang ada dalam array A untuk mencari apakah ada data dalam variable K didalam array A, jika ada maka counter j akan mencatat jumlahnya dan array index akan mencatat pada index ke berapa data tersebut ditemukan. Setelah proses perulangan selesai, tampilkanlah hasil yang terdapat pada variable j dan array index ke layer.
Penggunaan Sentinel (Penjaga)
Perhatikan array data berikutini:
·      Terdapat 6 buah data dalam array (dariindeks 0 s/d 5) danterdapat 1 indeks array tambahan (indekske 6) yang belumberisi data (disebut sentinel)
·      Array padaindekske 6 bergunauntukmenjaga agar indeks data beradapadaindeks 0 s/d 5 saja. Bilapencarian data sudahmencapai array indeks yang ke-6 makaberarti data TIDAK ADA, sedangkanjikapencariantidakmencapaiindeks ke-6, maka data ADA.

2.    Binary Search

·         Sebuah algoritma pencarian biner adalah sebuah teknik untuk menemukan nilai tertentu dalam sebuahl arik (array) linear, dengan menghilangkan setengah data pada setiap langkah, dipakai secara luas tetapi tidak secara ekslusif dalam ilmu komputer.
·         Sebuah pencarian biner mencari nilai tengah (median), melakukan sebuah pembandingan untuk menentukan apakah nilai yang dicari ada sebelum atau sesudahnya, kemudian mencari setengah sisanya dengan cara yang sama.

Contoh kasus:
Ada 12 data 11 13 15 18 23 27 29 31 54 58 59 61
Data yang akan dicari : 13
·         Proses 1
11 13 15 18 23 27 29 31 54 58 59 61 ß lebih besar dengan data yg akan dicari , lakukan pembagian data
·         Proses 2
11 13 15 18 23 27ß lebih besar dari data yang dicari, bagi 2   29 31 54 58 59 61
·         Proses 3
11 13 15ß lebih besar dari data yang dicari, bagi 2   18 23 27   29 31 54 58 59 61
·         Proses 4
11ßlebih kecil dari data yang dicari, abaikan saja 13 15ß lebih besar dari data yang dicari, bagi 2   18 23 27   29 31 54 58 59 61
·         Proses 5
1113ßsesuai data yang dicari15 ßlebih besar dari data yang dicari 18 23 27   29 31 54 58 59 61

Dari proses diatas dapat disimpulkan bahwa binary search akan membagi-bagi sekumpulan data menjadi 2 bagian sampai data yang dicari ditemukan.
Sequential Search
#include <stdio.h>
int main()
{
            //deklarasivariabel
            int A[10],index[10], i,j,k;
            //proses penginputan data
            for(i=0;i<10;i++)
            {
                        printf("Data ke-%d:",i+1);
                        scanf("%d",&A[i]);
            }
//memasukkan data yang akandicarikedalam K
            printf("Masukkan data yang akanandacari:");
            scanf("%d",&k);
            //proses pencarian data
            j=0;
            for (i=0;i<10;i++)
            {
                        if(A[i]==k)
                        {
                                    index[j]=i;
                                    j++;
                        }
            }
            //jika data ditemukandalam array
            if (j>0)
            {
                        printf("Data %d yang dicariada %d buah\n",k,j);
                        printf("Data tersebutterdapatdalam index ke :");
                        for(i=0;i<j;i++)
                        {
                                    printf(" %d ",index[i]);
                        }
                        printf("\n");
            }
            //jikatidakditemukan
            else
            {
                        printf("Data tidakditemukandalam array\n");
            }
getch();
return 1;
}

Binary Search

#include<stdio.h>
int main()
{
                //deklarasivariabel
                int A[10], i,j,k,tkr,top,bottom,middle,tm;
                //proses penginputan data
                for(i=0;i<10;i++)
                {
                                printf("Data ke-%d:",i+1);
                                scanf("%d",&A[i]);
                }
                printf("Masukkan data yang akanandacari:");
                scanf("%d",&k);
                //proses pengurutan data
               
                for(i=0;i<10;i++)
                {
                                for(j=i+1;j<10;j++)
                                {
                                                if (A[i]>A[j])
                                                {
                                                                tkr=A[i];
                                                                A[i]=A[j];
                                                                A[j]=tkr;
                                                }
                                }
                }
                //proses pencarian data
                tm=0;
                top=9;
                bottom=0;
                while(top>=bottom)
                {
                                middle=(top+bottom)/2;
                                if(A[middle]==k)
                                {
                                                tm++;
                                }
                                if(A[middle]<k)
                                {
                                                bottom=middle+1;
                                }
                                else
                                {
                                                top=middle-1;
                                }
                }
                if (tm>0)
                {
                printf("Data %d yang dicariadadalam array\n",k);
                }
                //jikatidakditemukan
                else
                {
                printf("Data tidakditemukandalam array\n");
               
                }
getch();
return 1;
}

Algoritma Pemrograman 2 (String)


Irma.c
#include "irma.h"

voidCetakArray(char A[225],int n){
                int j;
                for(j=0;j<n;j++){
                                A[j]=tolower(A[j]);
                                printf("%c",A[j]);
                }
}

voidswaping(char A[225], int b, inttmp){
                tmp=A[b];
                A[b]=A[b-1];
                A[b-1]=tmp;
}

void sorting(char A[225],int n){
                int a, b, tmp;
                                for(a=0;a<(n-1);a++){
                                                for (b=(n-1);b>=(a+1);b--){
                                                                if(A[b]<A[b-1]){
                                                                                swaping(A,b,tmp);
                                                                }
                                                }
                                }
                                printf("\n");
}

Irma.h
#include<stdio.h>
#include<string.h>

voidswaping();
voidCetakArray();
void sorting();

main.c
#include "irma.h"

int main(){
                char string[30];
                printf("masukkan string: ");
                gets(string);
                intpanjang=strlen(string);
                printf("sebelumdiurutkan: \n");
                CetakArray(string,panjang);
                sorting(string,panjang);
                printf("setelahdiurutkan: \n");
                CetakArray(string,panjang);
                getch();
                return 1;
}

Algoritma Pemrograman 2 (karakter)


Irma.c
#include "irma.h"

voidInputArray(char A[],int n){
                int i;
                                for(i=0;i<n;i++){
                                                printf("A[%d]= ",i);
                                                scanf("%s",&A[i]);
                                }
                                printf("daftarhurufasli: \n");
}

voidCetakArray(char A[],int n){
                int j;
                for(j=0;j<n;j++){
                                A[j]=tolower(A[j]);
                                printf("A[%d]= %c \n",j,A[j]);
                }
}

voidtukar(char A[], int b, inttmp){
                tmp=A[b];
                A[b]=A[b-1];
                A[b-1]=tmp;
}

voidBubleSort(char A[],int n){
                int a, b, tmp;
                                for(a=0;a<(n-1);a++){
                                                for (b=(n-1);b>=(a+1);b--){
                                                                if(A[b]<A[b-1]){
                                                                                tukar(A,b,tmp);
                                                                }
                                                }
                                }
                                printf("\n");
}

Irma.h
#include <stdio.h>

voidtukar();
voidInputArray();
voidCetakArray();
voidBubleSort();

main.c
#include "irma.h"

int main(){
                int N;
                printf("masukkanberapabanyakhuruf: ");
                scanf("%d",&N);
                char c[N];
                InputArray(c,N);
                CetakArray(c,N);
                BubleSort(c,N);
                printf("setelahpengurutan: \n");
                CetakArray(c,N);
                getch();
                return 1;
}