Teknik Algoritma Greedy Adalah Teknik Menyelesaikan Persoalan Secara

Teknik Algoritma Greedy Adalah Teknik Menyelesaikan Persoalan Secara

Computational Thinking

Saat ini, kita sebagai manusia diberikan anugrah dapat berpikir untuk mencari jawaban dari suatu permasalahan. Seiring berjalannya waktu cara berpikir manusiapun ikut mengalami perubahan. Perkembangan Teknologi Informasi memberikan dampak terhadap cara berpikir kita yang saat ini cenderung menjadi lebih cepat dan mudah. Saat ini terdapat istilah Computational Thinking atau berpikir komputasional yang mungkin masih banyak diantara kita masih asing dengan istilah tersebut. Pada kesempatan ini akan kita belajar mengenai apa itu berpikir komputasional dan bagaimana tahapan serta pengaplikasiannya dalam membantu kita menyelesaikan persoalan dalam kehidupan sehari-hari.

Pertama, kita belajar tentang apa itu Berpikir komputasional.

Berpikir komputasional merupakan metode pemecahan masalah dengan menerapkan teknologi ilmu komputer atau informatika. Berpikir komputasional juga dapat diartikan sebagai konsep tentang cara menemukan masalah yang ada di sekitar, dengan mengamati lalu mengembangkan solusi pemecahan masalah. Mungkin tidak sedikit orang mengira jika berpikir komputasional haruslah menggunakan aplikasi yang terdapat pada komputer. Namun pada kenyataannya berpikir komputasional juga dapat diterapkan untuk memecahkan masalah di semua disiplin ilmu seperti ilmu pengetahuan alam, humaniora, dan matematika. Istilah Computational Thinking (CT) atau berpikir komputasional pertama kali dikenalkan oleh Seymor Papert di tahun 1980 dan 1996. Kemudian di tahun 2014, pemerintah Inggris memasukkan materi pemrograman ke dalam kurikulum sekolah dasar dan menengah dengan tujuan memperkenalkan berpikir komputasional kepada siswa sejak dini. Bahkan program tersebut juga mendapat dukungan dari Mark Zuckerberg (Facebook), Bill Gates (Microsoft), dan lainnya. Google juga terlibat dalam memberikan fasilitas kepada guru agar dapat menguasai CT yang menjadi salah satu keahlian yang harus dikuasi di abad 21 ini melalui kursus online. Berpikir komputasional sangat dibutuhkan di zaman saat ini. Hal ini berhubungan dengan penyelesaikan masalah yang cenderung lebih sederhana, mudah dan tidak membutuhkan waktu yang banyak. Bahkan model penyelesaikan masalah dapat digunakan untuk model permasalahan lainnya.

Kedua, kita belajar apa manfaat Berpikir Komputasional.

Ada beragam manfaat yang diperoleh dari berpikir komputasional, antara lain:

Ketiga, kita belajar Karakteristik Berpikir Komputasional.

Berpikir komputasional ternyata memiliki beberapa karakteristik, yakni:

Keempat, kita belajar Tahapan Berpikir Komputasional

Cara berpikir komputasional menggunakan berbagai teknik dasar dan tahapan sebagai berikut:

Merupakan metode yang digunakan untuk memecahkan masalah besar dan kompleks menjadi masalah yang lebih kecil, sehingga masalah tersebut menjadi lebih mudah diselesaikan. Tidak hanya itu saja, dekomposisi memberikan kemudahan untuk melakukan sebuah inovasi.

Pengenalan pola tentu menggunakan komputer yang dapat digunakan dalam menemukan keteraturan dalam data serta mendapatkan informasi penting untuk memahami keteraturan yang telah ditemukan.

Tujuan dari pengenalan pola untuk memberikan komputer suatu kemampuan dalam mendeteksi keberadaan objek di lingkungan serta menentukan identitas objek. Di kehidupan sehari-hari pengenalan pola dapat berupa mengenal suara, mengingat wajah manusia hingga memprediksi cuaca.

Abstraksi menjadi proses dari suatu metode berpikir komputasional yang terfokus pada hal-hal relevan dengan masalah yang dihadapi dan mengabaikan hal yang tidak diperlukan dalam menyelesaikan masalah.

