Senin, 22 Juni 2015

Contoh Soal dan Penyelesaian Dengan Divide and Conquer

Merge Sort

Merge sort, seperti namanya, merupakan algoritma yang dirancang untuk melakukan pengurutan terhadap sekumpulan bilangan. Ide utama dari merge sort sama dengan algoritma perhitungan total yang telah kita lakukan sebelumnya, yaitu membagi-bagikan keseluruhan list menjadi komponen kecil, dan kemudian mengurutkan komponen tersebut dan menggabungkannya kembali menjadi sebuah list besar.
Berikut adalah merge sort yang diimplementasikan dalam bahasa python:
def merge_sort(lst):
    if len(lst) <= 1:
        return lst

    mid = len(lst) // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])

    return merge(left, right)

def merge(left, right):
    result = []

    while len(left) > 0 or len(right) > 0:
        if len(left) > 0 and len(right) > 0:
            if left[0] <= right[0]:
                result.append(left.pop(0))
            else:
                result.append(right.pop(0))
        elif len(left) > 0:
            result.append(left.pop(0))
        elif len(right) > 0:
            result.append(right.pop(0))

    return result
Dari kode di atas terlihat bahwa merge sort memiliki dua bagian, yang dituliskan dalam dua buah fungsi: merge dan merge_sort. Fungsi merge_sort memiliki logika dan cara kerja yang sama dengan fungsi penjumlahan total yang kita bangun sebelumnya, dengan perbedaan pada bagian yang melakukan penggabungan list (return merge(left, right)).
Penggabungan list sendiri dilakukan dengan cukup sederhana dan gamblang, yaitu hanya membandingkan elemen-elemen dari dua buah list yang dikirimkan satu per satu, untuk kemudian disimpan ke dalam variabel result secara terurut. Untuk lebih jelasnya, mari kita coba bedah algoritma pada fungsi merge, langkah demi langkah.
Misalkan kita memanggil fungsi merge seperti berikut:
left  = [3, 5]
right = [1, 4]
merge(left, right)
Note
Ingat bahwa list pada variabel left maupun right harus sudah terurut jika ukuran list lebih dari 1. Fungsi merge dengan argumen list berukuran > 1 hanya dipanggil dari hasil merge dua buah list berukuran satu dalam kasus merge_sort.
Jika kita mengikuti langkah demi langkah pada kode, maka pada setiap iterasi while kita akan mendapatkan nilai masing-masing variabel sebagai berikut:
# Awal fungsi
left   = [3, 5]
right  = [1, 4]
result = []

# Iterasi 1
left   = [3, 5]
right  = [4]
result = [1]

# Iterasi 2
left   = [5]
right  = [4]
result = [1, 3]

# Iterasi 3
left   = [5]
right  = []
result = [1, 3, 4]

# Iterasi 4
left   = []
right  = []
result = [1, 3, 4, 5]
Penggabungan seperti di atas dilakukan pada setiap submasalah yang telah dipecah oleh merge_sort, sampai kita mendapatkan sebuah list dengan ukuran yang sama pada list awal. Untuk mempermudah pengertian, gambar di bawah menunjukkan proses pemecahan dan penggabungan kembali dari merge sort:
Langkah Kerja Merge Sort
Langkah Kerja Merge Sort
Proses divide terjadi ketika kotak dan panah berwarna merah, sementara conquer dan combine terjadi ketika kotak dan panah diberi warna biru. Proses conquer merupakan proses di mana kita mengurutkan elemen dalam list, dan combine adalah ketika kita menggabungkan hasil urutan dari list tersebut.

Contoh Soal dan Penyelesaian Dengan Metode Greedy


1. Kita diberikan sebuah knapsack (ransel) yang dapat menampung berat maksimum 15 Kg dan sehimpunan benda A = {a0, a1, a2, a3} yang berbobot (dalam Kg) W = {5,9,2,4}. Setiap benda tersebut diberikan nilai profit P = {100, 135, 26, 20}. Jika kita diperbolehkan memasukkan zi bagian dari benda ai yang ada ke dalam knapsack dimana 0 ≤ zi ≤ 1 , maka tentukanlah Z = {z0,z1,z2,z3} agar diperoleh total profit yang maksimal !
Penelesaian :
Dik : n = 4; M = 15;
        W = { 5,9,2,4 };
        P = { 100,135,26,20 },
Dit : total profit yang maksimal ?
Barang ke -
Berat(Wi)
Keuntungan(Pi)
Pi/Wi
Z0
5
100
20
Z1
9
135
15
Z2
2
26
13
Z3
4
20
5

