GREEDY - 2
Sherly Christina, S.Kom., M.Kom
Greedy
■ Algoritme Greedy dirancang untuk mencapai solusi optimal untuk masalah tertentu.
Dalam pendekatan algoritma serakah, keputusan dibuat dari domain solusi yang
diberikan.
■ Karena “tamak”, solusi terdekat yang tampaknya memberikan solusi optimal
dipilih.Algoritme Greedy mencoba menemukan solusi optimal lokal, yang pada
akhirnya dapat menghasilkan solusi globalyang optimal.
Dynamic
■ Pendekatan pemrograman dinamis mirip dengan pendekatan divide and conquer dalam
memecah masalah menjadi masalah yang lebih kecil atau sub-problems.
■ Tetapi tidak seperti, divide and conquer, sub-problems ini tidak diselesaikan secara
independent. Sebaliknya, hasil dari sub-problems yang lebih kecil ini diingat dan
digunakan untuk sub-problems yang serupa atau tumpang tindih.
■ Pemrograman dinamis digunakan saat kita memiliki masalah, yang dapat dibagi menjadi
sub-sub masalah yang serupa, sehingga hasilnya dapat digunakan kembali.
■ Sebagian besar, algoritma ini digunakan untuk pengoptimalan. Sebelum menyelesaikan
sub-masalah yang ada, algoritma dinamis akan mencoba untuk memeriksa hasil dari
sub-masalah yang diselesaikan sebelumnya. Solusi dari sub-masalah digabungkan untuk
mencapai solusi terbaik.
Dynamic and Greedy
Dynamic Greedy
untuk mendapatkan solusi yang optimal. untuk mendapatkan solusi yang optimal
Dalam Pemrograman Dinamis, kita memilih di Dalam Algoritma serakah, kita membuat pilihan
setiap langkah, tetapi pilihannya mungkin apa pun yang tampaknya terbaik saat ini dan
bergantung pada solusi untuk sub-masalah. kemudian menyelesaikan sub-masalah yang
muncul setelah pilihan dibuat.
akan menghasilkan solusi yang optimal dengan tidak ada jaminan untuk mendapatkan Solusi
menggunakan Principle of Optimality. Optimal.
Activity selection problem
■ Masalah pemilihan aktivitas adalah masalah optimasi matematis.
■ Ilustrasi berikut adalah masalah penjadwalan sumber daya di antara beberapa aktivitas
yang perlu diselesaikan.
Activity selection problem
■ Misalkan S = {1, 2 .... n} adalah himpunan dari n aktivitas yang diusulkan.
■ Aktivitas-aktivitas tersebut berbagi sumber daya (eg. gedung) yang hanya dapat
digunakan oleh satu aktivitas dalam satu waktu, misalnya, Lapangan Tenis, Ruang
Kuliah, dll.
■ Setiap aktivitas "i" memiliki waktu mulai si dan waktu selesai fi, di mana si ≤fi.
■ Jika suatu aktivitas "i" berlangsung sementara interval waktu setengah terbuka [si, fi].
Aktivitas i dan j kompatibel jika interval [si, fi] dan [sj, fj] tidak tumpang tindih (yaitu i
dan j kompatibel jika si ≥fj atau sj ≥fi).
■ Masalah pemilihan aktivitas adalah masalah dalam memilih himpunan dengan ukuran
maksimum dari aktivitas yang saling konsisten.
Activity selection problem
■ S = (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)
■ Si = (1,2,3,4,7,8,9,9,11,12)
■ Fi = (3,5,4,7,10,9,11,13,12,14)
■ Hitung jadwal yang menghasilkan jumlah aktivitas terbanyak.
Activity selection problem
■ Solusi dengan Greedy:
■ Aturlah aktivitas tersebut dengan urutan waktu selesai yang lebih lama (fi bernilai
semakin besar)
■ Pertama jadwalkan A1
■ Berikutnya jadwalkan A3 karena s A1 dan
A3 bertabrakan.
■ Selanjutnya lewati A2 karena mengganggu.
■ Selanjutnya, jadwalkan A4 karena A1, A3
dan A4 tidak bertabrakan.
■ Selanjutnya, jadwalkan A6 karena A1, A3,
A4 and A6 tidak bertabrakan.
■ Lewati A5 karena mengganggu.
■ Selanjutnya, jadwalkan A7 sebagai A1, A3
A4, A6 dan A7 karena tidak saling
bertabrakan.
■ Selanjutnya, jadwalkan A9 karena A1, A3
A4, A6, A7 dan A9 tidak bertabrakan.
■ Lewati A8 karena mengganggu.
■ Selanjutnya, jadwalkan A10 karena A1, A3,
A4, A6, A7, A9 dan A10 tidak bertabrakan.
Solusinya adalah:
A1, A3, A4, A6, A7, A9, A10
Knapsack
■ Misalkan terdapat satu set item, masing-masing dengan bobot (weight) dan nilai (value),
tentukan sebuah subset item untuk dimasukkan ke dalam set item tersebut, sehingga
bobot totalnya kurang dari atau sama dengan batas yang diberikan dan nilai totalnya
sebesar mungkin.
■ Permasalahan knapsack adalah masalah optimasi kombinatorial.
■ Salah satu pendekatan umum untuk masalah yang sulit adalah dengan mengidentifikasi
kendala yang paling membatasi, mengabaikan yang lain, memecahkan masalah
knapsack, dan kemudian mendapatkan solusi untuk mengatasi kendala yang diabaikan.
Contoh Soal Knapsack
■ Seorang pelanggan toko memenangkan undian berhadiah, sehingga dapat membawa
produk apa saja dari toko tersebut sebanyak yang mampu dibawa oleh ranselnya.
■ Pada toko terdapat n item barang dan berat barang ke i adalah wi dan keuntungannya
adalah pi.
■ Barang apa yang dapat diambil pelanggan tersebut?
■ Barang tersebut harus dipilih sedemikian rupa sehingga pelanggan akan memperoleh
keuntungan maksimal.
Fractional Knapsack
■ item barang i dipecah menjadi “potongan-potongan kecil”, sehingga pelanggan dapat
memilih pecahan barang xi untuk memenuhi ranselnya.
■ Berdasarkan permasalahan yang terjadi:
– Ada n item di toko
– Berat tiap item ke i, wi > 0 , keuntungan/profit tiap item pi > 0
– Dan Kapasitas ransel adalah W.
■ Dalam masalah ini, item barang dapat dipecah menjadi potongan-potongan kecil. Jadi,
pelanggan dapat mengambil sebagian kecil dari item ke-i.
0⩽xi⩽1
Fractional Knapsack
■ Item ke-i berkontribusi terhadap bobot xi.wi terhadap total bobot ransel
■ dan profit xi.pi terhadap total profit.
■ Oleh karena itu tujuan dari algoritma ini adalah:
■ Dengan memperhatikan batasan/aturan:
Fractional Knapsack
■ Maka solusi optimal adalah mengisi ransel dengan tepat,
■ Jadi solusi optimal dapat diperoleh dengan :
■ Dalam permasalahan ini, pertama-tama kita perlu mengurutkan item tersebut sesuai
dengan nilai
■ Sehingga
Fractional Knapsack
■ Misalkan Kapasitas dari ransel adalah 60, kemudian data item barang seperti ditunjukan
tabel berikut:
Fractional Knapsack
■ Kemudian urutkan data berdasarkan sehingga diperoleh tabel berikut:
Fractional Knapsack
W = 60
■ Pertama pilih item B karena berat B lebih kecil dari kapasitas ransel.
■ Selanjutnya pilih item A, karena kapasitas ransel yang tersedia lebih besar dari berat A.
■ Kemudian, pilih item C sebagai item berikutnya.
■ C adalah item terakhir, namun tidak semua item C dapat dipilih karena kapasitas ransel
yang tersisa kurang dari berat C.
■ Oleh karena itu, hitung pecahan dari item C: ((60-50)/20)
Fractional Knapsack
■ Solusi Optimal:
■ Total berat dari item-item terpilih adalah 10+40+20*(10/20) = 60
■ Total profit adalah 100 + 280 + 120* (10/20) = 380+60 = 440
Algoritma Greedy
■ machine scheduling
■ Fractional Knapsack Problem
■ Minimum Spanning Tree
■ Huffman Code
■ Job Sequencing
■ Activity Selection Problem
■ Travelling Salesman Problem
■ Prim's Minimal Spanning Tree Algorithm
■ Kruskal's Minimal Spanning Tree Algorithm
■ Dijkstra's Minimal Spanning Tree Algorithm
■ Graph - Map Coloring
■ Graph - Vertex Cover
Huffman Codes
■ Data dapat dikodekan secara efisien menggunakan Kode Huffman
■ Teknik yang banyak digunakan dan bermanfaat untuk mengompresi data.
■ Algoritma Greedy Huffman menggunakan tabel frekuensi kemunculan setiap karakter
untuk membangun cara yang optimal untuk merepresentasikan setiap karakter sebagai
string biner.
Contoh Huffman Codes
■ Misalkan kita memiliki 105 karakter dalam sebuah file data.
■ Penyimpanan Normal: 8 bit per karakter (ASCII) - 8 x 105 bit dalam file.
■ Tapi kita ingin memampatkan file dan menyimpannya dalam ukuran yang lebih kecil.
Misalkan hanya enam karakter yang muncul di file:
Contoh Huffman Codes
■ Bagaimana kita bisa merepresentasikan data dengan cara yang “Compact”?
▪ Fixed length Code: Setiap huruf diwakili oleh jumlah bit yang sama. Dengan kode
panjang tetap, minimal 3 bit per karakter:
a 000
b 001
c 010
d 011
e 100
f 101
▪ Jadi untuk sebuah file dengan105 karakter, kita memerlukan 3 x 105 bits.
Contoh Huffman Codes
■ Variable-length code: Dapat bekerja lebih baik daripada Fixed length Code, dengan
memberikan karakter yang banyak muncul kode pendek dan karakter yang jarang muncul kode
yang lebih panjang. Eg.
a 0
b 101
c 100
d 111
e 1101
f 1100
■ Sehingga jumlah bits yang disimpan :
■ (45 x 1 + 13 x 3 + 12 x 3 + 16 x 3 + 9 x 4 + 5 x 4) x 1000 = 2,24 x 105bits
Prefix Codes
■ Awalan atau prefiks encoding satu karakter tidak boleh sama dengan encoding lengkap
dari karakter lain, misal 1100 dan 11001 bukanlah kode yang valid karena 1100
merupakan prefiks dari beberapa kode kata lain
■ Kode prefiks dibutuhkan untuk mengklarifikasi encoding dan decoding.
■ Pendekatan Encoding sesederhana menggabungkan kata-kata kode yang menjelaskan
setiap karakter file.
■ Kemudian Decoding juga cukup dapat dilakukan dengan sederhana menggunakan
prefiks. Karena tidak ada kode kata yang merupakan awalan dari yang lain.
Algoritma Huffman Code
■ Algoritme Greedy Huffman Code membangun pohon T yang dianalogikan dengan kode
optimal secara bottom-up, untuk menemukan prefiks code suatu karakter.
■ Yang dimulai dengan satu set | C | daun (C adalah jumlah karakter)
■ dan melakukan | C | - 1 operasi 'penggabungan' untuk membuat pohon final.
■ Dalam algoritma Huffman, 'n' menunjukkan jumlah sekumpulan karakter, z
menunjukkan node induk, dan x & y adalah anak node kiri & kanan dari z.
Algoritma Huffman Code
■ Yang dimulai dengan satu set | C |
daun (C adalah jumlah karakter)
■ dan melakukan | C | - 1 operasi
'penggabungan' untuk membuat
pohon final.
■ Dalam algoritma Huffman, 'n'
menunjukkan jumlah sekumpulan
karakter, z menunjukkan node induk,
dan x & y adalah anak node kiri &
kanan dari z.
Contoh Algoritma Huffman Code
■ a: 50 b: 25 c: 15 d: 40 e: 75
Algoritma Huffman Code
Algoritma Huffman Code
Algoritma Huffman Code