Cara berpikir alogaritma merupakan berpikir dengan menggunakan rencana serta langkah instruksi secara sistematis untuk menyelesaikan masalah. Alogaritma sendiri digunakan dalam berbagai proses perhitungan, otomatisasi, hingga pemrosesan data.

Meskipun demikian alogaritma tidak hanya digunakan dalam menulis program komputer saja, namun juga dimanfaatkan dalam memecahkan masalah di kehidupan sehari-hari.

Demikian langkah menyelesaikan persoalan dengan berpikir komputasional. Dimana perihal diatas dapat diterapkan dalam kehidupan kita sehari-hari, sekaligus membiasakan kita supaya dapat selalu berpikir dan menyelesaikan persoalan dengan cara smart.

Untuk dapat berlatih berpikir komputasional kita dapat mengikuti aktivitas yang mengedukasi kemampuan problem solving secara langsung dengan mengunjungi Bebras Challenge Indonesia.

Semoga bermanfaat dan salam sehat serta tetap jaga kesehatan anda dengan mematuhi protokol kesehatan.

F. Denie Wahana, S.Kom.

Guru Informatika SMP Negeri 1 Salatiga

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

0%0% menganggap dokumen ini bermanfaat, Tandai dokumen ini sebagai bermanfaat

0%0% menganggap dokumen ini tidak bermanfaat, Tandai dokumen ini sebagai tidak bermanfaat

Menyelesaikan Player Frustration: Teknik untuk Random Number Generation

