najdłuższy podciąg rosnący
Twierdzenie 3.4. Algorytm MaxWLIS (rys. 3.6) wyznacza podciąg MaxWLIS
Dowód. Wszystkie symbole z ciągu A o rangach równych długości podciągu LIS znajdują się wΓ∗[|Γ∗|]. Wobec tego wystarczy znaleźć wśród nich symbol, dla którego szerokość podciągu LIS jest maksymalna i wyznaczyć żądany podciąg podążając za wskaźnikami począwszy od
tego symbolu.
Analiza złożoności czasowej tego algorytmu jest identyczna z analizą algorytmu MinHLIS (podrozdz. 3.3). Zatem, złożoność czasowa algorytmu MaxWLIS wynosiτPP+Θ(n).
3.7. Wariant o minimalnej sumie
Problem 3.5 (Najdłuższy podciąg rosnący o minimalnej sumie, MinSLIS). DLa ciągu A zna-leźć najdłuższy podciąg rosnący o minimalnej sumie.
Przykład 3.5 (Najdłuższy podciąg rosnący o minimalnej sumie, MinSLIS). Dla ciągu licz-bowego A= 4 6 2 8 1 3 12 9 5 7 11 10 najdłuższym podciągiem rosnącym o minimalnej sumie jest A0= 1 3 5 7 10. Jego suma wynosi 26. W ciągu A podkreślono symbole tworzące podciąg MinSLIS.
3.7. Wariant o minimalnej sumie 53 MinSLIS(A)
Wejście: A – ciąg, dla którego wyznaczany będzie podciąg LIS o minimalnej sumie Wyjście: najdłuższy podciąg rosnący o minimalnej sumie w ciągu A
{Wiersze 1–14 identyczne jak na rys. 3.4}
15 return Ciąg symboli połączonych wskaźnikamiπpocząwszy od symbolu kończącegoΓ∗[|Γ∗|]
Rys. 3.7. Algorytm rozwiązujący problem MinSLIS Fig. 3.7. An algorithm solving MinSLIS problem
Pokrycie wyznaczone przez algorytm MaxHLIS (rys. 3.4) może być wykorzystane także do innych celów. Na rys. 3.7 przedstawiono algorytm wyznaczający najdłuższy podciąg ro-snący o maksymalnej sumie elementów. Jak można zauważyć, różnica pomiędzy algorytmami MaxHLISi MinSLIS sprowadza się do innego sposobu znalezienia symbolu, od którego należy rozpocząć odczytywanie wyniku.
Lemat 3.9. Dla dowolnych czwórek hai, i,πi, vii oraz haj, j,πj, vji należących do tej samej listy pokryciaΓ∗[k], takich że ai< aj suma elementów podciągu rosnącego (otrzymywanego przez podążanie za wskaźnikami) kończącego się na aijest mniejsza niż suma elementów podciągu rosnącego kończącego się na aj(otrzymywanego w analogiczny sposób).
Dowód. Niechζxoznacza sumę elementów podciągu rosnącego ciągu A kończącego się na ax
otrzymanego przez podążanie za wskaźnikami począwszy od ax. Dowód zostanie przeprowa-dzony przez indukcję względem k, będącego numerem listy pokrycia Γ∗. Dla k = 1 jedyne elementy należące do dowolnych podciągów jednoelementowych o elementach rangi 1 to ai
oraz aj. Ponieważζi= aiaζj= aj, więc z faktu, że ai< aj, wynikaζi<ζj. Niech teraz k > 1.
Ponieważ ai< aj, a oba elementy należą do tej samej listy pokryciaΓ∗, więc i > j, tzn. aizostał wstawiony do tej listy później niż aj. Wskaźnikπjwskazuje element aj0będący najmniejszym elementem listyΓ∗[k − 1] takim, że j0< j. Podobnie, wskaźnikπiwskazuje element ai0 będący najmniejszym elementem listyΓ∗[k − 1] takim, że i0< i. Z tego wynika, że ai0 ≤ aj0 i i0≥ j0. Ponieważζi0 ≤ζj0i ai< aj, więcζi<ζj.
Lemat 3.10. Najdłuższy podciąg rosnący o minimalnej sumie kończący się na ai może zo-stać odczytany z pokrycia przez podążanie począwszy od ai za wskaźnikami znajdującymi się w czwórkach.
Dowód. Dowód przez indukcję względem k, będącego numerem listy pokryciaΓ∗. Dla k = 1 twierdzenie jest oczywiste. Niech teraz k > 1. Z lematu 3.9 wiadomo, że sumy podciągów ro-snących, które mogą być otrzymane przez podążanie za wskaźnikami z każdego symbolu aj
należącego doΓ∗[k − 1], są uporządkowane w kolejności malejącej. Z tego wynika, że podciąg
MaxSLIS(A)
Wejście: A – ciąg, dla którego wyznaczany będzie podciąg LIS o maksymalnej sumie Wyjście: najdłuższy podciąg rosnący o maksymalnej sumie w ciągu A
{Wiersze 1–14 identyczne jak na rys. 3.2}
15 return Ciąg symboli połączonych wskaźnikamiπpocząwszy od symbolu rozpocz.Γ∗[|Γ∗|]
Rys. 3.8. Algorytm rozwiązujący problem MaxSLIS Fig. 3.8. An algorithm solving MaxSLIS problem
MinSLIS kończący się na najmniejszym elemencie aj listy Γ∗[k − 1] takim, że j < i rozsze-rzony o symbol ai jest podciągiem MinSLIS kończącym się na elemencie ai, a symbol aj jest
wskazywany przezπi.
Twierdzenie 3.5. Z lematów 3.9 oraz 3.10 wynika, że podciąg MinSLIS może być otrzymany przez podążanie za wskaźnikami począwszy od symbolu kończącegoΓ∗[|Γ∗|].
Analiza złożoności czasowej tego algorytmu jest identyczna z analizą algorytmu MaxHLIS przedstawioną w podrozdz. 3.4.
3.8. Wariant o maksymalnej sumie
Problem 3.6 (Najdłuższy podciąg rosnący o maksymalnej sumie, MaxSLIS). Dla ciągu A zna-leźć najdłuższy podciąg rosnący o maksymalnej sumie.
Przykład 3.6 (Najdłuższy podciąg rosnący o maksymalnej sumie, MaxSLIS). Dla ciągu liczbo-wego A= 4 6 2 8 1 3 12 9 5 7 11 10 najdłuższym podciągiem rosnącym o maksymalnej sumie jest A0= 4 6 8 9 11. Jego suma wynosi 39. W ciągu A podkreślono symbole tworzące podciąg MaxSLIS.
Pokrycie uzyskane po zastosowaniu algorytmu MinHLIS (rys. 3.2) może być użyte także do innych celów. Na rys. 3.8 przedstawiono algorytm wyznaczający najdłuższy podciąg rosnący o maksymalnej sumie elementów. Jak można łatwo zauważyć, różnica pomiędzy algorytmami MinHLISi MaxSLIS sprowadza się do innego sposobu znalezienia symbolu, od którego należy rozpocząć odczytywanie wyniku.
Lemat 3.11. Dla dowolnych czwórek hai, i,πi, vii oraz haj, j,πj, vji należących do tej samej listy pokryciaΓ∗[k], takich że ai< aj suma elementów podciągu rosnącego (otrzymywanego przez podążanie za wskaźnikami) kończącego się na aijest mniejsza niż suma elementów podciągu rosnącego kończącego się na aj(otrzymywanego w analogiczny sposób).
3.9. Analiza złożoności czasowych i pamięciowych 55 Dowód. Niechζxoznacza sumę elementów podciągu rosnącego ciągu A kończącego się na ax
otrzymanego przez podążanie za wskaźnikami począwszy od ax. Dowód zostanie przeprowa-dzony przez indukcję względem k, będącego numerem listy pokrycia Γ∗. Dla k = 1, jedyne elementy należące do dowolnych podciągów jednoelementowych o elementach rangi 1 to ai
oraz aj. Ponieważζi= aiaζj= aj, więc z faktu, że ai< aj, wynikaζi<ζj. Niech teraz k > 1.
Ponieważ ai< aj, a oba elementy należą do tej samej listy pokryciaΓ∗, więc i > j, tzn. aizostał wstawiony do tej listy później niż aj. Wskaźnikπj wskazuje największy element aj0 mniejszy niż aj należący do listyΓ∗[k − 1] taki, że j0< j. Podobnie, wskaźnikπi wskazuje największy element ai0mniejszy niż ainależący do listyΓ∗[k − 1] taki, że i0< i. Z tego wynika, że ai0≤ aj0 i i0≥ j0. Ponieważζi0≤ζj0 i ai< aj, więcζi<ζj. Lemat 3.12. Najdłuższy podciąg rosnący o maksymalnej sumie kończący się na ai może zo-stać z pokrycia odczytany przez podążanie począwszy od ai za wskaźnikami znajdującymi się w czwórkach.
Dowód. Dowód przez indukcję względem k, będącego numerem listy pokryciaΓ∗. Dla k = 1 twierdzenie jest oczywiste. Niech teraz k > 1. Z lematu 3.11 wiadomo, że sumy podciągów rosnących, które mogą być otrzymane przez podążanie za wskaźnikami z każdego symbolu aj
należącego doΓ[k − 1], są uporządkowane w kolejności malejącej. Z tego wynika, że podciąg MaxSLIS kończący się na największym elemencie aj listyΓ∗[k − 1] takim, że aj< ai rozsze-rzony o symbol ai jest podciągiem MaxSLIS kończącym się na elemencie ai, a symbol aj jest
wskazywany przezπi.
Twierdzenie 3.6. Z lematów 3.11 oraz 3.12 bezpośrednio wynika, że podciąg MaxSLIS