Divide ve Conquer'in Teorik Temelleri


22

Algoritma tasarımına gelince, çoğu zaman aşağıdaki teknikler kullanılır:

  • Dinamik program
  • Açgözlü Strateji
  • Bölmek ve fethetmek

İlk iki yöntem için, iyi bilinen teorik temeller, yani Bellman Optimallik İlkesi ve matroid (özellikle greedoid) teorisi varken, D&C'ye dayalı algoritmalar için böyle genel bir çerçeve bulamadım.

Öncelikle, birleştirici bağlamında ortaya çıkan, "algoritmik iskelet" olarak adlandırılan, işlevsel bir programlama sınıfında başlattığımız (veya daha doğrusu prof) bir şeyin farkındayım. Buna örnek olarak, D & C algoritmaları için aşağıdaki gibi bir iskelet verdik:

Tanım : boş olmayan kümeler olsun. Biz elemanlarını çağırır çözeltiler ve unsurlarını (olduğunu, alt grupları ) olarak adlandırılır sorunlar . Daha sonra, bir D&C iskeleti 4 tuple , burada:Sbir,SS AP: =P(bir)bir(Pβ,β,D,C)

  • Pβ sorunlarının kümesi üzerinden bir yüklem ve biz bir sorun olduğunu söylemek p edilmektedir temel IFF Pβ(p) tutar.
  • β , her temel soruna bir çözüm veren bir eşleştirme PβS .
  • D , her problemi bir alt problem grubuna ayıran bir eşleştirme PP(P) .
  • \ mathcal {C} bir çözüm üretmek için alt problemlerin çözümlerine ("bir pivot problemine" bağlı olarak) birleşen P \ times \ mathfrak {P} (S) \ rightarrow SC eşleşmesidir .P×P(S)S

Daha sonra, belirli bir iskelet için s=(Pβ,β,D,C) ve bir problem, p , aşağıdaki jenerik fonksiyon fs:PS bir çözümü hesaplar (resmi olarak p ) için pp :

fs(p)={β(p)if p is basicC(p,f(D(p)))otherwise

ikinci satırda notasyonunu bir eşlemenin alan adının alt kümeleri için kullanırız .X ff(X):={f(x):xX}Xf

Bununla birlikte, bu şekilde formüle edilebilecek problemlerin altında yatan "yapısal" özelliklerini daha fazla incelemedik (dediğim gibi, işlevsel bir programlama sınıfıydı ve bu sadece küçük bir örnekti). Ne yazık ki, bu yaklaşım hakkında daha fazla referans bulamadım. Dolayısıyla yukarıdaki tanımların oldukça standart olduğunu düşünmüyorum. Biri yukarıda söylediklerimi tanırsa, ilgili makalelerden memnun olurum.

İkincisi, açgözlü strateji için, bir sorunun genel açgözlü algoritması tarafından ancak çözümlerinin ağırlıklı bir matroid oluşturması halinde doğru bir şekilde çözüldüğü meşhur sonucuna sahibiz. D & C algoritmaları için benzer sonuçlar var mı?

Yanıtlar:



1

Bellman'ın Divide and Conquer algoritmalarındaki Optimallik İlkesi kadar somut bir şeyin farkında değilim. Bununla birlikte, bölünmenin ve fethin altında yatan temel, bana sorunun girişinin özyinelemeli (veya endüktif) bir tanımı ve daha sonra çözümleri daha büyük çözümlerde birleştirmenin bir yolu olarak görünüyor. Buradaki kilit kavrayış, sorunlu girdileri özyinelemeli olarak düşünmek ve özyinelemeli D & C algoritmalarından yararlanmaktır.

Mergesort'u örnek olarak alın. Girdi ile başlayalım, bir eleman dizisi . Biri , dizinin yapısını tekrar tekrar şöyle tanımlayabilir :n

  • İçin , dizi boştur.n=0
  • İçin , dizi a tek elemanıdırn=1
  • İçin , dizi büyüklüğünün dizisinin birleşimidir ( sol ) ve boyut ( sağ )n>1n2n2

Daha sonra sıralamayı bu yapıya göre eşleyerek mergesort algoritmasına yaklaşıyoruz . önemsiz şekilde sıralandığı temel durumlar . Özyinelemeli durum, özyinelemeli olduğu yerleri ( yani, sola ve sağa) özyinelemeli olarak sıralayarak başlar . Sonra esas yerine birini bulmak BİRLEŞTİR olmak biter, birleştirme . Dolayısıyla, temelde verilerin özyinelemeli yapısını aldığımızı ve bunu özyinelemeli bir çözümle eşleştirdiğimizi fark edin. n1

Bunun mutlaka D&C algoritmalarından ne beklediğinize yol açmayacağını not etmek önemlidir. Dizi yapısını şu şekilde tanımlayabiliriz:

  • İçin , dizi boştur.n=0
  • n>0n-1

Burada mergesort için kullandığımız stratejinin ardından özyinelemeli yerleştirme sıralamalarına yol açıyor. Bu nedenle, tipik olarak, çoklu özyinelemeli öğeler içeren özyinelemeli tanımlar geliştiriyoruz, yani veri setini yarı yarıya ya da üçüncüsünde kesiyoruz.

Şimdi, D & C algoritmalarını analiz etmek için Master Teoremi var ve bu, bir D & C algoritmasının alt bileşenleri için verimlilik beklentilerine belirli bir genel çalışma süresi verimiyle biraz ışık tutuyor.


Verdiğiniz örnekler soruma verdiğim genel çerçeveye uygun (ve aslında somut bir uygulama yapmanıza yardımcı olabilir). Ancak benim sorum, bu paterne uyan algoritmalar ile çözülebilecek problemler için bir kriterin (BOP veya matroid yapısı gibi) olup olmadığıydı .
Cornelius Brand
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.