Gelişmiş özyinelemeli algoritma örnekleri


14

Ünlü deterministik doğrusal zaman seçim algoritmasını (medyan algoritmasının medyanı) bir arkadaşına açıklıyordum .

Bu algoritmadaki özyineleme (çok basit olsa da) oldukça karmaşıktır. Her biri farklı parametrelere sahip iki özyinelemeli çağrı vardır.

Böyle ilginç özyinelemeli algoritmaların diğer örneklerini bulmaya çalışıyordum, ancak bulamadım. Gelebileceğim tüm özyinelemeli algoritmalar ya basit kuyruk özyinelemeleri ya da basit bölün ve fethet (iki çağrının "aynı" olduğu).

Bazı karmaşık özyineleme örnekleri verebilir misiniz?


Bir labirent veya daha genel olarak bir genişlik ilk araması olan bir grafik üzerinde gezinmek, ilginç bir özyinelemenin basit bir örneğidir.

utdiscant, bFS'nin bir kuyruk ve bir while döngüsü kullanarak kolayca ve doğal olarak uygulanabileceğinden sorum için uygun olmadığını düşünüyorum.
elektronaj

Bulmaca çözme ve ayrıştırmada geri izleme ne olacak? Sıralama ve Unranking Algoritmalarının da standart olmayan özyinelemeleri vardır.
uli

Not algoritmaları?
Kaveh

2
@vzn: Bir sıra için değil , bir yığın değiştirin. BFS özel bir durumdur.
Raphael

Yanıtlar:


15

En sevdiğim nüksüm, önce Kirkpatrick ve Seidel tarafından olmak üzere dışbükey gövdelerin hesaplanması için çıktıya duyarlı algoritmalarda ortaya çıkıyor , daha sonra diğerleri tarafından tekrarlanıyor. Let dışbükey gövde hesaplamak için zamanı belirtmek dışbükey olan bir düzlemde, içinde nokta köşe. ( değeri önemsiz bağlı haricinde önceden bilinmemektedir .) Kirkpatrick ve Seidel'in algoritması burada ve ven h saat h n , T ( n , lH ) = { O ( n ) ise  , n 3  ya da  h 3 , T ( n 1 , h 1 ) + T ( n 2 , h 2 ) + O ( n ) aksi takdirde n 1 , n 2T(n,h)nhhhn

