260 likes | 456 Views
Decrease and Conquer. Bahan Kuliah IF2211 Strategi Algoritma Oleh : Rinaldi Munir. Program Studi Teknik Informatika Sekolah Teknik Elektro dan In formatika ITB.
E N D
Decrease and Conquer BahanKuliah IF2211 StrategiAlgoritma Oleh: RinaldiMunir Program StudiTeknikInformatika SekolahTeknikElektrodan In formatika ITB
Decrease and conquer: metodedesainalgoritmadenganmereduksipersoalanmenjadibeberapa sub-persoalan yang lebihkecil, tetapiselanjutnyahanyamemprosessatu sub-persoalansaja. • Berbedadengandivide and conquer yang memprosessemua sub-persoalandanmenggabungsemuasolusisetiap sub-persoalan.
Decrease and conquer terdiridariduatahapan: 1. Decrease: mereduksipersoalanmenjadibeberapapersoalan yang lebihkecil (biasanyadua sub-persoalan). 2. Conquer: memprosessatu sub-persoalansecararekursif. • Tidakadatahapcombinedalamdecrease and conquer.
Tigavariandecrease and conquer: 1. Decrease by a constant: ukuraninstanspersoalandireduksisebesarkonstanta yang samasetiapiterasialgoritma. Biasanyakonstanta = 1. 2. Decrease by a constant factor: ukuraninstanspersoalandireduksisebesarfaktorkonstanta yang samasetiapiterasialgoritma. Biasanyafaktorkonstanta = 2. 3. Decrease by a variable size: ukuraninstanspersoalandireduksibervariasipadasetiapiterasialgoritma.
Decrease by a Constant Persoalanberukurann Sub-persoalanberukurann – 1 Solusi Sub-persoalan Solsi Persoalansemula
Contoh 1: Persoalanperpangkatanan Denganmetodedecrease and conquer: Kompleksitaswaktu (berdasarkanjumlahoperasi kali): Biladiselesaikan: T(n) = T(n – 1) + 1 = …. = O(n) samasepertialgoritmabrute-force.
function exp(a : real; n : integer) real Deklarasi k : integer Algoritma: ifn = 0 then return 1 else return exp(a, n – 1) * a endif
Contoh 2: Selection sort Misalkantabelaberisielemen-elemenberikut: 4 12 3 9 1 21 5 2 Langkah-langkahpengurutandenganSelection Sort:
KompleksitaswaktualgoritmaSelection Sort: T(n) = waktupembagian + waktupemanggilan rekurensSelection Sortuntukbagiantabel kanan yang berukurannelemen. Persamaanpadabagianrekurensibiladiselesaikan menghasilkanT(n) = O(n2).
Decrease by a Constant Factor Persoalanberukurann Sub-persoalanberukurann/2 Solusi Sub-persoalan Solusi Persoalansemula
Contoh 4: Binary search Kondisiawal: larikAsudahterurutmenaik Kadalahnilai yang dicari Jikaelementengah (mid) k, makapencariandilakukan hanyapadasetengahbagianlarik (kiriataukanan) Ukuranpersoalanselaluberkurangsebesarsetengahukuransemula. Hanyasetengahbagain yang diproses, setengahbagianlagitidak.
procedurebin_search(input A : ArrayOfInteger; input i, j : integer; input K : integer; output idx: integer) Deklarasi mid : integer Algoritma: ifj > ithen{ ukuranlariksudah 0} idx -1 { k tidakditemukan } else mid (i + j)/2 ifA(mid) = k then{ k ditemukan } idx mid{ indekselemenlarik yang bernilai = K } else ifK < A(midthen bin_search(A, mid + 1, j,K, idx) else bin_search(A, i, mid - 1 , K, idx) endif endif endif
Jumlahoperasiperbandingan: • Relasirekursiftsbdiselesaikansbb: T(n) = 1 + T(n/2) = 1 + (1 + T(n/4)) = 2 + T(n/4) = 2 + (1 + T(n/8)) = 3 + T(n/8) = … = j + T(n/2j) Asumsi: n = 2j j = 2log n T(n) = 2log n + T(1) = 2log n + (1 + T(0)) = 1 + 2log n = O(2log n)
Contoh 5: Interpolation Search - Analog denganpencarian data didalamkamusdengancaraperkiraanletak. - Kondisiawal: larikAsudahterurutmenaik Kadalahnilai yang dicari
procedureinterpolation_search(input A : ArrayOfInteger; input i, j : integer; input K : integer; output idx: integer) Deklarasi mid : integer Algoritma: ifj > ithen{ ukuranlariksudah 0} idx -1 { K tidakditemukan } else mid i + (j – i) *(K – A(i))/ (A(j) – A (i)) ifA(mid) = x then{ K ditemukan } idx mid{ indekselemenlarik yang bernilai = K } else ifK < A(midthen interpolation_search(A, mid + 1, j,K, idx) else interpolation_search(A, i, mid - 1 , K, idx) endif endif endif
Kompleksitasalgoritmainterpolation search: - Kasusterburuk: O(n), untuksembarangdistribusi data - Kasusterbaik: O(log logn), jika data didalamsenaraiterdistribusiuniform
Contoh 6 (Mencarikoinpalsu). Diberikannbuahkoin yang identik, satudiantaranyapalsu. Asumsikankoin yang palsumempunyaiberat yang lebihringandaripadakoinasli. Untukmencari yang palsu, disediakansebuahtimbangan yang teliti. Carilahkoin yang palsudengancarapenimbangan.
Algoritmadecrease and conquer: 1. Bagihimpunankoinmenjadidua sub-himpunan, masing-masingn/2 koin. Jikan ganjil, makasatubuahkointidakdimasukkankedalamkedua sub-himpunan. 2. Timbangkedua sub-himpunandenganneraca. 3. Jikaberatnyasama, berartisatukoin yang tersisaadalahpalsu. 4. Jikaberatnyatidaksama, makaulangiprosesuntuk sub-himpunan yang beratnyalebihringan (salahsatukoindidalamnyapalsu).
Ukuranpersoalanselaluberkurangdenganfaktorsetengahdariukuransemula. Hanyasetengahbagian yang diproses, setengahbagian yang lain tidakdiproses. • Jumlahpenimbangan yang dilakukanadalah: • Penyelesaianrelasirekurens T(n) miripsepertibinary search: T(n) = 1 + T(n/2) = …. = O(2 log n)
Decrease by a Variable Size • Contoh 7: Menghitung median danSelection Problem. • Selection problem: mencarielementerkecilke-kdidalamsebuahsenaraiberanggotannelemen. • Jika k = 1 elemen paling kecil (minimum) • Jika k = n elemen paling besar (maksimum) • Jika k = n/2 elemen median Bagaimanamencari median darisenarai yang tidakterurutnamuntidakperlumengurutkansenaraiterlebihdahulu?
Algoritmanya: • Lakukanpartisipadasenaraisepertiprosespartisipadaalgoritma Quick Sort. Partisimenghasilaknsetengahelemensenarailebihkecilatausamadenganpivotpdansetengahbagianlagilebihbesardaripivot p. • Misalkansadalahposisipem-partisian. Jika s = n/2, maka pivot padalahnilai median yang dicari Jika s > n/2, maka median terdapatpadasetengahbagiankiri Jika s < n/2, maka median terdapatpadasetengahbagiankanan
Contoh: Temukan median dari 4, 1, 10, 9, 7, 12, 8, 2, 15. padacontohini, k = 9/2 = 5, sehinggapersoalannyaadalahmencarielementerkecil ke-5 didalamsenarai. Partisisenaraidenganmemilihelemenpertamasebagai pivot: 4 1 10 9 7 12 8 2 15 Hasilpartisi: 2 1 4 9 7 12 8 10 15 Karenas = 3 < 5, kitamemprosessetengahbagiankanan: 9 7 12 8 10 15 8 7 9 12 10 15 Karenas = 6 > 5, kitamemprosessetengahbagiankiri: 8 7 7 8 Sekarangs = k = 5 stop. Jadi median = 8
Kompleksitasalgoritma: • Solusidarirelasirekurenstersebutadalah: T(n) = T(n/2) + cn = … = O(n)