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.