Z ← 0
cu ← 15
i = 0
karena W(0) cu yaitu : 5 15 berarti : Z(0) ← 1
cu ← 15 - 5 = 10
i = 1
karena W(1) cu yaitu : 9 10 berarti : Z(1) ← 1
cu ← 10 - 9 = 1
i = 2
karena W(2) cu yaitu : 2 1 berarti : keluar dari loop (exit)
Karena 2 ≤ 3 maka Z(2) ← cu/W(2) = 1/2 = 0,5
Jadi optimisasi masalah knapsack diperoleh bila Z = { 1; 1; 0,5; 0 }
Sehingga Q = 1 x 100 + 1 x 135 + 0,5 x 26 + 0 x 20
= 100 + 135 + 13 + 0
= 248


2. Misal terdapat 3 buah prg.(n=3) yg masing-masing mempunyai panjang persegi.
(I1, I2 ,I3) = (5, 10, 3). Tentukan urutan penyimpanannya secara berurutan ( sequential )
agar optimal....!

Penyelesaiannya :

Dari 3 program tersebut akan didapat 6 buah kemungkinan order, yg didapat dari 
nilai faktorial 3 --> 3! (ingat faktorial n!).

ORDERING
D ( I )
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
5 + (5+10) + (5+10+3) = 38
5 + (5+3) + (5+3+10) = 31
10 + (10+5) + (10+5+3) = 43
10 + (10+3) + (10+3+5) = 41
3 + (3+5) + (3+5+10) = 29
3 + (3+10) + (3+10+5) = 34

Dari tabel tersebut, didapat Susunan / order yg optimal adalah :

susunan pertama untuk program ke tiga = 3

susunan kedua untuk program kesatu = 5

susunan ketiga untuk program kedua = 10

Jumat, 12 Juni 2015

Menghilangkan Perasaan Resah dan Gelisah

Memiliki kehidupan yang tenang dan tentram selalu menjadi idaman dan atau salah satu tujuan yang ingin dicapai setiap orang. hidup yang tenang dan tentram adalah dambaan dan muara dari perjuangan hidup umat manusia di dunia ini.
Kita pasti pernah merasakan bingung resah dan gelisah. Bingung memilih jalan hidup, bingung memilih pasangan hidup, bingung usaha, bingung cari kerja, bingung cari pinjaman utang, bahkan tidak sedikit dari kita pernah merasakan lagi bingung mau ngapain.

Dalam kondisi dimana seseorang sedang bingung resah dan atau gelisah, sedih, berduka, iri, dengki,  sakit hati, patah hati, senang, gembira, dan berbagai perasaan hati yang lain, baik yang positif maupun negatif pada dasarnya di sebabkan lebih karena kondisi atau perasaan hati serta jiwa seseorang. dan akibatnya akan kita jumpai banyak orang yang stress, gila, strok, serangan jantung disebabkan oleh hal hal yang demikian baik secara langsung maupun tidak langsung. 

Para Ahli Kejiwaan (psikolog dan atau psikiater) seringkali menyimpulkan bahwa beban hidup yang berat dan kondisi lingkungan yang tidak mendukung seringkali menjadi alasan dibalik semua itu.  Serupa tapi tak sama Al-quran menjelaskan tentang bagaimana mengatasi hal tersebut melalui pendekatan yang lebih mendalam dan lebih berorientasi pada pencegahan dan sekaligus pengobatan.


 
Mungkin ada diantara saudaraku umat islam yang pernah menjalankan Dzikr untuk mencari ketentraman lahir dan batin, Entah itu dilalui dengan sukses, gagal atau bahkan tak berbekas sama sekali. Bagi mereka yang merasakan manfaat dzikr, insya allah mereka akan tetap istiqomah menjalankan amal ibadah tersebut. namun bagi mereka yang gagal dan tetap pada posisi selalu merasa bingung resah dan gelisah, bukan tidak mungkin mereka akan terjerumus kedalam jurang yang lebih dalam.
Dalam kondisi / keadaan yang seperti ini, bukanlah dzikr atau amalan ibadah mereka tidak diterima dan atau tidak berhasil akan tetapi penerapan dan tata cara serta pengamalan dzikr yang kurang lengkap bisa jadi membuat mereka tetap dalam keadaan bingung resah dan gelisah.

Bentuk perwujudan dari Amal Ibadah dalam rangka Dzikr (mengingat Allah) adalah Shalat , baik itu shalat 5 waktu maupun shalat sunnah. sesibuk apapun pekerjaan yang kita dapatkan dan atau sebesar apapun masalah yang dihadapi seseorang selagi masih senantiasa melaksanakan shalat insya allah tidak akan mengalami kebingungan, resah maupun gelisah.