En uzun artan ardışıklık - Longest increasing subsequence
Gelen bilgisayar bilimleri , en uzun artan alt dizi problem verilen bir altdizisi bulmaktır dizisi en yüksek, alt sekans en elemanları sıralı düzende olduğu düşük ve hangi altdizi mümkün olduğunca uzun. Bu ardışıklık mutlaka bitişik veya benzersiz değildir. En uzun artan alt diziler , algoritmik , rastgele matris teorisi , temsil teorisi ve fizik dahil olmak üzere matematikle ilgili çeşitli disiplinler bağlamında incelenir . En uzun artan alt dizi sorunu O( n log n ) zamanında çözülebilir , burada n giriş dizisinin uzunluğunu gösterir.
Örnek
İkili Van der Corput dizisinin ilk 16 döneminde
- 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15
en uzun artan ardışıklık
- 0, 2, 6, 9, 11, 15.
Bu dizinin uzunluğu altıdır; giriş dizisinin yedi üyeli artan alt dizisi yoktur. Bu örnekteki en uzun artan ardışıklık tek çözüm değildir: örneğin,
- 0, 4, 6, 9, 11, 15
- 0, 2, 6, 9, 13, 15
- 0, 4, 6, 9, 13, 15
aynı giriş dizisinde eşit uzunluktaki artan diğer alt dizilerdir.
Diğer algoritmik problemlerle ilişkiler
En uzun artan alt dizi sorunu , ikinci dereceden zaman dinamik programlama çözümüne sahip en uzun ortak dizi sorunu ile yakından ilişkilidir : bir dizi S'nin en uzun artan alt dizisi , S ve T'nin en uzun ortak dizisidir , burada T , S sıralamasının sonucudur . Ancak, girdinin 1, 2, ..., n tamsayılarının bir permütasyonu olduğu özel durum için , bu yaklaşım O( n log log n ) formunun zaman sınırlarına yol açarak çok daha verimli hale getirilebilir .
Bir permütasyon grafiğindeki en büyük klik , grafiği tanımlayan permütasyonun en uzun azalan alt dizisine karşılık gelir (orijinal izin verilmeyen dizinin en düşük değerden en yükseğe sıralandığı varsayılarak). Benzer şekilde, bir permütasyon grafiğindeki maksimum bağımsız küme , azalmayan en uzun alt diziye karşılık gelir. Bu nedenle, permütasyon grafiklerinde klik problemini verimli bir şekilde çözmek için en uzun artan ardışık algoritmalar kullanılabilir .
Gelen Robinson Schensted yazışma arasındaki permütasyon ve genç tableaux , bir permütasyon tekabül eden Tabloda birinci sırasının uzunluğu permütasyon uzun artan alt dizisinin uzunluğuna eşittir ve ilk kolonun uzunluğu en uzun uzunluğuna eşittir azalan sıra.
Verimli algoritmalar
Aşağıda özetlenen algoritma, diziler ve ikili arama ile en uzun artan ardışıklık problemini verimli bir şekilde çözer . Şimdiye kadar bulunan en uzun artan alt diziyi koruyarak dizi öğelerini sırayla işler. Sıra değerlerini vb. olarak belirtin . Ardından, işlemden sonra algoritma iki dizide depolanmış değerlere sahip olacaktır:
- — aralıkta biten artan bir uzunluk dizisi olacak şekilde en küçük değerin indeksini saklar ( Bu ifadeyi daha açık hale getirmek gerekir ). Bu yüzden, eğer her endekslerin grubu anlamına gelir , öyle ki uzunluğunun artan bir alt sıra bulunur ve bitiş (olduğunu, orada mevcut indeksleri biten şekilde ), daha sonra : şu sahip olduğu için endeksidir ve (ya da eşit şekilde, ve için her ). Not olduğunu çünkü artan alt dizisinin uzunluğunu temsil eder ve onun fesih indeksini temsil eder.
- - ile biten en uzun artan ardışık dizide selefinin endeksini saklar
Ek olarak algoritma, şimdiye kadar bulunan en uzun artan alt dizinin uzunluğunu temsil eden bir L değişkenini depolar. Aşağıdaki algoritma sıfır tabanlı numaralandırma kullandığından , netlik için kullanılmayan ve böylece bir uzunluk dizisine karşılık gelen dolguludur Gerçek bir uygulama , endeksleri buna göre atlayabilir ve ayarlayabilir.
Algoritmanın herhangi bir noktasında dizinin
Algoritma daha sonra şu şekilde ilerler:
P = array of length N
M = array of length N + 1
L = 0
for i in range 0 to N-1:
// Binary search for the largest positive j ≤ L
// such that X[M[j]] < X[i]
lo = 1
hi = L + 1
while lo < hi:
mid = lo + floor((hi-lo)/2)
if X[M[mid]] < X[i]:
lo = mid+1
else:
hi = mid
// After searching, lo is 1 greater than the
// length of the longest prefix of X[i]
newL = lo
// The predecessor of X[i] is the last index of
// the subsequence of length newL-1
P[i] = M[newL-1]
M[newL] = i
if newL > L:
// If we found a subsequence longer than any we've
// found yet, update L
L = newL
// Reconstruct the longest increasing subsequence
S = array of length L
k = M[L]
for i in range L-1 to 0:
S[i] = X[k]
k = P[k]
return S
Algoritma, dizi öğesi başına tek bir ikili arama gerçekleştirdiğinden, toplam süresi Büyük O notasyonu kullanılarak O( n log n ) olarak ifade edilebilir . Fredman (1975) , Donald Knuth'a atfettiği bu algoritmanın bir varyantını tartışır ; Algoritma, incelediği varyantta , ikili aramayı yapmadan önce her bir değerin mevcut en uzun artan diziyi sabit zamanda genişletmek için kullanılıp kullanılamayacağını test eder. Bu değişiklikle, algoritma en kötü durumda en fazla n log 2 n − n log 2 log 2 n + O( n ) karşılaştırmalarını kullanır; bu, O( n ) Terim.
uzunluk sınırları
Göre erdos-Szekeres teoremi , herhangi bir sekans , n 2 + 1 farklı tamsayılar artan ya da azalan bir uzunlukta altdizisi sahiptir , n + 1 girişin her permütasyon eşit muhtemel olan girişler için artan uzun beklenen uzunluğa sıra yaklaşık olarak 2 √ n'dir . n sonsuza yaklaştıkça limitte , n öğeden oluşan rastgele izin verilmiş bir dizinin en uzun artan alt dizisinin uzunluğu , Gauss üniter topluluğundaki rastgele bir matrisin en büyük özdeğerinin dağılımı olan Tracy-Widom dağılımına yaklaşan bir dağılıma sahiptir .
Çevrimiçi algoritmalar
En uzun artan alt dizi, sürekli F dağılımına sahip bağımsız rastgele değişkenler dizisinin öğelerinin veya alternatif olarak rastgele bir permütasyonun öğelerinin birer birer bir algoritmaya sunulduğu çevrimiçi algoritmaların ayarında da incelenmiştir. sonraki unsurları bilmeden, her bir unsuru dahil edip etmeyeceğine karar vermelidir. Problemin çeşitli bağlamlarda ilginç uygulamalara izin veren bu varyantında, girdi olarak n büyüklüğünde rastgele bir örnek verildiğinde , maksimum beklenen uzunluk yaklaşık √ olan artan bir dizi oluşturacak optimal bir seçim prosedürü tasarlamak mümkündür. 2n . Bu optimal prosedür tarafından seçilen artan alt dizinin uzunluğu, yaklaşık olarak √ 2n /3'e eşit bir varyansa sahiptir ve olağan merkezleme ve ölçeklemeden sonra sınırlayıcı dağılımı asimptotik olarak normaldir . Aynı asimptotik sonuçlar, bir Poisson varış süreci ayarında karşılık gelen problem için daha kesin sınırlarla tutar. Poisson süreç ayarındaki bir başka iyileştirme, uygun bir normalleştirme ile beklenenden daha eksiksiz bir anlamda tutan optimal seçim süreci için merkezi bir limit teoreminin kanıtı yoluyla verilir . Kanıt, yalnızca "doğru" fonksiyonel limit teoremini değil, aynı zamanda tüm etkileşimli süreçleri özetleyen üç boyutlu sürecin (tekil) kovaryans matrisini de verir.
Başvuru
- Bölüm mummer (Maksimum Benzersiz Maç bulucu) bütün bir genomu hizalanması için sisteme.
- Git vb . sürüm kontrol sistemlerinde kullanılır .
- “Bazaar”da (Bazaar, zaman içindeki proje geçmişini izlemenize ve başkalarıyla kolayca işbirliği yapmanıza yardımcı olan bir sürüm kontrol sistemidir ) kullanılan bir farklılaştırma algoritması olan (dosyaların içeriği arasındaki farkları hesaplar ve görüntüler ) Patience Diff'te kullanılır. ..)
Ayrıca bakınız
- Sabır sıralama , en uzun artan alt dizinin uzunluğunu bulmak için etkili bir teknik
- Plactic monoid , en uzun artan alt dizinin uzunluğunu koruyan dönüşümlerle tanımlanan bir cebirsel sistem
- Anatoly Vershik , grup teorisinin uygulamalarını en uzun artan alt dizilere uygulayan bir Rus matematikçi
- En uzun ortak dizi
- En uzun alternatif dizi