T(n,h)={O(n)if n3 or h3T(n1,h1)+T(n2,h2)+O(n)otherwise
n1,n23n/4n1+n2=nh1+h2=h .

Çözelti . Bu biraz şaşırtıcıdır, çünkü eşit olarak bölünen parametre değildir. Ama aslında, en kötü nüks vaka ne olur ve hakkında hem ; sihirli bir şekilde her zaman sabitse, çözüm .T(n,h)=O(nlogh)hh1h2h/2h1T(n,h)=O(n)

İlk hesaplama topolojisi belgelerimden birinde bu yinelemenin bir varyantını kullandım : burada ve . Yine, çözelti , ve en kötü hem zaman böyle bir durum ortaya çıkar ve zaman eşit bir şekilde bölünür.

T(n,g)={O(n)if n3 or g=0T(n1,g1)+T(n2,g2)+O(min{n1,n2})otherwise
n1+n2=ng1+g2=gO(nlogg)ng

" veya " koşuluyla ilgili problemlerim var ; burada ne anlama geliyor? Küresel olarak sınırlayıcı sabitler, ve birinci durumda sonuç vermek için altını kesmek zorunda olduğu (ve yazarların bunları vermekle uğraşmadığı) var mı? Çünkü kelimenin tam anlamıyla okursam (yani her iki 'i aynı satırdaki aynı şekilde yorumlar ) iki durum asla veya her zaman gerçekleşmez (emin değilim). Notasyonun kötüye kullanılması çok ileri gitti imho. n=O(1)h=O(1)OnhO(1)O(n)
Raphael

1
Üzgünüm, açıklığa kavuşturmak için cevabımı düzenledim. "en sevdiğiniz sabit" anlamına geliyordu. Düzeltmemde kullandım , ancak Da işe yarardı. O(1)31010100!
JeffE

Hesaplamalı topoloji belgelerinde bu diyagramları nasıl çizdiniz?
user119264

12

I 'de kullanılana yineleme tebliğimin Aggarwal "bir konveks çokgen Voronoi diyagramı hesaplanması için doğrusal bir zamanlı algoritması" ve arkadaşları da oldukça karmaşıktır.

İşte algoritmamızın makalemizden bir açıklaması. Açıklamanın net olmaması durumunda, 3. adımda kırmızı noktalar koyu kırmızı ve garnet noktalarına ayrılır. Adım 1, 3 ve 6'nın tümü doğrusal süredir. Ayrıca toplam nokta sayısı ise , ve bazı .| B | α n | R | β n | C | γ n α , β , γ > 0n|B|αn|R|βn|C|γnα,β,γ>0

Tüm algoritmanın neden doğrusal zaman aldığını anlamanıza izin vereceğim.

  1. Orijinal noktaları mavi ve kırmızı B ve R setlerine ayırın.
  2. Mavi noktaların dışbükey gövdesini tekrar tekrar hesaplayın.
  3. Mavi gövdenin yapısını kullanarak koyu kırmızı noktaları C seçin.
  4. Kırmızı noktaları mavi gövdeye birer birer ekleyin.
  5. Granat noktaları G'nin dışbükey gövdesini tekrar tekrar hesaplayın.
  6. Bu garnet gövdesini 4. adımdaki genişletilmiş mavi gövdeyle birleştirin.

Algoritmayı doğrusal yapan şey, nokta başına sabit maliyetle mavi gövdeye kırmızı noktaların sabit bir kısmını ekleme yeteneğidir. Eklenen puanlar kıpkırmızı puanlardır.

Özyineleme böylece bilmediğinizveancak .| B |

T(n)=T(|B|)+T(|G|)+O(n)
|B||G||B|+|G|(1γ)n


6

RNA sekonder yapı tahmininde kullanılan bir grup serin özyinelemeli algoritma [1], [2] vardır. Kendi cihazlarına bırakıldığında, bir RNA ipliği kendisiyle baz çiftleri oluşturacaktır; [3] 'ten nispeten basit bir örnek, bir RNA dizisinin kendisiyle oluşturacağı maksimum iç içe, eşlenmiş baz sayısını hesaplar:

M(i,j)=maxik<jLmin{M(i,k1)+M(k+1,j1)+1M(i,j1)


  1. Termodinamik ve yardımcı bilgiler kullanılarak büyük RNA dizilerinin optimum bilgisayar katlanması M. Zuker, P. Stiegler (1981) tarafından yapılmıştır.

  2. E. Rivas, SR Eddy (1999) tarafından Psödoknotları İçeren RNA Yapısı Tahmininde Dinamik Programlama Algoritması

  3. R.Nussinov, AB Jacobson (1980) tarafından tek sarmallı RNA'nın sekonder yapısını tahmin etmek için hızlı algoritma


Burada önerilen bir ilgili , karşılıklı bağımlı (dinamik programlama) özyinelemeleri spor yaptığı için oldukça karmaşıktır.
Raphael

4

Hala "sofistike özyineleme" ile ne demek istediğinizi gerçekten anlamıyorum. Örneğin, FFT algoritmasındaki özyineleme adımı karmaşıktır!

Ancak daha karmaşık özyineleme aramak istiyorsanız , karşılıklı özyineleme olası bir cevap olabilir. Karşılıklı özyineleme, fonksiyonel programlama dilleriyle çalışırken yararlıdır . Karşılıklı özyineleme, özyinelemeli iniş ayrıştırıcılarının temel özelliğidir .


FFT'deki (Cooley-Tukey'in en basit şekli) özyineleme "standart" bölme ve fethetmedir. Bu, O (nlogn) karmaşıklığından anlaşılmaktadır. 2 özyinelemeli çağrı (çift için 1, olasılıklar için 1) biraz "aynı".
elektronaj

3

Kafamın üstünde, McCarthy 91 işlevi

F(N) = 
    n - 100    if n > 100
    F(F(n+11)) if n <= 100

ve Ackermann işlevi

A(m, n) = 
    n + 1             if m = 0
    A(m-1, 1)         if m > 0 and n = 0
    A(m-1, A(m, n-1)) if m > 0 and n > 0

toy-ish, özyinelemeli işlevler de olsa sıra dışı sayılabilir.

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.