Düzenleme mesafesi hesaplaması için mikro optimizasyon: geçerli mi?


10

On Vikipedi , düzenleme mesafe için aşağıdan yukarıya dinamik programlama şeması için bir uygulama verilmiştir. Tanımı tam olarak takip etmez; iç hücreler şu şekilde hesaplanır:

if s[i] = t[j] then  
  d[i, j] := d[i-1, j-1]       // no operation required
else
  d[i, j] := minimum
             (
               d[i-1, j] + 1,  // a deletion
               d[i, j-1] + 1,  // an insertion
               d[i-1, j-1] + 1 // a substitution
             )
}

Gördüğünüz gibi , bir eşleşme varsa algoritma her zaman sol üstteki komşudan değeri seçer, bazı bellek erişimlerini, ALU işlemlerini ve karşılaştırmaları kaydeder.

Bununla birlikte, silme (veya ekleme) daha küçük bir değere neden olabilir , bu nedenle algoritma yerel olarak yanlıştır, yani optimallik kriteri ile kırılır. Ama belki de hata sonucu değiştirmez - iptal edilebilir.

Bu mikro optimizasyon geçerli mi ve neden (değil)?

Yanıtlar:


6

Algoritmanın hatalı olduğunu düşünmüyorum. İki dize eşleşirse, ilk önce son iki karakterini (ve sonra da recurse) karşılaştırırız. Eğer aynıysa, optimum hizalama elde etmek için onları eşleştirebiliriz. Örneğin, dizeleri testve testat. Son iki ts ile eşleşmezseniz, s'den biri eşleşmeden tkalır, aksi takdirde eşleşmeniz şöyle görünür:

resim açıklamasını buraya girin

Bu imkansızdır, çünkü okların "geçmesine" izin verilmez. Eşleşen t, solda gösterildiği gibi birkaç eki (şekilde yeşil kutular) indükler:

resim açıklamasını buraya girin

Ama sonra sağda tasvir edilen eşit derecede iyi bir hizalama bulabilirsiniz. Her iki durumda da bir eşleşirsiniz tve iki ekiniz vardır.

Son ts'den birinin yerine koyma argümanı aynıdır. Yani son ts'den birini değiştirirseniz , bunun yerine son iki t ile eşleşebilir ve daha iyi bir hizalama elde edebilirsiniz (resme bakın).

resim açıklamasını buraya girin


Ah, aşağıdan yukarıya problemi için yukarıdan aşağıya bir argüman. Güzel!
Raphael
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.