Algoritma Greedy Contohnya

Algoritma Greedy Contohnya

Algoritma adalah sebuah prosedur atau formula matematis yang digunakan untuk memecahkan suatu masalah. Ada berbagai macam jenis algoritma, salah satunya adalah Algoritma Greedy.

Dalam artikel ini, kita akan belajar tentang konsep, karakteristik, aplikasi, contoh, implementasi dan perbandingannya.

b. Perbandingan dengan Divide and Conquer Algorithm

Jika dibandingkan dengan Divide and Conquer Algorithm, Greedy lebih mudah diimplementasikan dan memiliki kecepatan yang lebih cepat dalam menyelesaikan masalah. Namun, Divide and Conquer Algorithm lebih efektif dalam menangani masalah yang lebih kompleks.

Karakteristik Algoritma Greedy

Algoritma Greedy memiliki karakteristik yang unik, yaitu selalu memilih opsi terbaik yang tersedia pada setiap tahap. Hal ini berarti bahwa algoritma ini tidak mempertimbangkan keputusan di masa depan, melainkan hanya memilih opsi yang terbaik pada saat itu.

Secara umum terdapat dua jenis Algoritma ini, yaitu Greedy Terikat (Bound Greedy) dan Greedy Tidak Terikat (Unbound Greedy). Pada Greedy Terikat, mempertimbangkan batasan pada setiap tahap. Sedangkan pada Greedy Tidak Terikat, tidak mempertimbangkan batasan pada setiap tahap.

c. Perbandingan dengan Backtracking Algorithm

Jika dibandingkan dengan Backtracking Algorithm, Greedy lebih efisien dan mudah diimplementasikan. Namun, Backtracking Algorithm lebih fleksibel dalam menyelesaikan masalah yang lebih kompleks.

Huffman Coding Algorithm

Huffman Coding Algorithm digunakan dalam proses kompresi data. Algoritma ini bekerja dengan mengganti setiap simbol dalam data dengan kode biner yang lebih pendek, sehingga mengurangi jumlah bit yang diperlukan untuk menyimpan data.

Dijkstra’s Algorithm digunakan untuk mencari jarak terpendek pada sebuah grafik. Algoritma ini memilih simpul dengan jarak terpendek pada setiap tahap, sehingga mencapai solusi terbaik pada akhirnya.

Kruskal’s Algorithm digunakan dalam proses pengelompokan dan pengurutan data. Algoritma ini bekerja dengan memilih simpul dengan bobot terkecil pada setiap tahap, sehingga menghasilkan solusi terbaik pada akhirnya.

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:

Contoh Algoritma Greedy

Berikut ini adalah beberapa contoh penggunaan:

Kekurangan Algoritma Greedy

Apa Itu Algoritma Greedy?

Sebelum membahas tentang Algoritma ini, perlu diketahui terlebih dahulu apa itu algoritma. Algoritma adalah serangkaian instruksi atau aturan logis yang mengarahkan komputer untuk menyelesaikan tugas tertentu. Sedangkan Algoritma Greedy adalah salah satu jenis algoritma yang memilih langkah terbaik pada setiap tahap, dengan harapan akan mencapai solusi akhir yang optimal. Algoritma ini sangat umum digunakan dalam pemrograman.

Contoh Soal Algoritma Greedy

Contoh soal berikut ini akan menunjukkan bagaimana Algoritma Greedy dapat digunakan untuk menyelesaikan masalah dengan efektif:

Andi ingin mengisi tas dengan sebanyak mungkin barang dengan total berat maksimum 15 kg. Ada 5 barang yang tersedia dengan berat masing-masing:

Tentukan barang mana yang harus dipilih agar nilai total maksimum dapat dicapai.

Pada pembelajaran kita di atas dapat kita simpulkan bahwa Algoritma Greedy merupakan algoritma yang sangat berguna dalam menyelesaikan masalah optimasi. Algoritma ini bekerja dengan memilih opsi terbaik pada setiap tahap, sehingga mencapai solusi terbaik pada akhirnya. Algoritma ini dapat digunakan dalam berbagai bidang, seperti optimasi kombinatorial, kriptografi dan analisis jaringan. Meskipun memiliki kelebihan, Algoritma ini juga memiliki kelemahan yang perlu dipertimbangkan.

Oleh karena itu, dalam mengimplementasikan perlu memahami masalah, membuat struktur data yang sesuai, membuat fungsi Greedy yang tepat dan memeriksa solusi yang dihasilkan. Perbandingan Greedy dengan algoritma lainnya menunjukkan bahwa Greedy lebih sederhana dan cepat dalam menyelesaikan masalah, namun kurang efektif dalam menangani masalah yang lebih kompleks.

Artikel ini merupakan bagian dari seri artikel belajar Kecerdasan Buatan dan jika ada ide topik yang mau kita bahas silahkan komen di bawah ya..

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