Menyelesaikan Player Frustration: Teknik untuk Random Number Generation Jika Anda memulai percakapan dengan penggemar RPG, Anda tidak perlu waktu lama untuk mendengar kata-kata kasar tentang hasil dan penjarahan acak — dan betapa menyebalkannya mereka. Banyak gamer telah membuat iritasi ini dikenal, dan sementara beberapa developers telah menciptakan solusi inovatif, banyak yang masih memaksa kita melalui tes kegigihan yang menyebalkan. Ada cara yang lebih baik. Dengan mengubah cara kita sebagai developers menggunakan angka acak dan generator mereka, kita dapat menciptakan pengalaman menarik yang mendorong kesulitan “perfect” tanpa mendorong pemain melewati batas. Namun sebelum kita membahasnya, mari kita bahas beberapa dasar dari Random Number Generator (atau RNGs singkat). The Random Number Generator dan penggunaannya Random numbers ada di sekitar kita, digunakan untuk menambahkan variasi ke software kita. Secara umum, penggunaan utama RNGs adalah untuk mewakili peristiwa kacau, menunjukkan volatilitas, atau berperilaku sebagai limiter buatan. Anda mungkin berinteraksi dengan random numbers, atau hasil dari tindakan mereka, setiap hari. Mereka digunakan dalam uji coba ilmiah, permainan video, animasi, seni, dan hampir semua aplikasi di komputer Anda. Misalnya, RNG kemungkinan diterapkan dalam animasi dasar di ponsel Anda. Sekarang setelah kita berbicara tentang apa itu RNG, mari kita lihat penerapannya dan bagaimana itu dapat meningkatkan permainan kita . Standar Random Number Generator Hampir setiap bahasa pemrograman menggunakan RNG Standar dalam fungsi-fungsi dasar. Ia bekerja dengan mengembalikan nilai acak antara dua angka. RNG Standar dapat diimplementasikan dalam lusinan cara yang berbeda di seluruh sistem yang berbeda, tetapi mereka semua umumnya memiliki efek yang sama: mengembalikan nomor acak di mana setiap nilai dalam rentang memiliki kesempatan yang sama untuk dikembalikan. Untuk permainan, ini biasanya digunakan untuk mensimulasikan dadu bergulir. Idealnya, mereka hanya boleh digunakan dalam situasi di mana setiap hasil diinginkan untuk terjadi dalam jumlah yang sama. Jika Anda ingin bereksperimen dengan kelangkaan atau tingkat pengacakan yang berbeda, metode selanjutnya ini lebih cocok untuk Anda. Random Numbers Berbobot dan Rarity Slotting Jenis RNG ini adalah dasar untuk RPG apa pun dengan kelangkaan barang. Khususnya, ketika Anda membutuhkan hasil acak tetapi ingin beberapa terjadi dengan frekuensi kurang dari yang lain. Dalam kebanyakan kelas probabilitas, ini biasanya diwakili dengan sekantung kelereng. Dengan RING berbobot, tas Anda mungkin memiliki tiga kelereng biru dan satu warna merah. Karena kita hanya menginginkan satu marmer, kita akan mendapatkan satu marmer, kita akan mendapatkan yang berwarna merah atau biru, tetapi kemungkinan besar warnanya menjadi biru. Mengapa pengacakan berbobot menjadi penting? Mari gunakan acara dalam game SimCity sebagai contoh. Jika setiap peristiwa dipilih menggunakan metode non-weighted , maka potensi untuk setiap peristiwa terjadi secara statistik sama. Itu membuat kemungkinan bagi Anda untuk mendapatkan proposal untuk kasino baru untuk mengalami gempa dalam game. Dengan menambahkan pembobotan, kita dapat memastikan bahwa peristiwa ini terjadi dalam jumlah proporsional yang mempertahankan alur game. Bentuk dan kegunaan Pengelompokan dari item yang sama Dalam banyak program studi ilmu komputer atau buku, metode ini sering disebut sebagai 'bag'. Nama cantik di hidung, menggunakan kelas atau objek untuk membuat representasi virtual kantong harfiah. Kerjanya pada dasarnya seperti ini: ada sebuah wadah yang objek dapat ditempatkan ke tempat mereka disimpan, fungsi untuk menempatkan objek ke dalam 'bag', dan fungsi untuk secara acak memilih item dari 'bag'. Untuk merujuk kembali ke contoh marmer kita, ini berarti bahwa Anda akan memperlakukan bag Anda sebagai berisi satu marmer biru, satu marmer biru, satu marmer biru, dan satu marmer merah. Memanfaatkan metode pengacakan ini, kita dapat secara kasar menentukan tingkat di mana hasil terjadi untuk membantu menyeragamkan pengalaman masing-masing pemain. Jika kita menyederhanakan hasil pada skala dari 'Very Bad' ke 'Very Good', sekarang kita telah membuatnya jauh lebih layak bahwa pemain akan mengalami serangkaian hasil yang tidak diinginkan yang tidak perlu (seperti menerima hasil 'Very Bad' 20 kali berturut-turut). Namun, secara statistik tetap mungkin untuk menerima serangkaian hasil yang buruk, hanya saja semakin sedikit. Kita akan melihat metode yang sedikit lebih maju untuk mengurangi hasil yang tidak diinginkan dalam waktu dekat. Berikut ini contoh pseudocode cepat tentang apa yang mungkin terlihat seperti kelas tas: Class Bag { //Keep an array of all the items that are in the bag Array itemsInBag; //Fill the bag with items when its created Constructor (Array startingItems) { itemsInBag = startingItems; } //add an item to the bag by passing the object (then just push it onto the array) Function addItem (Object item) { itemsInBag.push(item); } //To get a random item return, use a built-in random function to grab an item from the array Function getRandomItem () { return(itemsInBag[random(0,itemsInBag.length-1)]); } } Implementasi Slotting Radar Mirip dengan implementasi pengelompokan dari sebelumnya, slotting kelangkaan adalah metode standarisasi untuk menentukan tarif (biasanya untuk membuat proses desain game dan reward pemain lebih mudah untuk dipelihara). Daripada menentukan tingkat setiap item dalam permainan secara individual, Anda akan menciptakan kelangkaan yang representatif — di mana tingkat 'Common' mungkin mewakili peluang 20 dalam X untuk hasil tertentu, sedangkan 'Rare' mungkin mewakili 1 dalam Kesempatan X. Metode ini tidak banyak mengubah fungsi sebenarnya dari tas itu sendiri, melainkan dapat digunakan untuk meningkatkan efisiensi di bagian akhir pengembang, memungkinkan sejumlah besar item secara eksponensial untuk diberi kesempatan statistik secara cepat. Selain itu, kelangkaan slotting berguna dalam membentuk persepsi pemain, dengan mudah memungkinkan mereka untuk memahami seberapa sering suatu peristiwa mungkin terjadi tanpa menghilangkan perendaman mereka melalui angka-angka. Berikut ini contoh sederhana tentang cara kita menambahkan slotting ke tas kita: Class Bag { //Keep an array of all the items that are in the bag Array itemsInBag; //add an item to the bag by passing the object Function addItem (Object item) { //keep track of the looping related to rarity slots Int timesToAdd; //Check the rarity variable on the item //(but first create that rarity variable in the item class, //preferably with an enumerated type) Switch(item.rarity) { Case 'common': timesToAdd = 5; Case 'uncommon': timesToAdd = 3; Case 'rare': timesToAdd = 1; } //Add instances of the item to the bag according to rarity While (timesToAdd >0) { itemsInBag.push(item); timesToAdd--; } } } Menilai Variabel Random Numbers Kita sekarang membicarakan tentang beberapa cara paling umum untuk menangani pengacakan dalam game, jadi mari kita selesaikan dengan yang lebih canggih. Konsep menggunakan tingkat variabel mulai sama dengan tas dari sebelumnya: kita memiliki sejumlah hasil, dan kita tahu seberapa sering kita menginginkannya terjadi. Perbedaan dengan penerapan ini adalah kita ingin menyesuaikan potensi hasil saat terjadi. Mengapa kita ingin melakukan ini? Ambil, misalnya, permainan dengan aspek yang dapat dikumpulkan. Jika Anda memiliki sepuluh hasil yang mungkin untuk item yang Anda terima, dengan sembilan yang "common" dan satu yang "rare", maka kemungkinan Anda cukup mudah: 90% dari waktu, pemain akan mendapatkan yang umum, dan 10% dari waktu mereka akan mendapatkan yang langka. Masalahnya muncul ketika kita mempertimbangkan banyak penarikan. Mari lihat peluang Anda untuk menggambar serangkaian hasil umum: Pada penarikan pertama Anda, ada 90% kesempatan untuk menggambar umum. Pada dua kali seri, ada peluang 81% untuk menarik semua milik bersama. Dengan 10 kali seri, masih ada kemungkinan 35% dari semua milik bersama. Dengan 20 kali seri, ada peluang 12% dari semua milik bersama. Sementara rasio awal 9: 1 tampaknya menjadi tingkat yang ideal pada awalnya, itu hanya berakhir mewakili hasil rata-rata, dan meninggalkan 1 dari 10 pemain menghabiskan dua kali lebih lama daripada yang dimaksudkan untuk mendapatkan yang langka. Selanjutnya, 4% pemain akan menghabiskan tiga kali lebih lama untuk mendapatkan yang langka, dan 1,5% yang sial akan menghabiskan empat kali lebih lama. Bagaimana Harga Variabel Mengatasi Masalah Ini Solusinya adalah menerapkan rentang kelangkaan pada objek kita. Anda melakukannya dengan menentukan kelangkaan maksimum dan minimum untuk setiap objek (atau slot kelangkaan, jika Anda ingin menggabungkannya dengan contoh sebelumnya). Sebagai contoh, mari kita berikan nilai minimum kelangkaan barang-barang umum kita bersama 1, dengan maksimum 9. Angka langka akan memiliki nilai minimum dan maksimum 1. Sekarang, dengan skenario dari sebelumnya, kita akan memiliki sepuluh item, dan sembilan di antaranya adalah satu contoh umum, sementara salah satunya adalah langka. Pada pengundian pertama, ada 90% peluang untuk mendapatkan yang umum. Dengan tarif variabel sekarang, setelah itu umum ditarik, kita akan menurunkan nilai kelangkaannya sebesar 1. Ini membuat hasil imbang kita berikutnya memiliki total sembilan item, delapan di antaranya umum, memberikan 89% peluang untuk menggambar umum. Setelah setiap hasil umum, kelangkaan barang itu turun, membuatnya lebih mungkin untuk menarik yang langka sampai kita cap keluar dengan dua item dalam tas, satu umum dan satu langka. Padahal sebelumnya ada kemungkinan 35% untuk menggambar 10 commons berturut-turut, sekarang hanya ada 5%

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.

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:

Humas SMP Negeri 1 Salatiga

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

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.