Showing posts with label Struktur Data. Show all posts
Showing posts with label Struktur Data. Show all posts

Monday, June 6, 2011

Sorting Method & Contoh

Assalamu'alaikum... :)


I feel really messed up. Ha-ha. Dan tiba-tiba terpikir buat post entry. Sambil belajar. Or is that the other way around? Whatever. :)

Dari semester pertama belum begitu paham soal Sorting method. Ups. Yap. Okay, mungkin saya agak lambat. Satu-satunya latihan yang aku lakuin pake Sorting itu di semester 1, soal dari Pak Endang. Remember this? ;)


But I'm not talking about it now. Kita bahas Sorting aja dulu deh... -____-)

Jujur waktu ini ditulis aku  belum paham sepenuhnya soal Sorting. Baru berhasil beberapa kali but still can't grasp it all. Let's learn alright? :D

Hm... So there are 5 kinds of Sorting Method here...
  1. Selection Sort
  2. Bubble Sort
  3. Merge Sort
  4. Quick Sort
  5. Insertion Sort
Selection Sort, cari bilangan terkecil lalu tukar dengan bilangan pertama dari data tersebut (select yang terkecil).
Bubble Sort, bandingkan data ke-n dengan data sebelumnya (n-1), jika lebih kecil maka tukar (like a bubble, mereka naik ke atas, ke atas dan ke atas lagi).
Merge Sort, mengelompokkan deret bilangan ke dalam 2 bagian, 4 bagian, 8 bagian dst, lalu urutkan secara langsung (merge data yang bersebelahan jadi satu bagian).
Quick Sort, dengan menentukan batas bawah (Lower Bound i=1) dan batas atas (Upper Bound i=n), posisinya ditukar jika LB>UB.
Insertion Sort, pengecekkan dimulai dari data ke-2 (mis. i=1), bandingkan data i dengan i-1, jika lebih kecil data i disisipkan ke depan. dst... (insert atau sisipkan ke awal)

Gitu bukan ya...? :D


Aku coba descending sort di sini. Di urut dari yang terbesar terlebih dahulu. Fungsi sort nya bisa dilihat di void sort(). Dimulai dari data terakhir (j=n;) sampai j=i, dimana i adalah data ke dua (i=2), jadi sampai j=2. Bandingkan,
jika data[j] lebih besar dari data sebelumnya (data[j-1]) maka tukar posisinya. Caranya, kita buat variable bantu temp.
Kita pindahkan dulu data[j] ke temp (temp=data[j]),
Lalu pindahkan data[j-1] ke data[j] (data[j]=data[j-1]),
Lalu pindahkan data yang disimpan di temp tadi ke data[j-1] (data[j-1]=temp).
See, jadi dituker-tuker... :D

Itu aja ya...?
Eh itu aja... Beneran deh... :)
Contoh outputnya kayak gini...


Kalau mau pake ascending sort, dari yang terkecil ke yang lebih besar, tinggal diubah rumus if-nya
Descending : if (data[j]>data[j-1])
Ascending : if (data[j]<data[j-1])


Can you tell what kind of Sorting method I use?
Hahaha. Awalnya bingung, jadi yang aku pake sorting apa ya...? Liat lagi pengertian masing-masing jenis sorting.
Sorting ini dilakukan dengan membandingkan data n dengan data n-1, jika sesuai syarat if, maka ditukar. So... it's Bubble Sort, right?

Kayaknya Sorting yang lain pun gak terlalu rumit... *sok tau* *ngarep*
Kita coba next time... :)

Thanks for accompanying me... :D

Saturday, May 28, 2011

Contoh Listing Linier Searching dan Binary Searching

Assalamu'alaikum...

Ini contoh listing program pake c++.

For Linear Searching :

  
Yang ini lumayan simple. Digunakan perulangan for buat cari data dari indeks 0 sampai indeks 7. Kalau ada data yang sama dengan yang kita cari, flag =1, true.


Contoh untuk Binary Searching :
 
 
Yang ini perulangannya sedikit lebih rumit. Ya. Sedikit, okay.
Variable yang kita butuhkan itu, pertama buat array, kita pake nama variable data. Kita juga harus tau banyaknya data yang ada di dalam array tersebut, kita sebut n. Seperti yang kita tau, harus ada data tengah, that’s m. Dan tentu saja variable cari. Buat ngebantu, kita bikin variable l dan r buat cari nilai median (m)nya. Juga variable ktm, buat penanda true or false, udah ketemu apa belum data yang kita cari itu, default= false atau 0.

