Pengertian Metode atau Algoritma Greedy
Metode/Algoritma Greedy merupakan algoritma yang membentuk solusi langkah per langkah dengan mencari nilai maksimum sementara pada setiap langkahnya. Nilai maksimum sementara ini dikenal dengan istilah local maximum. Pada kebanyakan kasus, algoritma greedy tidak akan menghasilkan solusi paling optimal, begitupun algoritma greedy biasanya memberikan solusi yang mendekati nilai optimum dalam waktu yang cukup cepat. Greedy sendiri diambil dari bahasa inggris yang artinya rakus, tamak atau serakah.
Prinsip Utama Algoritma Greedy
Prinsip utama algoritma greedy adalah “take what you can get now!”. Maksud dari prinsip tersebut adalah sebagai berikut: Pada setiap langkah dalam algoritma greedy, kita ambil keputusan yang paling optimal untuk langkah tersebut tanpa memperhatikan konsekuensi pada langkah selanjutnya. Sebagai contoh, jika kita manggunakan algoritma Greedy untuk menempatkan komponen diatas papan sirkuit, sekali komponen telah diletakkan dan dipasang maka tidak dapat dipindahkan lagi. Kita namakan solusi tersebut dengan optimum lokal. Kemudian saat pengambilan nilai optimum lokal pada setiap langkah, diharapkan tercapai optimum global, yaitu tercapainya solusi optimum yang melibatkan keseluruhan langkah dari awal sampai akhir.
%PDF-1.4 %âãÏÓ 17 0 obj<> endobj xref 17 25 0000000016 00000 n 0000001050 00000 n 0000000796 00000 n 0000001130 00000 n 0000001309 00000 n 0000001452 00000 n 0000002070 00000 n 0000002480 00000 n 0000002872 00000 n 0000003368 00000 n 0000003402 00000 n 0000003665 00000 n 0000003910 00000 n 0000004172 00000 n 0000004427 00000 n 0000004503 00000 n 0000005744 00000 n 0000006830 00000 n 0000007861 00000 n 0000008847 00000 n 0000009925 00000 n 0000010954 00000 n 0000012026 00000 n 0000012659 00000 n 0000015328 00000 n trailer <<66eb4a2eeb4c3e4fac78d63d0b13a20a>]>> startxref 0 %%EOF 19 0 obj<>stream xÚb```¢V�_ ce`aà˜Á°ûŒ@CJT†¹Ó5Šm’´äÚõ«d¼�klY»~X¦ƒ��QP4££�AÐ%-££¢Ø™¶ i1 –‹(m˜È�ËäÁXÁ˜Æx(ò”á2Æ»Z,ÛYd˜Ÿ2ï`a~ÌÂÇÎå=UOßœáÃo††yPWð00šV i& ¶0 4%³ endstream endobj 18 0 obj<> endobj 20 0 obj<> endobj 21 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 22 0 obj<> endobj 23 0 obj<> endobj 24 0 obj<> endobj 25 0 obj<> endobj 26 0 obj[/ICCBased 40 0 R] endobj 27 0 obj<> endobj 28 0 obj<> endobj 29 0 obj<> endobj 30 0 obj<> endobj 31 0 obj<> endobj 32 0 obj<>stream H‰|UÁnÛ8½û+x¤ ‹!)Š’ö”¤)Š¶»Àb«[Ѓb+Žb[$yýöÔ¿ÛÇÊN¼è"ˆÉÉ7oÞ‡W¾±·õ⪮0¢~\£lY•Bãož�«Jd^åNÔû…ü׫ðóÏBŠ¤~^d…ÊtQ‰T+óLÔwiÂ�]DΔÉmÁÈqn1qVøªRÞ6ŽÀåÍnsºi߈ˆãÇ)ï² ðAîtößËCÛ®“Ô«J~K¾ÖŸ^ù¶ªr>ž G2Žðé"Dq/űŸŽÛ1—RüÑ&Nå²�Ãi¡é… è4Se¢©QÆU~Æ `+žY†ý½ë§fĹº^Ú~ÝnYIFq*Ë#w†0.d}•²Lg¬^œ[�)í„ϲÓfÖϹ™„‰$>‰W™ü›\7‰‘}ŒBŠ?y¡Ù'Ì‚¿Ãàd‹m�´Ú%H’ì×|†7íèÛÏ%s{ø¶¥€ ؼZÛ™K¨�À¥7C×B‘uó}™¤9`D’òÝ�s9tãtx<ÇñG”Z+§uÉ2ýB¤’EªPL\`<³™SÐÀc À\^Å)÷¨mNR-—ÍÃahÀ%“~¡Ôгc’XÞ£à1 š|Üí)t,�–kdø/ä6(Çßš1 bó:Ÿú| ŒþxŒ®Ròvw§âÒ ‚Š+?—�y›�ëÀû.É‘'Tƒ|i¤híž¾ypë£×:DWÊvÛw[ñ±‡W/!p r?uØmå–pšeØ|3XÈ}àXÊ1n%Ê–øû`x¢†.zÞöZÛÑöæ· }`çë#�·P:·ÿ‰Öøsšâý´SâÜxÜÃv|†•MdjÈÒô»¤â„OÔl°É��ÝåpWU\Nöÿ/]ŠöT™Ì^rÓgn6–õûtŸ”A@Îm·ûMt Zâ!�ø9PÈèW'©ÅÀŸJ6®Ç¤@ÉMÇuò¤r,5tW€.pÓ g±¨:ª¾éAq±T·þ¹|]g_¬_žŒëÀÑ!�G2×¼ÖRÏÆDÜÇÄ 4U÷ ›6ší‡cùž„bZ²ÄWïF/V#7+1®zä¸ÊЪ^éHê9Ò] R•ÐÀ„ëæd¦+ž¸k.±î‘äsÝö4-¹ I=«ÍúLl?Ä}ЉÊ$Eß×ëñ,X‘¥ÊÃ#W©ðî)g*ŒC»x/ãeKÉ y öv~Ósë—?¨„R‹Z°¶¼¬²S�¹_wu~mó/*=·é¹�ÞË›‡ ºšB]yjÇ——”bõõE«¼¬êË�¢C4ÉóœÇ¶í}¼{Ÿé%lùæ‡ç†RÆŠ.y\™î:ý/16<ž›øaDÙ”ó¾¡wÒÈM(ÅLŠ©žã�5êBHhDcKø;62ö
Penentuan Jalur Terpendek Dengan Algoritma Greedy
Salah satu contoh dari penyelesaian masalah dengan algoritma greedy yaitu mencari jarak terpendek dari peta
Misalkan kita ingin bergerak dari titik A ke titik I, dan kita telah menemukan beberapa jalur dari peta:
Dari peta yang ditampilkan di atas, dapat dilihat bahwa terdapat beberapa jalur dari titik A ke titik I. Sistem peta pada gambar secara otomatis telah memilih jalur terpendek (berwarna biru). Kita akan mencoba mencari jalur terpendek juga, dengan menggunakan algoritma greedy.
Graph Sederhana dari Titik A ke I
Dari gambar di atas, kita dapat melihat bagaimana sebuah peta jalur perjalanan dapat direpresentasikan dengan menggunakan graph, spesifiknya Directed Graph (graph berarah). Maka dari itu, untuk menyelesaikan permasalahan jarak terpendek ini kita akan menggunakan struktur data graph untuk merepresentasikan peta. Berikut adalah graph yang akan digunakan:
Graph Berarah dari Titik A ke I
Graph Berarah Beserta Jarak Masing-Masing Titik dari Titik A ke I
Untuk mencari jarak terpendek dari A ke B, sebuah algoritma greedy akan menjalankan langkah-langkah seperti berikut:
a. Kunjungi satu titik pada graph, dan ambil seluruh titik yang dapat dikunjungi dari titik sekarang.
b. Cari local maximum ke titik selanjutnya.
c. Tandai graph sekarang sebagai graph yang telah dikunjungi, dan pindah ke local maximum yang telah ditentukan.
d. Kembali ke langkah 1 sampai titik tujuan didapatkan.
Dengan menggunakan algoritma greedy pada graph di atas, hasil akhir yang akan didapatkan sebagai jarak terpendek adalah A-C-D-G-I. Hasi jarak terpendek yang didapatkan ini tidak tepat dengan jarak terpendek yang sebenarnya (A-B-H-I). Algoritma greedy memang tidak selamanya memberikan solusi yang optimal, dikarenakan pencarian local maximum pada setiap langkahnya, tanpa memperhatikan solusi secara keseluruhan.
This program is Free Software: You can use, study, share and improve it at your will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
%PDF-1.4 %âãÏÓ 1471 0 obj<> endobj xref 1471 33 0000000016 00000 n 0000001555 00000 n 0000000978 00000 n 0000001850 00000 n 0000001992 00000 n 0000002404 00000 n 0000002854 00000 n 0000003189 00000 n 0000003480 00000 n 0000003851 00000 n 0000004344 00000 n 0000004762 00000 n 0000004800 00000 n 0000005041 00000 n 0000005288 00000 n 0000005545 00000 n 0000005623 00000 n 0000007858 00000 n 0000009918 00000 n 0000010324 00000 n 0000010588 00000 n 0000012636 00000 n 0000014934 00000 n 0000017059 00000 n 0000018984 00000 n 0000019030 00000 n 0000020965 00000 n 0000023412 00000 n 0000026083 00000 n 0000038929 00000 n 0000039186 00000 n 0000039415 00000 n 0000001347 00000 n trailer <<031404e8d3f5364baaa03da14fe11acc>]>> startxref 0 %%EOF 1473 0 obj<>stream xÚb```b``=ÉÀÊÀ }„�Ÿø�bl,78Þo˜÷Ž‰i±C[©k’*‡OnE‡oÄ-ªT�Ññ 3@>áDúÂçžVÎÒL˜dÄ%ó…!ôO[•\‰Ò“ž/ìZm*¬Þ»d1„BLbRË SJJÆÆÆf`AFAAA!·¸]l @Â-á àe`œµH˱XD èì¬7xM�_ì𸱆��Y‡ƒw+“ªógÆÆ#ònš ^?`bÞÒ™)2é„Û îâ ê K¢0^á*aàiÐ\�ÂpˆQ•‹�qÜ£šL1 7 ËÁˆ¥˜8-ÀáĬQ` ¤JÄ endstream endobj 1503 0 obj<>/W[1 1 1]/Type/XRef/Index[46 1425]>>stream xÚìÑ1 0ð40Ê}\G£‡°ÚM“Ñ•æyÀC
%PDF-1.5 %âãÏÓ 7 0 obj << /Type /FontDescriptor /FontName /Times#20New#20Roman,Italic /Flags 32 /ItalicAngle -16.4 /Ascent 891 /Descent -216 /CapHeight 694 /AvgWidth 402 /MaxWidth 1831 /FontWeight 400 /XHeight 250 /Leading 42 /StemV 40 /FontBBox [-498 -216 1333 694] >> endobj 8 0 obj [250 0 0 0 0 833 778 214 333 333 0 0 250 333 250 0 500 500 500 500 500 500 0 500 500 500 333 0 0 0 0 0 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 0 0 0 0 0 0 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 6 0 obj << /Type /Font /Subtype /TrueType /Name /F2 /BaseFont /Times#20New#20Roman,Italic /Encoding /WinAnsiEncoding /FontDescriptor 7 0 R /FirstChar 32 /LastChar 122 /Widths 8 0 R >> endobj 10 0 obj << /Type /FontDescriptor /FontName /Times#20New#20Roman /Flags 32 /ItalicAngle 0 /Ascent 891 /Descent -216 /CapHeight 693 /AvgWidth 401 /MaxWidth 2614 /FontWeight 400 /XHeight 250 /Leading 42 /StemV 40 /FontBBox [-568 -216 2046 693] >> endobj 11 0 obj [250 0 0 0 0 833 778 0 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 0 564 564 564 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 0 333 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444] endobj 9 0 obj << /Type /Font /Subtype /TrueType /Name /F1 /BaseFont /Times#20New#20Roman /Encoding /WinAnsiEncoding /FontDescriptor 10 0 R /FirstChar 32 /LastChar 122 /Widths 11 0 R >> endobj 13 0 obj << /Type /FontDescriptor /FontName /Times#20New#20Roman,Bold /Flags 32 /ItalicAngle 0 /Ascent 891 /Descent -216 /CapHeight 677 /AvgWidth 427 /MaxWidth 2558 /FontWeight 700 /XHeight 250 /Leading 42 /StemV 42 /FontBBox [-558 -216 2000 677] >> endobj 14 0 obj [250 0 0 0 0 0 0 0 333 333 500 0 250 333 250 0 500 500 500 500 500 500 500 500 500 500 333 0 0 0 0 0 0 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 0 722 556 667 722 722 1000 722 722 667 333 0 333 0 0 0 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 12 0 obj << /Type /Font /Subtype /TrueType /Name /F3 /BaseFont /Times#20New#20Roman,Bold /Encoding /WinAnsiEncoding /FontDescriptor 13 0 R /FirstChar 32 /LastChar 121 /Widths 14 0 R >> endobj 16 0 obj << /Type /FontDescriptor /FontName /Times#20New#20Roman,BoldItalic /Flags 32 /ItalicAngle -16.4 /Ascent 891 /Descent -216 /CapHeight 677 /AvgWidth 412 /MaxWidth 1948 /FontWeight 700 /XHeight 250 /Leading 42 /StemV 41 /FontBBox [-547 -216 1401 677] >> endobj 17 0 obj [250 0 0 0 0 0 0 0 0 0 0 0 0 0 250 0 500 500 500 500 500 500 0 0 0 500 333 0 0 0 0 0 0 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 0 667 556 611 722 667 0 667 611 611 0 0 0 0 0 0 500 500 444 500 444 0 500 0 278 0 500 0 778 556 500 0 500 389 389 278 556 0 667 0 444] endobj 15 0 obj << /Type /Font /Subtype /TrueType /Name /F4 /BaseFont /Times#20New#20Roman,BoldItalic /Encoding /WinAnsiEncoding /FontDescriptor 16 0 R /FirstChar 32 /LastChar 121 /Widths 17 0 R >> endobj 20 0 obj << /Filter /FlateDecode /Length 31666 /Length1 73708 >> stream xœì{X”Õö÷Zû}‡n*ˆÃÌ0æ *¢©7ÑPAÁµñ^‰™Y^ÒLÅLŽuì^–],Sí(^J%Ën†—LíXZVšéÑî…÷ûí=@h�ÿÿü¿çû¾çùž§Ù³~ï~÷^û¶öZk¯1…tòdæÈ^°j÷¢Êj"Ûžì̬~iŸ XM´þn"žš�—›ïÍ5…m8G”ûAvþ°ôÕ‘y&"c‘ý£ÜüĤïN}ö xßF¯Å7d*L¾=ï+¢ÖhÓò¡Ò)%eË?ŸH¿<5¥3¦;]¾/ž(¥’Èïèø² S~ yô{¢kn!²<;¡¤¼ŒÜä�ù€ŸB&ÜrçøïˆìC”:‘(èõ‰ãJÆ~vaíGèk ê“'¢ ¨’.âý^¼·Ÿ8eúÌMã;N$:…�½åÖÒ’Ø—bÀ;P¾5¥dfYðÿÉà—ý;¦Œ›^ò»OÛÂ{áÔ’)ã~»è†,ŠCˆºÜ^vkùôú¶4óY,ù˦�+«‹~º†( õ~³IÊÒï«ñ/nž7h´µ÷�ÉÏ꼕/Ëç�'¿`cFÝ[~,Lëbò}ðô{©îQlÂ>cFýx¿ ä$35ÿh’Çÿ;šG!Ômž‰4m,Ïâ�IÓ÷q%™ÈbzÌÔ•¢Ù¦žyZ �¡&“0ëþB˜üuý$µ0<43Ã7.QÁ rŽØ÷õÓõsäLÄñÎ?£÷1ú ¹R²èûh‚äÆS6ü•/pöçbN5¢Šêx=òÜ�OÒ{ì¡s´–>c'�æ9¼•ãØÎ'ù.ú”vÑË|œm”I£é,=FÅ´�>¡r:OïÓRZŒ‘Jè•P _Ë‘dÐ/TÈ]é°ðÃ2ƒy‰1C¤ÑêN¿Q-}D'è0•Ñ›4í÷��¦Ó)ã¥Mt”3ÙŸ¾¦Ó4…¢é<׉Þ<Ž;Q$F?‹‘1úßÑ,ý†þ|©¦!¡·Æ„ÕúÒË"�Ç¡ÿ}ü-VZ"åaìÔZAÇvQõ£/éAz…¦ñ ¬ÍK»©š6ǹ/�¤>4€ÆÓG| Kèaª£¡´õÓ0§H¬ùn*á`šÊ¯ó|ÍÌÛ9�ÇNvEo.^ÌO`ÍÝù:1„¾¥M…ÅŠŠ!=_:$GÊD5"\á=ı’竈}è>ȨÒ9LçEoº ÜÐÚnœÂî½ÄwñP.§™4•nWû.Å}’9«äý‹ÖÒÛARn�áý&Œþ‘¢Å蹑J 7I‡ ·HJúÁ~f*Š„AªIÅjæ;ÙÌÉ�êÃtȘÁa¼Lj:Ïn$‰ÐªUô(½È^Zc|+lÂ&ÑG�‰g›äö½ý»ü¿Ob��OeeÖZ�½‰ƒj˜IvlÊn¡§ÙJ#È[œ,j`ÅÐqÁù"ço•œ%×(%IR®�TÝ•$åü;½ k�ú¼”^o’ç|ªTòl”©’']h”e“L�ÍÉ==¡Æ�‚Æõƒ¸Y–7’¬‡~�C/#h6ÝAwÑ|~„»Y¶º•FÑjúž#¡©ÒR§bÞ‡••.¥žÊFŸÄ<Êa§{°Ÿ]aŸ!”ëŠ=L¦%"Ž¥†~âE´„í"60œªè{¾s¿“[¡v7ÕÓk\‡Ü)Ðkè7èsµzé:PJ–AóïP3�Z ØMÒ2xHfà›ÅYHâH¶�r!� ¤�†�6«¨ †©öíÁÑŽ^¦!HdWíOQ9¼Åo$=ëNø‰rúFµ_ŽúÑô4¹èz´*Cëß`ob~“©z)CóÀ-o y°;S!‹¯D[ÞÏûE„ˆmEŒˆÑ�¿–\.f‹t}?Ë_Ð~z�Ûr ÕŠ>ÂÊyÜYô„oØOÄE7nϨ–'°àù<¼Ó «5ìáÎÝy ‰><-N"բΗö«ÔÐ3ïåÇѯC¿eŸªÇ¦þà^@�àÉ"ƒï‡æ¶gy4ê_£¦ý{šIy¿¿_©…ÆB•¶Õ{׆÷+’¸A‹E™ÒÒÿ 5·¤?£ÿdWZ›¢&û‘m¯"i/�¤æ ÛüaÕ>±"E%�VÚ! -Ë -’Ê©}Ôóè[!MÁhß(ëóF¢'vv;öÙ Ÿñ5βє¿³ Ú� Ÿsþ_Z‚Än´gìeøßG èXìc/�à”¤l¨ãí�Ý3(O¼œ6ÓQã$ÚØÿ="–³°ç™Ü^,{ô#,üZûlé(�¡§è;ãgœ™§iÿJ-)”Á#·2¾ÄŠ¢�z̲¹M~æS§|šô[‡!eI©ãk+ëb éÍ®ÞÍÆ�hîá@M»Òpz ,WIl:ä´;×ÐËa%?Wó]V»u™¶Ãª»Ó‡ðÖû`�#·>àUú˜"QJ1'BõËd_uõoŠ0x›‡‘Ú¯b¼\ôøÚ?™<,á%tŒÝØÓ°/…ðè~îÆr—.q üS:âÖÌîQ¬æ$xòÝtÒV[Îýémœ±Gib¡ëTzŠí4 gI;ãlØŸ7ò&~›âj¤Wùs^͘ڮ™ÅQ$�è ‰¿LË9Cë…è#�/a‡x9Îü£°®©|F³Á÷ˆü’Hâ¯ø®×À‡òvÄúEÅÄJÄ}´^ââ…ÑCF*ú@_ñ7‘®iÿ^Äó9kÞÆ}x5΋ù"c†sh¬‹@›b8'·?ßÍ÷À»>ŒHðsD~3¹¸O§Õ" óèù¼¢N½ùQôyYXøö`3͆Q;DUu8C¿¡ñnÈá6Há"ŸçýZ+¬.‚éuȳt{¿Úÿ!4ú"–÷‡jiEÒ�ÈK g0Ã4¬KR£U¬Ç+°Š’þç¤ço-zI/Ñ,ô½k&Ê€Õ¾E_"=ÂIâ Q«ù‹ç¹½ø—H`‡6¹%z'‘ÂÇÄ#âeîÏ•Ü+Þ¯rñ£X'Þ¦âNÀL¤^¢·øJ¬™j¾>æ#ÉHòjú£o?©Ÿ¸"jjN>_]£¼Ocj“J’Rl¤Æµy¬ÚœäžIjŒ_›Å±WSS\›25Ä·:¤{©Y\fÀ£KjŒÃàÿÕ ½Tc,©^ä4Êv`;¯J™ )ä¦DNþ=ÑJz—n€vuF¯K®J+!›�Оöˆ†ÐND_‘Lªmc½pªYš—™®Lð?ó0Z"ôçÊ”E÷—/˹¸¡�;e\(#CĆ&øXy›"÷½ößñ¿[Ë2öŸôž)¶Àm�Ç‹oÖw1@—@ân1Mt…'ÚÏËà¥6ò‘†ÖûâØB�& ܉xVæºb7ÑDZÉŸð k³ùÈÒ,™´MŽõ iqm‰º³>ÃÃ1â>x–üßÃor¯.xÛÇ8F‰*ñ>×ð{Šøm€xž½+¿ÆµàÒÄ9Œ ö‹Ûåà–2–ž…-½Žt·ìIÜÀ�Ðõ!�÷6µ—_Ò<Þæ3p^Ï=é;Üú‚pj_V·äóйíðÒ#–ƒc?Ùy§È;"ÄünýÏ]0¼ö< 3œÇŸ‹0~Ží…�ƒ¼¾…Ÿ~÷ÈÝðá¿áFô%_CøEøðM¨ûŽ¥£Ì""ù x?à7púñiÞ†s¢#ú|�Ëy-è%¾«:€ø;s
Algoritma greedy adalah algoritma apa pun yang mengikuti metode heuristik dalam pemecahan masalah untuk membuat pilihan optimal secara lokal di setiap tahap.[1] Dalam banyak permasalahan, strategi greedy tidak menghasilkan solusi optimal, tetapi suatu heuristik greedy dapat menghasilkan solusi optimal lokal yang mendekati solusi optimal global dalam jangka waktu yang wajar.
Misalnya, strategi greedy untuk masalah penjual keliling (yang memiliki kompleksitas komputasi tinggi) adalah heuristik berikut: "Pada setiap langkah perjalanan, kunjungi kota terdekat yang belum dikunjungi." Heuristik ini tidak bertujuan untuk menemukan solusi terbaik, tetapi ia berakhir dalam sejumlah langkah yang wajar. Yang mana menemukan solusi optimal untuk masalah yang kompleks biasanya memerlukan banyak langkah yang tidak masuk akal. Dalam optimasi matematis, algoritma greedy secara optimal dapat menyelesaikan masalah kombinatorial yang memiliki sifat matroid dan memberikan hampiran faktor konstan untuk masalah optimasi dengan struktur submodular.
Algoritme greedy menghasilkan solusi yang baik pada beberapa masalah matematis, tetapi tidak pada masalah lainnya. Sebagian besar masalah yang algoritma greedy kerjakan memiliki dua properti:
Dimulai dari A, algoritma greedy yang mencoba menemukan nilai maksimum dengan mengikuti kemiringan terbesar akan menemukan maksimum lokal di "m", tanpa menyadari maksimum global di "M".
Untuk mencapai nilai terbesar, pada setiap langkah, algoritma greedy akan memilih apa yang tampak sebagai pilihan langsung yang optimal, sehingga ia akan memilih 12 dan bukannya 3 pada langkah kedua, dan tidak akan mencapai solusi terbaik, yaitu 99.
Algoritme greedy gagal menghasilkan solusi optimal untuk banyak masalah lain dan bahkan mungkin menghasilkan solusi unik yang paling buruk . Salah satu contohnya adalah masalah travelling salesman yang disebutkan di atas: untuk setiap jumlah kota, terdapat penetapan jarak antar kota dimana heuristik tetangga terdekat menghasilkan tur terburuk yang mungkin terjadi.[3] Untuk kemungkinan contoh lainnya, lihat efek cakrawala.
Algoritme greedy dapat dikategorikan sebagai algoritma yang 'berpandangan sempit', dan juga 'tidak dapat dipulihkan'. Algoritma ini hanya ideal untuk permasalahan yang memiliki 'substruktur optimal'. Meskipun demikian, untuk banyak masalah sederhana, algoritma yang paling cocok adalah algoritma greedy. Namun, penting untuk dicatat bahwa algoritma greedy dapat digunakan sebagai algoritma seleksi untuk memprioritaskan pilihan dalam pencarian, atau algoritma branch-and-bound. Ada beberapa variasi pada algoritma serakah:
Algoritma greedy memiliki sejarah panjang dalam studi optimasi kombinatorial dan ilmu komputer teoretis. Heuristik serakah diketahui memberikan hasil yang kurang optimal pada banyak masalah,[4] sehingga pertanyaan yang wajar adalah:
Sejumlah besar literatur menjawab pertanyaan-pertanyaan ini untuk kelas masalah umum, seperti matroid, serta untuk masalah khusus, seperti set cover.
Matroid adalah struktur matematika yang menggeneralisasi konsep independensi linier dari ruang vektor ke himpunan sembarang. Jika suatu masalah optimasi mempunyai struktur matroid, maka algoritma greedy yang sesuai akan dapat menyelesaikannya secara optimal.[5]
Sebuah fungsi f {\displaystyle f} didefinisikan pada himpunan bagian dari suatu himpunan Ω {\displaystyle \Omega } disebut submodular, jika untuk setiap S , T ⊆ Ω {\displaystyle S,T\subseteq \Omega } kita mempunyai f ( S ) + f ( T ) ≥ f ( S ∪ T ) + f ( S ∩ T ) {\displaystyle f(S)+f(T)\geq f(S\cup T)+f(S\cap T)} .
Misalkan seseorang ingin mencari sebuah himpunan S {\displaystyle S} yang memaksimalkan f {\displaystyle f} . Algoritma greedy, yang membangun satu himpunan S {\displaystyle S} dengan menambahkan elemen secara bertahap yang meningkatkan f {\displaystyle f} paling banyak pada setiap langkah, menghasilkan keluaran sebuah himpunan yang paling sedikit ( 1 − 1 / e ) max X ⊆ Ω f ( X ) {\displaystyle (1-1/e)\max _{X\subseteq \Omega }f(X)} .[6] Artinya, keserakahan bermain dalam faktor konstan ( 1 − 1 / e ) ≈ 0.63 {\displaystyle (1-1/e)\approx 0.63} sama baiknya dengan solusi optimal.
Jaminan serupa dapat dibuktikan ketika kendala tambahan, seperti batasan kardinalitas, [7] diterapkan pada keluaran. Meskipun sering kali diperlukan sedikit variasi pada algoritma greedy. Lihat[8] untuk ikhtisarnya.
Masalah lain yang mana algoritma greedy memberikan jaminan yang kuat, tetapi bukan solusi optimal, termasuk
Banyak dari permasalahan ini memiliki batas bawah yang sesuai, yaitu algoritma greedy tidak berkinerja lebih baik daripada jaminan dalam kasus terburuk.
Algoritme greedy biasanya (tetapi tidak selalu) gagal menemukan solusi optimal secara global karena algoritma tersebut biasanya tidak beroperasi secara mendalam pada semua data. Algoritma jenis ini dapat membuat komitmen pada pilihan-pilihan tertentu terlalu dini, sehingga mencegah mereka untuk menemukan solusi terbaik secara keseluruhan nantinya. Misalnya, semua algoritma pewarnaan serakah yang diketahui untuk masalah pewarnaan graf dan semua masalah NP-lengkap lainnya tidak secara konsisten menemukan solusi optimal. Namun, algoritma jenis ini berguna karena mereka cepat berpikir dan sering memberikan hampiran yang baik secara optimal.
Jika algoritma greedy dapat dibuktikan menghasilkan optimal global untuk kelas masalah tertentu, biasanya algoritma ini menjadi metode pilihan karena lebih cepat dibandingkan metode optimasi lain seperti pemrograman dinamis. Contoh algoritma greedy tersebut adalah algoritma Kruskal dan algoritma Prim untuk mencari pohon rentang minimum serta algoritma untuk mencari pohon Huffman optimal.
Algoritmq greedy juga muncul di perutean jaringan. Dengan menggunakan routing serakah, sebuah pesan diteruskan ke node tetangga yang “paling dekat” dengan tujuan. Gagasan tentang lokasi sebuah node (dan karenanya "kedekatan") dapat ditentukan oleh lokasi fisiknya, seperti dalam perutean geografis yang digunakan oleh jaringan ad hoc . Lokasi mungkin juga merupakan konstruksi buatan seperti dalam perutean dunia kecil dan tabel hash terdistribusi.
��ࡱ� > �� � ���� ���� � � � � ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �� �( � � � � J ; �D � � F i l e L a i n � l a n j u t 1 . p p t �F � � K n a p S a c k � k n a p s a c k . p p t x �V � �" A l g o r i t m a K r u s k a l � k r u s k a l . p p t x �V � �" A l g o r i t m a K r u s k a l � k r u s k a l . p p t x �V � �" A l g o r i t m a K r u s k a l � k r u s k a l . p p t x �J � ! � A l g o r i t m a P r i m � p r i m . p p t x �J � $ � A l g o r i t m a P r i m � p r i m . p p t x �F � ' � D i j k s t r a � d j i k s t r a . p p t x �D � , � F i l e L a i n � l a n j u t 1 . p p t �F � / � K n a p S a c k � k n a p s a c k . p p t x �V � 1 �" A l g o r i t m a K r u s k a l � k r u s k a l . p p t x �J � 7 � A l g o r i t m a P r i m � p r i m . p p t x �F � ; � D i j k s t r a � d j i k s t r a . p p t x �� / � 0 � �� �D A r i a l H�� x�b��� X�� ��� ��� l�� `�� u�b`�� � �D C a l i b r i x�b��� X�� ��� ��� l�� `�� u�b`�� � " �D W i n g d i n g s ��� X�� ��� ��� l�� `�� u�b`�� � 0 �D S y m b o l g s ��� X�� ��� ��� l�� `�� u�b`�� � @ �D C o u r i e r N e w X�� ��� ��� l�� `�� u�b`�� � 1P �D T i m e s N e w R o m a n ��� ��� l�� `�� u�b`�� � � � @ � . � @ �n ��? " d � d @ ��� �� �� @@ `` �� H �@ �� l a � �0 � � �� � � �� � @ � � � � � �* ���� ʚ;��� ʚ; <
Algoritma adalah langkah dalam mencari solusi atas sebuah masalah. banyak sekali algoritma yang dapat kita gunakan dalam membangun sebuah program , salah satunya adalah algoritma greedy.
Algoritma greedy merupakan metode yang paling populer untuk memecahkan persoalan optimasi. Greedy sendiri diambil dari bahasa inggris yang artinya rakus, tamak atau serakah .Prinsip algoritma greedy adalah: “take what you can get now!”.
– Memilih beberapa jenis investasi (penanaman modal) – Mencari jalur tersingkat dari Bandung ke Surabaya – Memilih jurusan di Perguruan Tinggi – Bermain kartu remi
Algoritma greedy membentuk solusi langkah per langkah (step by step). Terdapat banyak pilihan yang perlu dieksplorasi pada setiap langkah solusi. Oleh karena itu, pada setiap langkah harus dibuat keputusan yang terbaik dalam menentukan pilihan. Keputusan yang telah diambil pada suatu langkah tidak dapat diubah lagi pada langkah selanjutnya.
Persoalan optimasi (optimization problems): persoalan yang menuntut pencarian solusi optimum. Persoalan optimasi ada dua macam: Maksimasi (maximization) dan Minimasi (minimization) Solusi optimum (terbaik) adalah solusi yang bernilai minimum atau maksimum dari sekumpulan alternatif solusi yang mungkin. Elemen persoalan optimasi: kendala (constraints) danfungsi objektif(atau fungsi optiamsi)
Solusi yang memenuhi semua kendala disebut solusi layak (feasible solution). Solusi layak yang mengoptimumkan fungsi optimasi disebut solusi optimum. Untuk LA kali ini saya akan menjelaskan program pengambilan koin, yang menggunakan algoritma greedy. Bahasa pemrograman yang saya gunakan adalah bahasa C++, dan software yang digunakan adalah borland C.
Keep your knowledge by sharing to everyone
Contoh Pseudocode Algoritma Greedy
• Contoh (1) : tinjau masalah penukaran uang.
(a) Koin: 5, 4, 3, dan 1
Uang yang ditukar = 7.
Solusi greedy: 7 = 5 + 1 + 1 ( 3 koin) → tidak optimal
Solusi optimal: 7 = 4 + 3 ( 2 koin)
(b) Koin: 10, 7, 1
Uang yang ditukar: 15
Solusi greedy: 15 = 10 + 1 + 1 + 1 + 1 + 1 (6 koin)
Solusi optimal: 15 = 7 + 7 + 1 (hanya 3 koin)
(c) Koin: 15, 10, dan 1
Uang yang ditukar: 20
Solusi greedy: 20 = 15 + 1 + 1 + 1 + 1 + 1 (6 koin)
Solusi optimal: 20 = 10 + 10 (2 koin)
Penyelesaian dengan exhaustive search
— Terdapat 2n kemungkinan solusi
(nilai-nilai X = {x1, x2, …, xn} )
— Untuk mengevaluasi fungsi obyektif = O(n)
— Kompleksitas algoritma exhaustive search seluruhnya = O(n × 2n ).
Strategi greedy: Pada setiap langkah, pilih koin dengan nilai terbesar dari himpunan koin yang tersisa
menentukan solusi optimum dari persoalan optimasi dengan algoritma greedy
Masukan: himpunan kandidat C
Keluaran: himpunan solusi S
while (∑(nilai semua koin didalam S) ≠ A) and (C ≠ {} ) do
x ← Koin yang mempunyai nilai terbesar
if (∑ (nilai semua koin didalam S) + nilai koin x ≤ A then
if (∑ (nilai semua koin didalam S) = A then
write (“tidak ada solusi”)
procedure PenjadwalanPelanggan(input n:integer)
{ Mencetak informasi deretan pelanggan yang akan diproses oleh server tunggal
Masukan: n pelangan, setiap pelanggan dinomori 1, 2, …, n
Keluaran: urutan pelanggan yang dilayani
{pelanggan 1, 2, …, n sudah diurut menaik berdasarkan ti}
write(‘Pelanggan ‘, i, ‘ dilayani!’)
• Contoh (3) : Algoritma Greedy mencari jarak terpendek dari peta
Misalkan kita ingin bergerak dari titik A ke titik B, dan kita telah menemukan beberapa jalur dari peta.
Untuk mencari jarak terpendek dari A ke B, sebuah algoritma greedy akan menjalankan langkah-langkah seperti berikut:
Kunjungi satu titik pada graph, dan ambil seluruh titik yang dapat dikunjungi dari titik sekarang. 1 Cari local maximum ke titik selanjutnya. 2 Tandai graph sekarang sebagai graph yang telah 3 dikunjungi, dan pindah ke local maximum yang telah ditentukan. 4 Kembali ke langkah 1 sampai titik tujuan didapatkan.
Dengan menggunakan algoritma greedy pada graph di atas hasil akhir jarak terpendek adalah ACDEFB. Hasil jarak terpendek ini sbenarnya tidak tepat dengan jarak pendek sebenarnya(A-G-E-F-B). Maka dari aalgoritma yang tidak selamanya benar namu algoritma yang mendekati nilai kebenaran.
Pemecahan Masalah dengan Algoritma Greedy
Strategi greedy untuk memilih job:
Pada setiap langkah, pilih job i dengan
pi yang terbesar untuk menaikkan nilai
(p1, p2, p3, p4) = (50, 10, 15, 30)
(d1, d2, d3, d4) = (2, 1, 2, 1)
Solusi optimal: J = {4, 1} dengan F = 80.
Function JobSchedulling(input C : himpunan_job) → himpunan_job
{menghasilkan barisan job yang akan diproses oleh mesin}
J: himpunan_job {solusi}
i ← job yang mempunyai p [i] terbesar
if (semua job di dalam J ᴜ {i} layak) then
0%0% menganggap dokumen ini bermanfaat, Tandai dokumen ini sebagai bermanfaat
0%0% menganggap dokumen ini tidak bermanfaat, Tandai dokumen ini sebagai tidak bermanfaat
Skema umum Algoritma Greedy
Algoritma greedy disusun oleh elemen, dan elemen-elemen yang digunakan dalam penerapan algoritma greedy antara lain :
Himpunan yang berisi elemen pembentuk solusi.
Himpunan yang terpilih sebagai solusi persoalan.
Fungsi yang memilih kandidat yang paling mungkin untuk mencapai solusi optimal.
Fungsi yang memeriksa apakah suatu kandidat yang dipilih dapat memberikan solusi yang layak. Maksudnya yaitu apakah kandidat tersebut bersama dengan himpunan solusi yang sudah terbentuk tidak melanggar kendala yang ada.
Fungsi yang mengembalikan nilai boolean. True jika himpunan solusi yang sudah tebentuk merupakan solusi yang lengkap; False jika himpunan solusi belum lengkap.
Fungsi yang mengoptimalkan solusi.
Di dalam mencari sebuah solusi (optimasi) algoritma greedy hanya memakai 2 buah macam persoalan Optimasi,yaitu: