Dalam kedua konteks ini mengacu pada penyederhanaan masalah yang rumit dengan memecahnya menjadi sub-masalah yang lebih sederhana secara rekursif. Meskipun beberapa masalah keputusan tidak dapat dipisahkan dengan cara ini, keputusan yang mencakup beberapa titik waktu sering kali pecah secara rekursif. Begitu pula dalam ilmu komputer, jika suatu masalah dapat diselesaikan secara optimal dengan memecahnya menjadi sub-sub masalah dan kemudian secara rekursif mencari solusi optimal untuk sub masalah tersebut, maka dikatakan memiliki substruktur yang optimal.
Jika sub-masalah dapat disarangkan secara rekursif di dalam masalah yang lebih besar, sehingga metode pemrograman dinamis dapat diterapkan, maka ada hubungan antara nilai masalah yang lebih besar dengan nilai-nilai sub-masalah tersebut.[1] Dalam literatur optimasi, hubungan ini disebut persamaan Bellman.
Gambaran
Pengoptimalan matematika
Dalam hal optimasi matematis, pemrograman dinamis biasanya mengacu pada penyederhanaan keputusan dengan memecahnya menjadi urutan langkah-langkah keputusan dari waktu ke waktu. Ini dilakukan dengan mendefinisikan urutan fungsi nilaiV1, V2, ..., Vn mengambil y sebagai argumen yang mewakili keadaan sistem pada waktu i dari 1 sampai n. Definisi Vn(y) adalah nilai yang diperoleh di keadaan y terakhir kali n. Nilai Vi di waktu sebelumnya i = n −1, n − 2, ..., 2, 1 dapat ditemukan dengan bekerja mundur, menggunakan hubungan rekursif yang disebut persamaan Bellman. untuk i = 2, ..., n, Vi−1 di setiap keadaan y dihitung dari Vi dengan memaksimalkan fungsi sederhana (biasanya jumlah) keuntungan dari keputusan pada saat itu i − 1 dan fungsi Vi di keadaan baru sistem jika keputusan ini dibuat. Sejak Vi telah dihitung untuk keadaan yang diperlukan, hasil operasi di atas Vi−1 untuk keadaan tersebut. Akhirnya, V1 pada keadaan awal sistem adalah nilai solusi optimal. Nilai optimal dari variabel keputusan dapat dipulihkan, satu per satu, dengan melacak kembali perhitungan yang telah dilakukan.
Teori kontrol
Dalam teori kontrol, masalah tipikal adalah menemukan kontrol yang dapat diterima yang menyebabkan sistem untuk mengikuti lintasan yang bisa diterima pada interval waktu yang terus menerus yang meminimalkan biaya fungsi.
Solusi untuk masalah ini adalah pengendalian hukum atau kebijakan yang optimal , yang menghasilkan lintasan yang optimal dan sebuah fungsi cost-to-go. Yang terakhir mematuhi persamaan fundamental dari pemrograman dinamis:
persamaan diferensial parsial yang dikenal sebagai persamaan Hamilton-Jacobi-Bellman, di mana dan . Salah satu menemukan meminimalkan istilah dari , , dan fungsi yang tidak diketahui dan kemudian mensubstitusikan hasilnya ke dalam persamaan Hamilton – Jacobi – Bellman untuk mendapatkan persamaan diferensial parsial yang akan diselesaikan dengan kondisi batas .[2] Dalam praktiknya, ini umumnya memerlukan teknik numerik untuk beberapa pendekatan diskrit ke hubungan pengoptimalan yang tepat.
Atau, proses kontinu dapat didekati dengan sistem diskrit, yang mengarah ke analog relasi rekurensi berikut dengan persamaan Hamilton – Jacobi – Bellman:
Pada tahap dari interval waktu diskrit dengan jarak yang sama, dan dimana dan menunjukkan pendekatan diskrit untuk dan . Persamaan fungsional ini dikenal sebagai persamaan Bellman, yang dapat diselesaikan untuk solusi tepat dari pendekatan diskrit persamaan optimasi.[3]
Pemrograman komputer
Ada dua atribut utama yang harus dimiliki masalah agar pemrograman dinamis dapat diterapkan: substruktur yang optimal dan sub-masalah yang tumpang tindih. Jika suatu masalah dapat diselesaikan dengan menggabungkan solusi optimal untuk sub-masalah tidak tumpang tindih, strateginya disebut "divide and conquer".[1] Inilah sebabnya mengapa merge sort dan quick sort tidak diklasifikasikan sebagai masalah pemrograman dinamis.
Substruktur optimal berarti bahwa solusi untuk masalah pengoptimalan yang diberikan dapat diperoleh dengan kombinasi solusi optimal untuk sub-masalahnya. Substruktur optimal seperti itu biasanya dijelaskan melalui rekursi. Misalnya diberi grafik G=(V,E), jalur terpendek p dari sebuah vertex u ke sebuah vertrex v menunjukkan substruktur yang optimal: ambil perantara vertex w di jalur terpendek ini p. Jika p benar-benar merupakan jalur terpendek, kemudian dapat dipecah menjadi sub-jalur p1 dari u ke w dan p2 dari w ke v sedemikian rupa sehingga ini, pada gilirannya, memang merupakan jalur terpendek antara simpul yang sesuai (dengan argumen potong-dan-tempel sederhana yang dijelaskan dalam Introduction to Algorithms). Oleh karena itu, salah satu dapat dengan mudah merumuskan solusi untuk menemukan jalur terpendek secara rekursif, yang dilakukan oleh algoritma Bellman–Ford atau algoritma Floyd–Warshall.
Sub-masalah yang tumpang tindih berarti bahwa ruang sub-masalah harus kecil, yaitu, algoritma rekursif apa pun yang memecahkan masalah harus menyelesaikan sub-masalah yang sama berulang kali, daripada menghasilkan sub-masalah baru. Misalnya, pertimbangkan formulasi rekursif untuk menghasilkan deret Fibonacci: Fi = Fi−1 + Fi−2, dengan kasus dasar F1 = F2 = 1. Lalu F43 = F42 + F41, dan F42 = F41 + F40. Sekarang F41 sedang diselesaikan di sub-pohon rekursif dari keduanya F43 sebaik F42. Meskipun jumlah total sub-masalah sebenarnya kecil (hanya 43 dari mereka), kita akhirnya menyelesaikan masalah yang sama berulang kali jika kita mengadopsi solusi rekursif naif seperti ini. Pemrograman dinamis memperhitungkan fakta ini dan memecahkan setiap sub-masalah hanya sekali.
Ini dapat dicapai dengan salah satu dari dua cara:
Pendekatan top-down: Ini adalah hasil langsung dari formulasi rekursif dari masalah apa pun. Jika solusi untuk masalah apa pun dapat dirumuskan secara rekursif menggunakan solusi untuk sub-masalahnya, dan jika sub-masalah tersebut tumpang tindih, maka seseorang dapat dengan mudah memoisasi atau menyimpan solusi untuk sub-masalah dalam sebuah tabel. Setiap kali kita mencoba untuk memecahkan sub-masalah baru, pertama-tama kita memeriksa tabel untuk melihat apakah sudah terpecahkan. Jika solusi telah dicatat, kita dapat menggunakannya secara langsung, jika tidak kita menyelesaikan sub-masalah dan menambahkan solusinya ke tabel.
Pendekatan bottom-up: Setelah kita merumuskan solusi untuk suatu masalah secara rekursif seperti dalam sub-masalah, kita dapat mencoba merumuskan kembali masalah secara bottom-up: coba selesaikan sub-masalah terlebih dahulu dan gunakan solusi mereka untuk membangun dan sampai pada solusi untuk sub-masalah yang lebih besar. Ini juga biasanya dilakukan dalam bentuk tabel dengan menghasilkan solusi secara berulang untuk sub-masalah yang lebih besar dan lebih besar dengan menggunakan solusi untuk sub-masalah kecil. Misalnya, jika kita sudah mengetahui nilai F41 dan F40, kita bisa langsung menghitung nilai F42.
Beberapa bahasa pemrograman dapat secara otomatis memoisasi hasil panggilan fungsi dengan sekumpulan argumen tertentu, untuk mempercepat evaluasi Call-by-name. (mekanisme ini disebut sebagai call-by-need). Beberapa bahasa membuatnya mungkin portabel (misalnya Scheme, Common Lisp, Perl atau D). Beberapa bahasa memiliki memoisasi otomatis bawaan, seperti tabel Prolog dan J, yang mendukung memoization dengan kata keterangan M. .[4] Bagaimanapun, ini hanya mungkin untuk fungsi transparansi referensial. Memoisasi juga ditemukan sebagai pola desain yang mudah diakses dalam bahasa berbasis penulisan-ulang istilah seperti Bahasa Wolfram.
Bioinformatika
Pemrograman dinamis banyak digunakan dalam bioinformatika untuk tugas-tugas seperti penyelarasan urutan, pelipatan protein, prediksi struktur RNA, dan pengikatan protein-DNA. Algoritme pemrograman dinamis pertama untuk pengikatan protein-DNA dikembangkan pada tahun 1970-an secara independen oleh Charles DeLisi di AS[5] dan Georgii Gurskii dan Alexander Zasedatelev di Uni Soviet.[6] Baru-baru ini algoritma ini menjadi sangat populer dalam bioinformatika dan biologi komputasi, khususnya dalam studi tentang posisi nukleosom dan pengikatan faktor transkripsi.
Contoh: Algoritme komputer
Algoritma Dijkstra untuk masalah jalur terpendek
Dari sudut pandang pemrograman dinamis, algoritma Dijkstra untuk masalah jalur terpendek merupakan skema aproksimasi berurutan yang menyelesaikan persamaan fungsional pemrograman dinamis untuk masalah jalur terpendek dengan metode Reaching.[7][8][9]
Faktanya, penjelasan Dijkstra tentang logika di balik algoritme,[10] dinamakan
Masalah 2. Temukan jalur dengan panjang total minimum antara dua node yang diberikan dan .
Kami menggunakan fakta bahwa, jika adalah node di jalur minimal dari ke , pengetahuan yang terakhir menyiratkan pengetahuan tentang jalan minimal dari ke .
Menggunakan pemrograman dinamis dalam perhitungan anggota ke-nderet Fibonacci meningkatkan kinerjanya secara signifikan. Berikut adalah implementasi naif, berdasarkan langsung pada definisi matematis:
function fib(n)
if n <= 1 return n
return fib(n − 1) + fib(n − 2)
Perhatikan bahwa jika kita sebut, katakanlah, fib(5), kita menghasilkan pohon panggilan yang memanggil fungsi pada nilai yang sama berkali-kali:
Khususnya, fib(2) dihitung tiga kali dari awal. Dalam contoh yang lebih besar, lebih banyak nilai fib, atau subproblem, dihitung ulang, yang mengarah ke algoritme waktu eksponensial.
Sekarang, misalkan kita memiliki objek peta sederhana, m, yang memetakan setiap nilai fib yang telah dihitung ke hasilnya, dan kita memodifikasi fungsi kita untuk menggunakannya dan memperbaruinya. Fungsi yang dihasilkan hanya membutuhkan O(n) waktu, bukan waktu eksponensial (tetapi membutuhkan O(n) ruang):
var m := map(0 → 0, 1 → 1)
function fib(n)
if key n is not in map m
m[n] := fib(n − 1) + fib(n − 2)
return m[n]
Teknik menyimpan nilai yang telah dihitung ini disebut memoization; ini adalah pendekatan top-down, karena kita pertama kali memecah masalah menjadi subproblem lalu menghitung dan menyimpan nilai.
Dalam pendekatan bottom-up, kita menghitung nilai fib yang lebih kecil terlebih dahulu, lalu buat nilai yang lebih besar darinya. Metode ini juga menggunakan waktu O(n) karena mengandung loop yang berulang n - 1 kali, tetapi hanya membutuhkan ruang konstan (O(1)), berbeda dengan pendekatan top-down yang membutuhkan ruang O(n) untuk simpan peta.
function fib(n)
if n = 0
return 0
elsevar previousFib := 0, currentFib := 1
repeat n − 1 times// loop is skipped if n = 1var newFib := previousFib + currentFib
previousFib := currentFib
currentFib := newFib
return currentFib
Dalam kedua contoh tersebut, kita hanya menghitung fib(2) satu kali, lalu gunakan untuk menghitung keduanya fib(4) dan fib(3), alih-alih menghitungnya setiap kali salah satu dari mereka dievaluasi.
Metode di atas sebenarnya membutuhkan waktu untuk n besar karena penjumlahan dua bilangan bulat dengan bit masing-masing mengambil waktu. (Nomor nth fibonacci memiliki bit.) Juga, ada bentuk tertutup untuk deret Fibonacci, yang dikenal sebagai rumus Binet, yang darinya suku -th dihitung kira-kira waktu, yang lebih efisien daripada teknik pemrograman dinamis di atas. Namun, pengulangan sederhana secara langsung memberikan bentuk matriks yang mengarah ke perkiraan algoritma dengan eksponensial matriks cepat.
Perataan urutan
Dalam genetika, perataan urutan adalah aplikasi penting di mana pemrograman dinamis sangat penting.[11] Biasanya, masalahnya terdiri dari mengubah satu urutan menjadi urutan lain menggunakan operasi edit yang mengganti, menyisipkan, atau menghapus elemen. Setiap operasi memiliki biaya terkait, dan tujuannya adalah menemukan urutan pengeditan dengan total biaya terendah.
Masalahnya dapat dinyatakan secara alami sebagai rekursi, urutan A diedit secara optimal menjadi urutan B dengan baik:
memasukkan karakter pertama B, dan melakukan penyelarasan optimal A dan ekor B
menghapus karakter pertama A, dan melakukan penyelarasan optimal pada ekor A dan B
mengganti karakter pertama A dengan karakter pertama B, dan melakukan penjajaran optimal pada ekor A dan B.
Perataan parsial bisa ditabulasi dalam matriks, di mana sel (i,j) berisi biaya penyelarasan yang optimal A[1..i] ke B[1..j]. Biaya dalam sel (i,j) dapat dihitung dengan menambahkan biaya operasi yang relevan dengan biaya sel tetangganya, dan memilih yang optimal.
^ abCormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. (2001), Introduction to Algorithms (2nd ed.), MIT Press & McGraw–Hill, ISBN0-262-03293-7 . pp. 344.
Sritharan, S. S. (1991). "Pemrograman Dinamis Persamaan Navier-Stokes". Systems and Control Letters. 16 (4): 299–307. doi:10.1016/0167-6911(91)90020-f.
Modul pemrograman dinamis interaktif online IFORS termasuk, jalur terpendek, penjual keliling, ransel, koin palsu, menjatuhkan telur, jembatan dan obor, penggantian, produk matriks yang dirantai, dan masalah jalur kritis.
Indikator kecepatan udara adalah instrumen penerbangan yang menampilkan kecepatan udara. Indikator kecepatan udara ini memiliki tanda standar untuk pesawat multi-mesin. Kecepatan udara (Inggris: airspeedcode: en is deprecated ) adalah kecepatan pesawat relatif terhadap udara. Di antara konvensi umum untuk kecepatan udara yang memenuhi syarat indikasi kecepatan udara (IAS), kecepatan udara terkalibrasi (CAS), kecepatan udara setara (EAS), dan kecepatan udara sejati (TAS). Kecepatan udara terindik…
Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala. Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Hasan Purbo – berita&…
John BunyanLahir(1628-11-28)28 November 1628London, InggrisMeninggal31 Agustus 1688(1688-08-31) (umur 59)InggrisPekerjaanPenulis, pengkotbahGenreFiksi Kristen (terutama alegori), kotbah John Bunyan (28 November 1628 – 31 Agustus 1688), sebagai anak dari seorang tambal panci yang miskin.[1] Pada 1653 ia menjadi anggota jemaat di sebuah gereja dan tak lama kemudian ia mulai berkhotbah.[1] Dari tahun 1660 hingga 1672 Bunyan hampir terus menerus berada dalam penj…
Biltong rumahan, dengan bumbu Afrika Selatan Biltong adalah makanan berupa daging kering berbumbu yang berasal dari Afrika Selatan. Makanan ini dapat dibuat dari berbagai jenis daging, seperti: daging sapi, daging buruan, atau burung unta dari peternakan. Biltong dibuat dari filet daging mentah yang dipotong panjang searah serabut otot, atau diiris dengan memotong serabut otot. Makanan ini mirip dengan dendeng karena sama-sama berupa daging kering berbumbu, namun bumbu, rasa, dan proses pembuata…
Football match2006 Bulgarian Cup finalEvent2005–06 Bulgarian Cup CSKA Sofia Cherno More Varna A Group A Group 3 1 Date24 May 2006VenueVasil Levski National Stadium, SofiaRefereeSantiago Rodríguez (Spain)Attendance7,216← 2005 2007 → The 2006 Bulgarian Cup final was the 66th final of the Bulgarian Cup. The match took place on 24 May 2006 at Vasil Levski National Stadium in Sofia. The match was contested by CSKA Sofia, who beat Naftex Burgas 4–1 in their semi-final, and Cherno More…
Koordinat: 52°42′28″N 2°45′15″W / 52.7077°N 2.7541°W / 52.7077; -2.7541 Shrewsbury The Old Market Hall in the Square. Traditional coat of arms of ShrewsburyMotto: Floreat Salopia (May Salop flourish)The borough's motto was co-adopted by Shropshire in 1896 [1] Shrewsbury Letak Shrewsbury di Britania Raya Population 96,071 (2009) Ref. grid OS SJ491124 - Cardiff 89 mi (143 km) SSW …
العلاقات الأفغانية الإكوادورية أفغانستان الإكوادور أفغانستان الإكوادور تعديل مصدري - تعديل العلاقات الأفغانية الإكوادورية هي العلاقات الثنائية التي تجمع بين أفغانستان والإكوادور.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية …
Cet article est une ébauche concernant un homme politique français et l’Orne. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. François DoubinFonctionsConseiller régional de Basse-Normandie1998-2004Conseiller général de l'OrneCanton d'Argentan-Ouest1992-1998Maire d'Argentan1989-2001BiographieNaissance 23 avril 193316e arrondissement de ParisDécès 18 juin 2019 (à 86 ans)Saint-Ouen-de-SécherouvreNom de…
العلاقات البوسنية الجورجية البوسنة والهرسك جورجيا البوسنة والهرسك جورجيا تعديل مصدري - تعديل العلاقات البوسنية الجورجية هي العلاقات الثنائية التي تجمع بين البوسنة والهرسك وجورجيا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية ل…
Süper Lig 2021-2022Süper Lig 2021-2022 Competizione Süper Lig Sport Calcio Edizione 64ª Organizzatore TFF Date dal 13 agosto 2021al 22 maggio 2022 Luogo Turchia Partecipanti 20 Formula Girone all'italiana Risultati Vincitore Trabzonspor(7º titolo) Retrocessioni Çaykur RizesporAltayGöztepeYeni Malatyaspor Statistiche Miglior marcatore Umut Bozok (20) Incontri disputati 380 Gol segnati 1 067 (2,81 per incontro) Cronologia della competizione 2020-2021 2022-2023 M…
Dalam nama Korean ini, nama keluarganya adalah Kim. Kim Hye-eunLahir1 Maret 1973 (umur 51)Busan, Korea SelatanPendidikanUniversitas Nasional Seoul College of Music - VoicePekerjaanAktrisTahun aktif1997-sekarangAgen4 Doors Entertainment (2016) C-JeS Entertainment (2016-sekarang)Suami/istriKim In-sooNama KoreaHangul김혜은 Hanja金惠恩 Alih AksaraGim Hye-eunMcCune–ReischauerKim Hye-ǔn Kim Hye-eun (lahir 1 Maret 1973) adalah aktris Korea Selatan. Filmografi Seri televisi Tahun Judu…
U.S. National Championships 1961 Sport Tennis Data 1º settembre - 10 settembre Edizione 81ª Categoria Grande Slam (ITF) Località New York e Chestnut Hill, USA Campioni Singolare maschile Roy Emerson Singolare femminile Darlene Hard Doppio maschile Chuck McKinley / Dennis Ralston Doppio femminile Darlene Hard / Lesley Turner Doppio misto Margaret Smith / Bob Mark 1960 1962 Gli U.S. National Championships 1961 (conosciuti oggi come US Open) sono stati l'81ª edizione degli U.S. National Champio…
Topik artikel ini mungkin tidak memenuhi kriteria kelayakan umum. Harap penuhi kelayakan artikel dengan: menyertakan sumber-sumber tepercaya yang independen terhadap subjek dan sebaiknya hindari sumber-sumber trivial. Jika tidak dipenuhi, artikel ini harus digabungkan, dialihkan ke cakupan yang lebih luas, atau dihapus oleh Pengurus.Cari sumber: Raya Adena Syah – berita · surat kabar · buku · cendekiawan · JSTOR (Pelajari cara dan kapan saatnya untuk meng…
51°15′22″N 1°06′40″W / 51.256°N 1.111°W / 51.256; -1.111 Borough and non-metropolitan district in EnglandBasingstoke and DeaneBorough and non-metropolitan districtBasingstoke. Crown HeightsBasingstoke and Deane shown within HampshireSovereign stateUnited KingdomConstituent countryEnglandRegionSouth East EnglandNon-metropolitan countyHampshireStatusNon-metropolitan districtAdmin HQBasingstokeIncorporated1 April 1974Government • TypeNon-metropolitan …
Bilateral relationsPortugal–United States relations Portugal United States Diplomatic missionEmbassy of Portugal, Washington, D.C.Embassy of the United States, Lisbon Portuguese Foreign Minister João Gomes Cravinho (left) meets with US Secretary of State Antony Blinken (right) in 2022 Portugal–United States relations are bilateral relations between Portugal and the United States. History Despite various attempts to set up colonies in Newfoundland and Labrador and Nova Scotia, the Kingdom of…
Statewide law enforcement agency for the U.S. state of Indiana 39°46′7.83″N 86°9′53.72″W / 39.7688417°N 86.1649222°W / 39.7688417; -86.1649222 Law enforcement agency Indiana State PoliceIndiana State Police patchAbbreviationISPMottoIntegrity, Service, ProfessionalismAgency overviewFormedApril 15, 1933; 91 years ago (1933-04-15)[1]Preceding agencyIndiana Motor Vehicle Police (1921–1933)Employees1,744 (2014)[2]Jurisdictional s…
American college basketball season 1971–72 Idaho Vandals men's basketballConferenceBig Sky ConferenceRecord5–14 (2–12 Big Sky)Head coachWayne Anderson (6th season)MVPSteve TonHome arenaMemorial GymnasiumSeasons← 1970–711972–73 → 1971–72 Big Sky men's basketball standings vte Conf Overall Team W L PCT W L PCT Weber State 10 – 4 .714 18 – 11 .621 Gonzaga 8 – 6 .571 14 – 12 .5…