Showing posts with label Algoritma. Show all posts
Algoritma - Sisipan (Insertion)
| Contoh Menyisip |
Pada kesempatan kali ini saya ingin membagikan cerita mengenai Algoritma Sisipan. Jadi disini saya membagikan pandangan dan pemahaman saya tentang algoritma ini. Jadi ceritanya ini algoritma yang bakal kita gunakan untuk mengurutkan data dari kecil kebesar namun tidak menggunakan Sorting. Gak tau kenapa, saya kurang suka pake Sorting. Agak ribet dan gak santai. Hahahaha...
Jadi konsepnya begini, ketika sebuah nilai dimasukkan ke dalam array, maka akan di cek dimana posisi dari nilai tersebut seharusnya akan diletakan. Setelah posisi dari nilai tersebut di temukan, maka program akan menggeser nilai-nilai berikutnya agar ada tempat untuk nilai yang baru tanpa adanya data yang hilang. Syarat bisa terjadinya sisipan ini adalah nilai harus terurut, karena dengan terurutnya data, akan mudah kita menemukan tempat untuk menyisip. Jadi konsep sisipan ini digunakan untuk melakukan pengurutan (Lebih tepatnya mungkin :D).
Agar dapat sedikit gambaran, silahkan lihat ilustrasi berikut:
Pertama-tama array telah diisi seperti diatas. Kemudian datang nilai baru yaitu 9. Maka 9 akan mencari tempat nilai ini seharusnya diletakkan.
Nilai 9 telah menemukan posisi dia seharusnya, sehingga nilai-nilai setelahnya harus digeser kebawah agar ada ruang untuk nilai 9.
Nilai-nilai telah digeser sehingga nilai 9 bisa masuk tanpa merusak nilai yang telah ada.
Nilai 9 telah masuk kedalam array.
Adapun algoritma yang saya gunakan untuk melakukan aktivitas diatas adalah sebagai berikut
Asumsi:
a[100];
na=jumlah data dalam array;
x=data baru;
//insert
j = na;
while (i < j)
{
if (a[i] < x)
{
i++;
}
else
{
while (j > i)
{
a[j] = a[j-1];
j--;
}
}
}
a[i] = x;
na = na + 1;
Deklarasi "j = na;" berguna untuk menjaga nilai na agar tidak berubah dalam proses perulangan karena na berfungsi untuk menghitung jumlah data yang ada dalam array. Perulangan "while (i < j)" digunakan untuk melakukan pengecekan dari i hingga j untuk menemukan posisi dari x. Apabila nilai a[i] < x maka nilai i ditambah 1 menggunakan statement "i++;" agar pencarian posisi bergerak ke indeks berikutnya. Namun jika ditemukan a[i] >= x itu berarti bahwa x telah menemukan posisi seharusnya. Sehingga dari posisi tersebut hingga posisi ke j harus digeser. Agar data tersebut bisa bergeser maka dilakukan perulangan "while (j > i)" agar dari indeks terakhir hingga nilai i sebagai posisi x akan di geser menggunakan statement " a[j] = a[j-1];". Setelah penggeseran selesai, maka nilai i dan j akan sama, sehingga mengindikasikan bahwa perulangan "while (i < j)" tidak akan dilanjutkan dan dilanjutkan pada statement a[i] = x;" yang berarti nilai array dengan indeks i adalah x karena i saat ini adalah posisi yang seharusnya bagi nilai x. Dan setelah pemasukkan nilai x ke dalam array dengan indeks i maka nilai dari na telah bertambah 1. Agar penambahan nilai tersebut dapat terjadi kita gunakan statement "na = na + 1;".
Saya rasa cukup penjelasan mengenai algoritma pengurutan menggunakan metode sisipan. Apabila pengurutan dari besar ke kecil, teman-teman tinggal mengganti tanda < menjadi > pada bagian "if (a[i] < x)" menjadi "if (a[i] > x)".
Apabila ada salah kata dan penulisan saya mohon maaf. :D
Algoritma - Pop
| "Pop" bukan "Ayam Pop" (-__-") |
Yah, kali ini saya mau membahas cara pop pada algoritma antrian dan tumpukan sebelumnya. Pop itu berguna untuk menghapus nilai yang ada pada array. Pada dasarnya, pop pada antrian dan pop pada tumpukan itu sama karena sama-sama menghapus nilai pada indeks pertama.
Pada antrian aturannya adalah "First In First Out" yang berarti nilai yang masuk duluan ke antrian seharusnya yang duluan keluar dari antrian. (Walau terkadang di Indonesia jarang yang ngerti budaya antri #Kecewa). Pada tumpukan aturannya adalah "First In Last Out" yang berarti nilai yang masuk duluan akan terakhir keluar. Contohnya saja pada tumpukan piring, kita akan mengambil piring paling atas jika diasumsikan piringnya berjenis sama, dan sama-sama bersih.
Pada kedua kasus tersebut, bagian pop memiliki peran yang sama yaitu sama-sama menghapus indeks pertama. Jika belum mengerti mengenai antrian dan tumpukan, silahkan baca postingan ini dan ini. Pada konsep pop ini, saya menggunakan metode perulangan dengan menggeser indeks agar menimpa indek sebelumnya. Dapat dituliskan seperti berikut.
Asumsi:na=jumlah data dalam array;i=0;//popwhile (i < na){a[i] = a[i+1];i++;}na = na -1
Pada perulangan "while (i < na)" saya melakukan statement "a[i] = a[i+1];" sehingga indeks saat ini akan ditimpa oleh nilai indeks berikutnya. Statement setelah perulangan berakhir menunjukkan bahwa indeks telah bergeser hingga indeks terakhir dan itu juga berarti bahwa nilai awal telah hilang karena ditimpa sehingga seharusnya jumlah nilai dalam array harus dikurangi satu. Untuk mendefinisikan bahwa nilai "na" telah berkurang satu, maka dibuatkan statement "na = na -1;"
Saya rasa cukup sekian penjelasan mengenai algoritma Pop. Kalau ada salah kata saya mohon maaf. :D
Ingat, ini bukan postingan tentang Ayam POP
Algoritma - Tumpukan(Stack)
![]() |
| Tumpukan Everywhere... |
Ini lanjutan dari postingan mengenai algoritma pada postingan ini. Jadi yang akan kita bahas kali ini adalah Algoritma tumpukan, kalo dicontohin, itu kayak ketika kita lagi cuci piring, jadi ntar piring yang pertama kali dicuci bakalan terletak pada posisi terbawah.
Misalkan contohnya seperti ini:
Kita mencuci piring nomor 6.
Kita mencuci piring nomor 4.
Kita mencuci piring nomor 7.
Kita mencuci piring nomor 1.
Kita mencuci piring nomor 8.
Kita mencuci piring nomor 9.
Kita mencuci piring nomor 2.
Maka urutan piring tersebut adalah seperti gambar berikut...
| Ilustrasi Tumpukan |
Seperti diatas kira-kira. Terus bagaimana sih algoritma nya? *Sekali lagi saya jelaskan kalo saya gak bisa nulis algoritmik dengan benar. Jadi mohon maaf ya :D
Kira-kira algoritma tumpukan itu kayak gini.
a[100];na;x = Nilai baru;//insertj = na;while (j > 0){a[j] = a[j-1];j--;}a[0] = x;na = na +1;
Perulangan "while (j > 0)" berguna untuk menelusuri indeks dari akhir hingga awal, kemudian masing-masing indeks kita geser kebawah karena stack masuk dalam indeks pertama. kemudian statement "a[0] = x;" bertujuan untuk mendefinisikan nilai ke array a pada indeks awal. Statement "na = na +1;" bertujuan untuk menambahkan jumlah elemen dari array.
Cukup sekian penjelasan mengenai algoritma tumpukan, lebih dan kurang mohon maaf. Kalo ada yang ingin ditanyakan, silahkan tanyakan dikomentar :D
Ref Gambar.
Algoritma - Antrian (Queue)...
![]() |
| Antri... |
Berhubung pada semester ini saya mengambil lagi mata kuliah Algoritma dan Pemrograman maka untuk beberapa postingan kedepan dari saya akan membahas beberapa Algoritma sederhana yang dipelajari pada mata kuliah ini. Yah, nasib punya dosen kreatif bikin soal, jadi setiap minggu ada-ada saja soal-soal yang muncul pada mata kuliah ini.
Pada saat kali ini, saya akan membahas "Queue". Queue berarti antrian. Sedikit penjelasan mengenai antrian adalah data yang duluan akan duluan juga keluar. Persis sama kasusnya seperti kita antri memebeli bensin ataupun membeli karcis kereta api (Walau jujur, saya belum pernah beli karcis kereta api).
Jadi pada antrian, nilai yang masuk akan diletakkan pada indeks berikutnya. Contoh:
- Masuk angka 8
- Masuk angka 3
- Masuk angka 2
- Masuk angka 10
Maka hasilnya akan menjadi seperti gambar berikut:
Jadi algoritma dari permasalahan diatas adalah:
x=data baru;int na; //Berfungsi untuk menampung jumlah arrayint a[100]; //Array yang menampung nilai antriana[na]=x; //Deklarasi pada indeks ke-na maka bernilai xna=na+1; //Ketika sebuah nilai ditambahkan kedalam array, maka jumlah na ditambah 1
Cukup sekian mengenai pembahasan algoritma kali ini. Apabila ada kesalahan dalam menuliskan kedalam notasi algoritmik saya mohon maaf. Dilain kesempatan mungkin akan disertakan aplikasi yang dibuat menggunakan Borland C++ Builder.
Terima Kasih...
Algoritma BIlangan Prima
Postingan kali ini terinspirasi dari soal praktikum Bahasa Pemrograman I yang saat itu saya sedang mengawas praktikum untuk mata kuliah ini. Dari yang soal yang ada, memang semuanya berhubungan dengan dasar pemrograman yaitu algoritma.
Algoritma merupakan tahap-tahap dalam menyelesaikan sebuah permasalahan. Apapun bahasa pemrograman yang akan kita pelajari. Ilmu dasar yang harus kita kuasai adalah Algoritma.
Kembali ke soal tadi, soal tersebut menyatakan sebagai berikut:
"Buatlah Program PHP untuk menampilkan algoritma diantara 2 buah bilangan dan jumlahkan"
Oke, pada postigan kali ini saya akan coba menjelaskan bagaimana Algoritma dari menentukan bilangan prima diantara 2 buah bilangan dan menentukan jumlah dari bilangan tersebut.
*bilangan prima adalah biangan yang hanya bisa dibagi dengan 1 dan dirinya sendiri*
Misalkan begini, Bilangan prima diantara 1 dan 10 adalah 2, 3, 5,7 dan jumlahnya adalah 2+3+5+7 = 17.
So, apa yang diperlukan untuk menentukan semua itu. Pertama, pasti sebuah perulangan. Boleh while atau for ataupun foreach.
Kita perlu 2 buah perulangan.
1. Perulangan I Untuk mencacah dari bilangan pertama ke bilangan ke dua
2. Perulangan II untuk mencari jumlah pembagian dari nilai I sampai nilai ke dua. jika jumlah pembagian sama dengan 2 maka dia termasuk kepada bilangan prima.
Bingung? Sama saya juga bingung hehe berikut saya tuliskan algoritma beserta penjelasannya.
for (i=bilanganPertama; i <= bilangankedua; i++) ---> Perulangan pertama
b=0;
for ( j=1; j<=i; j++) ---> Perulangan Kedua
a=0; ---> Inisialisasi nilai A, untuk penghitung jumlah bilangan yang habis dibagi.
if (i % j == 0)
a++; // hitung jumlah pembagian
endif;
endfor;
if ( a == 2)
//merupakan bilangan prima
b = b + i; // hitung jumlah bilangan prima
endif;
endfor;
Kelemahan Algoritma di atas adalah proses yang lama jika data yang di load sampai jutaan data yang akan dicek satu persatu apakah habis dibagi dengan banyak bilangan sebelumnya.
Algoritma merupakan tahap-tahap dalam menyelesaikan sebuah permasalahan. Apapun bahasa pemrograman yang akan kita pelajari. Ilmu dasar yang harus kita kuasai adalah Algoritma.
Kembali ke soal tadi, soal tersebut menyatakan sebagai berikut:
"Buatlah Program PHP untuk menampilkan algoritma diantara 2 buah bilangan dan jumlahkan"
Oke, pada postigan kali ini saya akan coba menjelaskan bagaimana Algoritma dari menentukan bilangan prima diantara 2 buah bilangan dan menentukan jumlah dari bilangan tersebut.
*bilangan prima adalah biangan yang hanya bisa dibagi dengan 1 dan dirinya sendiri*
Misalkan begini, Bilangan prima diantara 1 dan 10 adalah 2, 3, 5,7 dan jumlahnya adalah 2+3+5+7 = 17.
So, apa yang diperlukan untuk menentukan semua itu. Pertama, pasti sebuah perulangan. Boleh while atau for ataupun foreach.
Kita perlu 2 buah perulangan.
1. Perulangan I Untuk mencacah dari bilangan pertama ke bilangan ke dua
2. Perulangan II untuk mencari jumlah pembagian dari nilai I sampai nilai ke dua. jika jumlah pembagian sama dengan 2 maka dia termasuk kepada bilangan prima.
Bingung? Sama saya juga bingung hehe berikut saya tuliskan algoritma beserta penjelasannya.
for (i=bilanganPertama; i <= bilangankedua; i++) ---> Perulangan pertama
b=0;
for ( j=1; j<=i; j++) ---> Perulangan Kedua
a=0; ---> Inisialisasi nilai A, untuk penghitung jumlah bilangan yang habis dibagi.
if (i % j == 0)
a++; // hitung jumlah pembagian
endif;
endfor;
if ( a == 2)
//merupakan bilangan prima
b = b + i; // hitung jumlah bilangan prima
endif;
endfor;
Kelemahan Algoritma di atas adalah proses yang lama jika data yang di load sampai jutaan data yang akan dicek satu persatu apakah habis dibagi dengan banyak bilangan sebelumnya.

