Benzersiz öğelerle listenin mesafesini düzenleme


12

Listeler arasındaki Levenshtein-Distance düzenleme mesafesi iyi incelenmiş bir sorundur. Ancak , hiçbir öğenin her listede bir kereden fazla gerçekleşmediği biliniyorsa , olası iyileştirmeler hakkında fazla bir şey bulamıyorum .

Ayrıca, öğelerin karşılaştırılabilir / sıralanabilir olduğunu varsayalım (ancak karşılaştırılacak listeler başlamak için sıralanmamıştır).

Özellikle, elemanların benzersizliğinin, Ukkonen'in zaman karmaşıklığı ve boşluk karmaşıklığı O (\ min (s, m, n) olan düzenleme mesafesi için iyileştirmeyi mümkün kılıp kılmadığını merak ediyorum. s) , burada s , düzenleme adımlarının minimum maliyetidir .O(min(m,n)s)O(min(s,m,n)s)s

Daha resmi,

verilen iki s dizisi arasındaki t arasındaki mesafeyi ,s,tΣ yinelenen harfleri olmadığı vaadiyle ne kadar verimli bir şekilde hesaplayabiliriz ?

Σ çok büyük bir alfabe.


Şimdi sorunuz nedir; çift ​​düzenleme mesafesini nasıl hızlandırırsınız veya bir dize listesinin tüm çift mesafelerini hesaplamayı nasıl hızlandırırsınız?
Raphael

2
Arasındaki düzenleme mesafeyi hesaplamak için nasıl: Soruyu şüpheli , Bazı çok büyük alfabesi üzerinde dizeleri ve biz hiçbir harf iki kez göründüğünü garanti olsun veya içerisinde (OP örneğin harfler bir listesi, öğelerin listesini her bir dize temsil etmektedir). Ancak bunun onaylanması gerekiyor. s,ts,tΣΣst
DW

Evet, bu durumda büyük alfabe veritabanı dizinlerinden oluşur ve "dizeler", s ve t, bu dizinleri içeren listelerdir.
user362178

Karmaşıklıkları merak edenler için: ve , giriş dizelerinin uzunluklarıdır ve , gerçek düzenleme mesafesidir, bu nedenle karmaşıklığa dahil edilir. Her Düzenlemenin maliyeti 1 olarak kabul ama muhtemelen bu mesafeyi (düzenlemeler sayısı hesaplanması için önemsizdir edilir ). mnss
Albert Hendriks

Yanıtlar:


3

TL; DR: Yalnızca tek tek karakterler ekleyip silebileceğimiz biraz daha kısıtlayıcı bir düzenleme mesafesi, dizelerin her ikisinin (hatta yalnızca bir tanesinin) benzersiz karakterlere sahip olduğu durumlarda doğrusal olarak hesaplanabilir. Bu, Levenshtein düzenleme mesafesinde yararlı üst ve alt sınırlar verir.

Düzenleme mesafesini ve en uzun ortak dizileri ekleme / silme

Levenshtein düzenleme mesafesi, her birine 1 maliyet atayarak tek karakterli ekleme, silme ve değiştirme işlemlerine izin verir. Yalnızca ekleme ve silme işlemleriyle sınırlandırırsak, artık değiştirmelerin 2 maliyete neden olduğu benzer bir mesafe ölçüsü elde ederiz (herhangi bir değişiklik ekleme ve silme kullanarak taklit edilebilir). Bu daha kısıtlayıcı düzenleme mesafesi için standart bir isim bilmiyorum, bu yüzden "düzenleme mesafesini ekle / sil" diyeceğim. Sırasıyla ve uzunluğunda iki dizenin verildiği ve her ikisinde de görülen en uzun dizinin uzunluğunu bilmek istediğimiz en uzun ortak dizilim (LCS) problemine çok yakındır . İki dizede LCSmnL, sonra ekleme silme düzenleme mesafesin+m2L : bunu görmenin en kolay yolu, LCS'deki karakterlerin üst üste yığılmış olarak görünmesini sağlarken, LCS'de olmayan karakterler bir -boşluğun karşısında görünür karakter. Daha sonra -, üst satırda bir yerde bir ekleme -ve alt satırda bir yerde bir silme yaparak ilk dizeyi ikinciye düzenleyebileceğimiz açıktır . Örneğin:

-C-IRC-LE
T-RI-CKLE

İşte LCS CIRCLEve TRICKLE, ICLEuzunluk 4 olan ve düzenlemek mesafe gerçekten de .6+724=5

En uzun artan alt sıralar

Bu sapmanın nedeni, sekanslardan en az biri yalnızca farklı karakterler içerdiğinde LCS'yi (ve dolayısıyla ekleme / silme düzenleme mesafesini) hesaplamanın çok etkili bir yolu olmasıdır: Bu durumda, LCS problemi dönüştürülebilir zamanında çözülebilen en uzun artan bir alt sekans bulma sorunu . İki ve dizesi verildiğini ve dizesinin farklı karakterleri olduğunu varsayalım . Bir tablodaki her karaktere hangi sayıyı atadığımızı takip ederek ilk karakteri 1'e, ikincisini 2'ye değiştirebiliriz. SonraO(nlogn)ABAAB, bu tabloyu kullanarak karakterlerini yeniden adlandırırız (yani, ilk karakterin her oluşu A1, vb. olarak değiştirilir). Son olarak, en uzun süre artan bir alt diziyi arıyoruz B. Arasında bir LCS Bu karşılık Ave Bve biz hemen ekleme / silme düzenleme mesafe var hesaplayabilirsiniz. İçin gerekli olan toplam zaman sadece bir , eğer ve uzunluklara sahip ve , sırasıyla.O(n+mlogm)ABnm

Levenshtein sınırları

Ekleme / silme mesafesi, Levenshtein mesafesi üzerinde açıkça bir üst sınır sağlar (çünkü ekleme / silme mesafesi altındaki herhangi bir geçerli düzenleme işlemi sırası, Levenshtein düzenleme işlemlerinin geçerli bir dizisidir). Ekleme / silme düzenleme mesafesini 2'ye bölmek de daha düşük bir sınır verir, çünkü en kötü durumda herhangi bir Levenshtein düzenleme işlemi 2 ekleme / silme düzenleme işlemine dönüştürülebilir.

genellemeler

Zaten 1977'de Hunt ve Szymanski, en uzun artan takip algoritmasının genelleştirilmesi olarak görülebilecek bir algoritma geliştirdiler. İki dize arasındaki eşleşen karakter konumu çiftlerinin sayısı az olduğunda etkilidir. Varsa gibi çiftleri, kendi algoritması alır zaman. ( Bir dizgedeki tüm karakterler farklıysa olduğuna dikkat edin .) Bu algoritma, tüm metin satırlarını tek tek karakterler olarak ele alan orijinal programın temeliydi. Daha sonra Myers en kullanarak geçiş -zaman algoritması, buradarO((r+n)logn)rndiffdiffO(nd)d ekleme / silme düzenleme mesafesidir, çünkü toplam farklar küçük olduğunda ancak bazı "karakterler" (metin satırları) sık sık (C program kodunda sadece bir açılış ayracı içeren bir satır) göründüğünde daha iyi performans gösterir.

Hunt, J .; Szymanski, T. (1977), "En uzun ortak alt dizileri hesaplamak için hızlı bir algoritma", ACM'nin İletişimi, 20 (5): 350–353, doi: 10.1145 / 359581.359603

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.