kesme ipleri üzerinde dinamik programlama egzersizi


16

Bu kitaptan aşağıdaki sorun üzerinde çalışıyorum .

Belirli bir dize işleme dili, bir dizeyi iki parçaya ayıran ilkel bir işlem sunar. Bu işlem orijinal dizginin kopyalanmasını içerdiğinden, kesimin konumuna bakılmaksızın, n uzunluğundaki bir dizginin n birimini alır. Şimdi, bir ipi birçok parçaya bölmek istediğinizi varsayalım. Molaların yapılma sırası toplam çalışma süresini etkileyebilir. Eğer pozisyonlarda 20 karakter dizesini kesmek istiyorsanız Örneğin, 3 ve 10 sonra pozisyonunda birinci kesim yapılarak, 3 incurs toplam maliyeti 20+17=37 pozisyon 10 yaparken, ilk daha iyi bir maliyeti vardır20+10=30.

kesim verilen , m + 1 parçaya bir dize kesme minimum maliyet bulur dinamik bir programlama algoritması gerekir .mm+1

Yanıtlar:


10

Temel fikir: Tüm kesim pozisyonlarını ilk tercih olarak deneyin, ilgili parçaları tekrar tekrar çözün, maliyeti ekleyin ve minimum değeri seçin.

Formülde:

mino(s,C)={|s|,|C|=1|s|+mincC[mino(s1,c,{cCc<c}) + mino(sc+1,|s|,{ccCc>c})], else

Bu özyinelemeye memoisation uygulamasının , işi art arda uygulanan herhangi bir kesim çiftinin sırasını değiştirmek gibi aynı üç alt problemin çözülmesiyle sonuçlandığını unutmayın.


1

İlk önce özyinelemeli bir algoritma bulmak ve sonra bunu bir tabloya dönüştürmek her zaman iyi bir fikirdir.

  1. f(C,n)
  2.   (C = ) 0 olursa ;
  3.   Başka
  4.     opt = sonsuzluk;
  5.     her içincC
  6.       D={dC:d<c}
  7.       E={ec:eD,e>c}
  8.       opt=min{opt,f(D,c)+f(E,nc)}
  9.     dönüş ;opt+n

Yani şunu sorabilirsiniz: Bir masaya konacak çok fazla C alt kümesi var mı? Sadece 'ardışık' altkümelerin gerekli olduğunu gözlemleyin. Ve sadece Bunların (başka sorun ise neden):.? Bazı kayıtlar değeri değişecekE. Sadece uzunluğu belirtmek yerineher birf'debaşlangıç ​​ve bitişbelirterek bununetrafındadolaşabiliriz.(n2)Ef


0

Bu, multiset üzerindeki Quicksort'a çok benzer; kesme noktası ortaya en yakın olduğunda idealdir ve daha sonra geri çekiliriz.

sk

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.