Nejdelší rostoucí subsekvence - Longest increasing subsequence
Ve výpočetní technice je nejdéle rostoucím problémem subsekvencí nalezení subsekvence dané sekvence, ve které jsou prvky subsekvence seřazené, od nejnižší po nejvyšší a ve které je subsekvence co nejdelší. Tato subsekvence není nutně souvislá nebo jedinečná. Nejdelší rostoucí subsekvence jsou studovány v rámci různých oblastech souvisejících s matematiky , včetně algoritmizace , teorie náhodných matice , teorie reprezentace a fyziky . Nejdelší rostoucí problém subsekvencí je řešitelný v čase O ( n log n ), kde n označuje délku vstupní sekvence.
Příklad
V prvních 16 termínech binární Van der Corputovy sekvence
- 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15
je nejdelší rostoucí podsekvencí
- 0, 2, 6, 9, 11, 15.
Tato subsekvence má délku šest; vstupní sekvence nemá žádné sedmičlenné rostoucí podsekvence. Nejdelší rostoucí subsekvence v tomto příkladu není jediným řešením: například
- 0, 4, 6, 9, 11, 15
- 0, 2, 6, 9, 13, 15
- 0, 4, 6, 9, 13, 15
jsou další rostoucí podsekvence stejné délky ve stejné vstupní sekvenci.
Vztahy k dalším algoritmickým problémům
Nejdelší rostoucí problém subsekvencí úzce souvisí s nejdelším společným problémem subsekvence , který má kvadratické časové dynamické programovací řešení: nejdelší rostoucí subsekvence sekvence S je nejdelší společnou subsekvencí S a T , kde T je výsledkem třídění S . Ve zvláštním případě, kdy je vstupem permutace celých čísel 1, 2, ..., n , však lze tento přístup učinit mnohem efektivnějším, což vede k časovým hranicím tvaru O ( n log log n ).
Největší klika v permutačním grafu odpovídá nejdelší klesající subsekvenci permutace, která graf definuje (za předpokladu, že je původní nepermutovaná sekvence seřazena od nejnižší hodnoty po nejvyšší). Podobně maximální nezávislá množina v permutačním grafu odpovídá nejdelší neklesající subsekvenci. K efektivnímu vyřešení problému s klikou v permutačních grafech lze tedy použít nejdelší rostoucí algoritmy subsekvencí .
V Robinsonově -Schenstedově korespondenci mezi permutacemi a Youngovými tableaux se délka prvního řádku tabla odpovídající permutaci rovná délce nejdelší rostoucí subsekvence permutace a délka prvního sloupce se rovná délce nejdelší klesající podsekvenci.
Efektivní algoritmy
Níže popsaný algoritmus efektivně řeší nejdelší rostoucí problém subsekvencí pomocí polí a binárního vyhledávání . Zpracovává sekvenční prvky v pořadí a zachovává dosud nejdelší rostoucí subsekvenci. Označte hodnoty sekvence jako atd. Poté, po zpracování , bude mít algoritmus uložené hodnoty ve dvou polích:
- - ukládá index nejmenší hodnoty tak, že dochází k rostoucí podsekvenci délky končící na v rozsahu ( Toto prohlášení musí být jasnější ). Pokud tedy označuje množinu všech indexů tak, že a existuje rostoucí podposloupnost délky končící na (to znamená, že existují indexy končící na takové, že ), pak je index, pro který platí následující: a (nebo ekvivalentně a pro každý ). Všimněte si toho, protože protože představuje délku rostoucí podposloupnosti a představuje index jejího ukončení.
- - ukládá index předchůdce v nejdelší rostoucí subsekvenci končící na
Algoritmus navíc ukládá proměnnou L představující délku dosud nalezené nejdelší rostoucí subsekvence. Protože níže uvedený algoritmus používá číslování založené na nule , je pro přehlednost vyplněno, což se nepoužívá, což odpovídá podsekvenci délky Skutečná implementace může podle toho přeskočit a upravit indexy.
Všimněte si, že v jakémkoli bodě algoritmu sekvence
Algoritmus tedy probíhá následovně:
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
Protože algoritmus provádí jedno binární vyhledávání na prvek sekvence, jeho celkový čas lze vyjádřit pomocí Big O notace jako O ( n log n ). Fredman (1975) pojednává o variantě tohoto algoritmu, kterou připisuje Donaldu Knuthovi ; ve variantě, kterou studuje, algoritmus před provedením binárního vyhledávání testuje, zda lze každou hodnotu použít k prodloužení aktuální nejdelší rostoucí sekvence v konstantním čase. S touto modifikací algoritmus používá nanejvýš n log 2 n - n log 2 log 2 n + O ( n ) srovnání v nejhorším případě, což je optimální pro algoritmus založený na srovnání až do konstantního faktoru v O ( n ) termín.
Hranice délky
Podle Erdős – Szekeresovy věty má jakákoli sekvence n 2 +1 odlišných celých čísel rostoucí nebo klesající subsekvenci délky n + 1. U vstupů, u nichž je každá permutace vstupu stejně pravděpodobná, se předpokládaná délka nejdelší subsekvence je přibližně 2 √ n . V limitu, když se n blíží nekonečnu, má délka nejdelší rostoucí subsekvence náhodně permutované sekvence n položek distribuci blížící se distribuci Tracy – Widom , distribuci největší vlastní hodnoty náhodné matice v Gaussově unitárním souboru .
Online algoritmy
Nejdelší rostoucí subsekvence byla také studována v nastavení online algoritmů , ve kterých jsou prvky sekvence nezávislých náhodných proměnných se spojitou distribucí F - nebo alternativně prvky náhodné permutace - prezentovány po jednom algoritmu, který musí rozhodnout, zda zahrnout nebo vyloučit každý prvek, bez znalosti pozdějších prvků. V této variantě problému, která umožňuje zajímavé aplikace v několika kontextech, je možné navrhnout optimální postup výběru, který vzhledem k náhodnému vzorku velikosti n jako vstupu vygeneruje rostoucí sekvenci s maximální očekávanou délkou velikosti přibližně √ 2n . Délka rostoucí subsekvence zvolená tímto optimálním postupem má rozptyl přibližně rovný √ 2n /3 a její omezující distribuce je po obvyklém centrování a škálování asymptoticky normální . Stejné asymptotické výsledky platí pro přesnější meze pro odpovídající problém při nastavení Poissonova procesu příchodu. Další upřesnění v nastavení Poissonova procesu je dáno důkazem centrální limitní věty pro optimální výběrový proces, který drží, s vhodnou normalizací, v úplnějším smyslu, než by se dalo očekávat. Důkaz přináší nejen „správnou“ funkční limitní větu, ale také (singulární) kovarianční matici trojrozměrného procesu shrnující všechny interagující procesy.
aplikace
- Součást systému MUMmer (Maximum Unique Match finder) pro zarovnání celých genomů.
- Používá se v systémech pro správu verzí, jako je Git atd.
- Používá se v Patience Diff, rozdílném algoritmu (vypočítává a zobrazuje rozdíly mezi obsahem souborů), který se používá v „Bazaru“ (Bazaar je systém pro správu verzí, který vám pomůže sledovat historii projektu v čase a snadno spolupracovat s ostatními ..)
Viz také
- Třídění podle trpělivosti , efektivní technika pro zjišťování délky nejdelší rostoucí dílčí posloupnosti
- Plaktický monoid , algebraický systém definovaný transformacemi, které zachovávají délku nejdelší rostoucí subsekvence
- Anatoly Vershik , ruský matematik, který studoval aplikace teorie skupin za účelem nejdelšího zvyšování podsekvencí
- Nejdelší společná subsekvence
- Nejdelší střídavá podsekvence