• Nie Znaleziono Wyników

Algorytm MaxWLIS (rys. 3.6) wyznacza podciąg MaxWLIS

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ę[|Γ|]. 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= aij= aj, więc z faktu, że ai< aj, wynikaζij. 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ζij. 

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= aij= aj, więc z faktu, że ai< aj, wynikaζij. 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ζij.  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