Selanjutnya proses perulangannya.
Selama nilai l <= r dan nilai ktm=0, kita lakukan proses:
Cari mediannya terlebih dahulu, m= (l+r)/2.
Jika isi data/value yang ada di indeks m, atau data[m] = data yang kita cari (cari), nilai ktm berubah jadi 1, true.
Else, jika tidak ada 2 kemungkinan lagi.
Jika cari < data[m], kita cari di setengah bagian pertama atau bagian kiri, dengan merubah nilai r menjadi m dikurangi 1, m-1.
Jika syarat itu juga salah, kemungkinannya cuma 1, cari > data[m], kita cari di setengah bagian selanjutnya atau bagian kanan, dengan merubah niali l menjadi m ditambah 1, m+1.

Kalau dalam pencarian pertama data[m] sudah sama dengan cari, maka proses dihentikan, karena syarat perulangannya tidak lagi terpenuhi (while (l<=r && ktm==0)). You see, if (data[m] == cari), ktm berubah jadi 1. Langsung loncat ke proses selanjutnya, if (ktm==1) cetak “data ada”. End.

Kalau yang kita dapat adalah kondisi yang kedua, cari lebih kecil dari data[m], kita ubah r=m-1. Atau yang ketiga, cari lebih besar dari data[m], kita ubah l=m+1. Lalu ulangi lagi dari proses penghitungan median. Sampai syarat perulangannya sudah tidak terpenuhi, (while (l<=r && ktm==0)) jika ktm sudah berubah menjadi 1, menghasilkan “data ada”, atau bisa juga jika ktm masih tetap bernilai 0, tapi nilai l sudah lebih besar dari nilai r, berarti data yang kita cari tidak ada dalam array tersebut. Cetak “tidak ada”.

Dan output dari listing di atas bisa dilhat di bawah...


That’s it. I know we can do it. :)




Next ingatkan aku buat belajar listing program sorting.
See ya.

Linier Searching dan Binary Searching

Assalamu'alaikum... :)


Last Thursday kita ngomongin soal Struktur Searching. Seperti yang aku omongin kemarin, matkul Struktur Data kita semester 2 ini hampir sama dengan materi semester 1. It still lingers on my mind gimana Pak Endang ngasih ilustrasinya. :P

So, ada 2 tipe Searching yang kita bahas, Linier Searching (or Sequential Searching or Pencarian Beruntun) dan Binary Searching.

Simpelnya, Linier Searching itu pencarian data dalam array dimensi satu, yang data-datanya tidak terurut (acak). Data yang dibutuhkan dicari satu-persatu dari indeks 0 sampai indeks terakhir. You see, kalau kamu liat satu rak buku yang gak diurutin, dan kamu cuma mau nyari satu buku tertentu, kamu harus liat judulnya satu-persatu. Kalau judul buku pertama yang ada di rak adalah buku yang kamu cari, berarti “buku ada”, kalau gak, kamu liat lagi buku selanjutnya. Kalau buku selanjutnya juga bukan buku yang kamu cari, liat lagi buku yang ditaruh sesudah itu. Begitu seterusnya sampai kamu bisa menyimpulkan “buku ada” atau “buku tidak ada”.

Best case is, kalau data yang kamu cari ada di indeks terdepan. Langsung ketemu and waktu yang kamu butuhin buat pencarian jadi singkat kan.
While Worst case, kalau data yang kamu cari ada di indeks paling belakang. Waktu pencariannya jadi lama...

Binary Searching. This is the best methode for searching. Apalagi kalau datanya udah banyak banget. Pegel kan, kalau harus nyari beruntun satu-satu. Pencarian ini dilakukan dengan memenggal wilayah yang harus kita ubek-ubek (hah?). One thing, datanya harus udah berurut, gak bisa random.

I’m gonna try to give example for this one.

Ini data kita.
Data yang kita cari adalah 17, kita sebut x.
Pertama kita cari data tengahnya dulu, biar bisa dibagi jadi 2 bagian. Karena datanya ada 9, data tengahnya ada di urutan ke-5, right? Kita liat data ke-5, adalah 15. Kalau itu lebih kecil dari data yang kita cari alias x, maka kita cari ke sebelah kanan (setengah array berikutnya). 15 < 17. Buang kemungkinan data ada pada setengah array pertama.

Sekarang yang harus kita ubek-ubek cuma 4 data. Kita cari lagi data tengahnya. 4 data, data tengahnya ada di urutan ke-2, 23. Kalau itu lebih besar dari x, maka kita cari ke sebelah kiri (setengah array pertama). Buang kemungkinan data tengah and data sesudahnya.
Now we only got 1 candidate. Data tengahnya itu-itu juga, that’s 17. Kita lihat apa itu sama dengan x, data yang kita cari. Kalau ada, done, congratz, “Data ada”.
  
Next, aku pengen belajar tentang listing programnya.

And I’m here trying to learn, trying to study. Kalau kamu juga mau, then let’s do it together. Tell me what you think, and ask me if maybe you still wanna learn more. I’m happy to discuss. :)
Thank you for your time. :)