Zmodyfkowana technka programowana dynamcznego Lech Madeysk 1, Zygmunt Mazur 2 Poltechnka Wrocławska, Wydzał Informatyk Zarządzana, Wydzałowy Zakład Informatyk Wybrzeże Wyspańskego 27, 50-370 Wrocław Streszczene. W artykule przedstawono metodę (technkę) częścowego spamętywana partal memozaton na tle nnych technk programowana dynamcznego. Wykorzystuje ona deę ogranczana lośc przechowywanych rozwązań. Jest to szczególne przydatne w przypadkach, w których lczba (rozmar) podproblemów unemożlwa zastosowane standardowych technk programowana dynamcznego. Modyfkacja w stosunku do technk spamętywana memozaton polega na tym, że (podobne jak w przypadku koncepcj wykorzystana pamęc podręcznej cache) pamętany jest tylko pewen podzbór rozwązań. Technkę częścowego spamętywana z powodzenem wykorzystano do stworzena nowego algorytmu na baze standardowego algorytmu faktoryzacj do oblczana nezawodnośc K-termnal. Wydaje sę, że zaprezentowana technka może znaleźć praktyczne zastosowane przy projektowanu równeż nnych algorytmów. Słowa kluczowe: projektowane algorytmów, programowane dynamczne, częścowe spamętywane. 1. Technka częścowego spamętywana Technk czy metody projektowana algorytmów są klasyczną dzedzną nformatyk, szeroko omawaną w pracach [1, 4-7, 9, 12]. Ich użyce prowadz często do uzyskana szybkch algorytmów. Jedną z powszechne stosowanych technk jest technka programowana dynamcznego, która pozwala unknąć welokrotnego rozwązywana tych samych podproblemów. Tworzona jest tablca, w której zapamętywane są rozwązana najmnejszych podproblemów (czasam określanych manem podproblemów elementarnych), a następne oblczonych na ch podstawe rozwązań podproblemów wększych rozmarów. Proces ten jest kontynuowany, aż do uzyskana rozwązana problemu perwotnego P, przy czym raz znalezone rozwązane podproblemu zostaje zapamętane może być wykorzystywane bez konecznośc ponownego oblczana. Przykładem efektywnego zastosowana technk programowana dynamcznego może być problem wyznaczana elementów cągu Fbonaccego. Defncja cągu jest następująca: 1 E-mal: madeysk@c.pwr.wroc.pl. 2 E-mal: mazur@c.pwr.wroc.pl.
2 F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2). Formuła ta w naturalny sposób jest wyrażona poprzez następujący algorytm rekurencyjny. Algorytm 1: nt fb(nt n) f(n <= 2) return 1; else return fb(n-1) + fb(n-2); Próbując dokładne prześledzć wywołana rekurencyjne okaże sę, że te same podproblemy rozwązywane są wele razy: F(5) / \ F(4) F(3) / \ / \ F(3) F(2) F(2) F(1) / \ F(2) F(1) Złożoność czasowa powyższego algorytmu jest wykładncza. Stosując technkę programowana dynamcznego można stworzyć prosty znaczne bardzej efektywny algorytm, który ne będze welokrotne rozwązywał tych samych podproblemów [12]. Algorytm 2: nt fb(nt n) nt f[n+1]; f[1] = f[2] = 1; for (nt = 3; <= n; ++) f[] = f[-1] + f[-2]; return f[n]; Zarówno złożoność pamęcowa, jak czasowa tego algorytmu, wynos O(n). Poneważ generowane kolejnych lczb Fbonaccego wcale ne wymaga pamętana wszystkch wcześnej rozwązanych podproblemów, można prosto zredukować złożoność pamęcową powyższego algorytmu do O(1) 3. Algorytm 3: nt fb(nt n) nt a=1, b=1, c=1; for (nt =3; <=n; ++) c=a+b; 3 Stosując trk z potęgowanem macerzy można uzyskać jeszcze efektywnejszy algorytm o złożonośc czasowej O(log n).
3 a=b; b=c; return c; Czasam zdarza sę, że ze względu na naturę rozpatrywanego problemu, trudno jest określć na wstępe podproblemy elementarne ch rozwązana, a następne sposób, formułę otrzymana na ch podstawe rozwązana problemu perwotnego. W takej sytuacj można zastosować technkę spamętywana określaną w języku angelskm termnem memozaton 4. Jest to zmodyfkowana technka programowana dynamcznego wykorzystująca strategę zstępującą. Algorytm wykorzystujący technkę spamętywana ma formę algorytmu rekurencyjnego z dodanym funkcjam zapamętywana dentyfkatorów podproblemów wraz z ch rozwązanam 5 oraz przeszukwana zarejestrowanych podproblemów, co zapobega welokrotnemu ch rozwązywanu. Algorytm wykorzystujący teracyjną technkę programowana dynamcznego ze strategą wstępującą, charakteryzuje sę podobną złożonoścą czasową jak algorytm stosujący technkę spamętywana (różnca o stały czynnk, na korzyść programowana dynamcznego, ze względu na koszt wywołań rekurencyjnych powrotów). Gdy rozwązane problemu wymaga rozwązana jedyne nektórych spośród wszystkch możlwych podproblemów, to zastosowane strateg zstępującej zamast wstępującej zapewna, że rozpatrywane będą tylko te podproblemy, których rozwązane jest nezbędne. Dzęk temu algorytm charakteryzować sę może mnejszą, nż w przypadku zastosowana strateg wstępującej, złożonoścą pamęcową czasową. W nektórych przypadkach lczba (rozmar) podproblemów unemożlwa zastosowane standardowych technk programowana dynamcznego. Dlatego zaproponowano technkę częścowego spamętywana partal memozaton wykorzystującą deę ogranczana lośc przechowywanych rozwązań 6. Technk spamętywana jak częścowego spamętywana są odmanam technk programowana dynamcznego, wykorzystującym strategę zstępującą. Technka częścowego spamętywana umożlwa ogranczene złożonośc pamęcowej algorytmu. Modyfkacja w stosunku do technk spamętywana polega na tym, że ne są przechowywane wszystke rozwązana, a jedyne te, które jak przypuszczamy mogą 4 Por. [5], s.358. 5 Jeżel jest określona relacja pomędzy pozycjam tabel a podproblemam, to wystarczy zapamętywać jedyne rozwązana. 6 Można sobe wyobrazć równeż teracyjne programowane dynamczne wykorzystujące deę ogranczana lośc przechowywanych rozwązań.
4 znacząco wpłynąć na przyspeszene algorytmu (np. ostatno zarejestrowane rozwązana jeżel przypuszczamy, że będą one częścej wykorzystywane nż te zarejestrowane wcześnej). Koncepcja ta jest podobna do koncepcj wykorzystana pamęc podręcznej cache 7. W przypadku zastosowana technk częścowego spamętywana należy pamętać, że: stratega ogranczana lośc przechowywanych rozwązań zależy od charakteru rozwązywanego problemu; w przypadku, gdy stneją różne stratege dekompozycj problemu perwotnego o efektywnośc algorytmu może decydować wybrana stratega dekompozycj. Algorytmy wykorzystujące technkę rekurencyjną, w których te same podproblemy są rozwązywane welokrotne, można bardzo prosto zmodyfkować, tak, aby wykorzystywały technk spamętywana lub częścowego spamętywana w zależnośc od charakteru problemu perwotnego P dostępnej pamęc. Pseudo-kod algorytmu wykorzystującego proponowaną technkę częścowego spamętywana jest następujący: P(N) rozwązywany problem solve(p(n)) f(p(n)jest zarejestrowany lub jego rozmar jest wystarczająco mały) return rozwązane; else Podzel P(N)na mnejsze podproblemy: P(N 1 ),..., P(N k ) for(=1; <=k; ++) oblcz stosując strategę ogranczana lośc przechowywanych rozwązań odrzuć bądź zarejestruj (ewentualne kosztem wcześnej zarejestrowanego rozwązana) rozwązane cząstkowe w =solve(p(n )) return Połącz rozwązana(w 1,..., w k ); Problem perwotny P podlega dekompozycj na k podproblemów mnejszych rozmarów, z których każdy podlega dekompozycj tak długo, aż rozmar problemu stane sę tak mały, że rozwązane będze oczywste lub będze można wykorzystać już zarejestrowane rozwązane. Raz znalezone rozwązane pewnego podproblemu może zostać zarejestrowane w marę możlwośc późnej wykorzystywane, jeżel w trakce pracy algorytmu okaże sę, że 7 Słowo cache ne było dotąd używane w kontekśce technk programowana. Pamęć cache występuje na różnych pozomach archtektury komputerów. Są w nej przechowywane często używane dane, co znaczne przyspesza dokonywane operacje. Pamęć cache perwszego pozomu jest najczęścej umejscowona w procesorze. Pamęć cache drugego pozomu, o wększej pojemnośc neco wolnejsza, znajduje sę zwykle poza procesorem. Często stosuje sę tzw. cache dysku, który może być realzowany sprzętowo (kontrolery dysków lub same dysk zawerają pamęć cache) programowo (np. smartdrv z systemu operacyjnego MS-DOS). W przypadku opsywanej technk w pamęc cache będą przechowywane rozwązana podproblemów ewentualne (jeżel to będze koneczne) odpowadające m dentyfkatory.
5 w poszczególnych węzłach drzewa oblczeń występują te same podproblemy. Rozwązana podproblemów są łączone w celu uzyskana rozwązana problemu perwotnego P. Podsumowując, stosowane technk częścowego spamętywana można polecć, gdy: mamy do czynena z welokrotnym rozwązywanem tych samych podproblemów; trudno jest określć na wstępe podproblemy mnejszych rozmarów, ch rozwązana, a następne formułę otrzymana na ch podstawe rozwązana problemu perwotnego P; lczba (rozmar) możlwych podproblemów jest bardzo duża (np. wykładncza przestrzeń podproblemów) ze względu na mnejszą złożoność pamęcową technk częścowego spamętywana nż klasycznego programowana dynamcznego czy technk spamętywana. Ponadto jeżel rozwązane problemu wymaga rozwązana jedyne nektórych spośród wszystkch możlwych podproblemów, to zastosowane technk spamętywana lub częścowego spamętywana zapewna, że rozpatrywane będą tylko te podproblemy, których rozwązane jest nezbędne. 2. Przykład efektywnego wykorzystana technk częścowego spamętywana Technkę częścowego spamętywana wykorzystano do stworzena nowego znaczne efektywnejszego algorytmu na baze standardowego algorytmu faktoryzacj do oblczana nezawodnośc K-termnal. Analza nezawodnośc różnego rodzaju sec, których łącza ulegają wzajemne nezależne losowym uszkodzenom 8 jest tematem ntensywnych badań. Najczęścej rozważany problem nezawodnośc K-termnal (K-termnal network relablty problem) określa prawdopodobeństwo, ż wszystke węzły w pewnym określonym zborze K (2<= K <= V ) są połączone poprzez śceżk ne uszkodzonych łączy [8, 11]. Równe często są rozważane przypadk brzegowe: problem nezawodnośc dwóch termnal (2-termnal network relablty), gdy K =2; problem nezawodnośc wszystkch termnal (All-termnal network relablty), gdy K = V. Zwykle stosowanym algorytmem do wyznaczana nezawodnośc sec jest algorytm faktoryzacj z zachowującym nezawodność redukcjam grafu [8, 11]. Algorytm faktoryzacj wykorzystuje zdarzena elementarne sprawnośc lub nesprawnośc pojedynczej krawędz. 8 Na ogół zakłada sę, że węzły sec są całkowce nezawodne.
6 Stany grafu można podzelć na dwa zbory ze względu na dwa możlwe stany krawędz e o nezawodnośc p. Stąd nezawodność K-termnal można wyrazć w postac prostej formuły nezawodnośc warunkowej: R ( GK) = p R( GK e funkcjonuje) + ( 1 p ) R( GK e ne funkcjonuje). Twerdzene faktoryzacj jest topologczną nterpretacją powyższej formuły dla grafów neskerowanych. Twerdzene 1 (Twerdzene faktoryzacj) Zgodne z formułą faktoryzacj nezawodność K-termnal sec probablstycznej reprezentowanej poprzez graf G z wyróżnonym podzborem węzłów K można wyrazć następująco: R ( G ) = p R( G * e ) + ( 1 p ) R( G e ), K gdze: K ' e dowolna krawędź grafu G K ; p prawdopodobeństwo, że łącze reprezentowane przez G K ' * e ( V u v + w, E e ) K K' = K u v + w G e = ( V, E e ). K =, K w = u v; jeżel u, v K; jeżel u K lub v K; e E funkcjonuje; Nezawodność R(G K ) dowolnej sec reprezentowanej przez graf G K może być oblczona poprzez rekurencyjne wywoływane formuły faktoryzacj ewentualne dokonywane zachowujących nezawodność redukcj sec [11]. Pesymstyczna złożoność czasowa takego algorytmu jest wykładncza. Poneważ wykazano [2, 3, 11], że problem nezawodnośc K-termnal w ogólnym przypadku należy do klasy problemów NP-trudnych #P-zupełnych, węc mało prawdopodobne jest stnene welomanowego (w najgorszym przypadku) algorytmu do rozwązana tego problemu. Możlwe jest jednak zastosowane w algorytme faktoryzacj technk częścowego spamętywana. W efekce prowadz to do znacznego przyspeszena oblczana nezawodnośc sec. Badając algorytm faktoryzacj można zauważyć, ż w welu węzłach bnarnego drzewa oblczeń te same podproblemy (sec powstałe w wynku stosowana faktoryzacj redukcj) rozwązywane są wele razy. Zamast welokrotne rozwązywać ten sam podproblem (oblczać nezawodność tej samej sec) jak ma to mejsce w przypadku standardowego
7 algorytmu faktoryzacj znaczne efektywnej byłoby użyć wcześnej oblczony zapamętany rezultat oblczeń. Załóżmy, ż Fact oznacza standardowy algorytm faktoryzacj (wg Page Perry [8]) 9 z zachowującym nezawodność redukcjam grafu (równoległą, szeregową, perwszego drugego stopna). Natomast nech Fact&Cache oznacza zaproponowany przez nas algorytm faktoryzacj z zachowującym nezawodność redukcjam grafu wykorzystujący technkę częścowego spamętywana. Algorytm Fact&Cache używa strateg przechowywana ostatno zarejestrowanych rozwązań. Ponadto podproblemy o wększym rozmarze są dłużej przechowywane nż podproblemy o mnejszym rozmarze. Zarówno algorytm Fact jak Fact&Cache zostały praktyczne zamplementowane w języku C++. Dośwadczalne porównano efekty pracy programów wykorzystujących algorytmy Fact, Fact&Cache jak rezultaty otrzymane za pomocą gotowego paketu NRA97 powstałego na unwersytece Mttweda 10. Wykonano oblczena nezawodnośc dwóch termnal jak nezawodnośc wszystkch termnal w przypadku sec 3x12 z ponższego rysunku. Rysunek 1. Seć 3x12. Program wykorzystujący algorytm Fact&Cache okazał sę ponad sto razy szybszy od paketu NRA97, jak równeż programu wykorzystującego algorytm Fact w przypadku oblczana nezawodnośc wszystkch termnal przynajmnej klka tysęcy razy szybszy w przypadku oblczana nezawodnośc dwóch termnal. Pozwala to przypuszczać, że 9 Stratega wyboru krawędz do faktoryzacj została zmenona z losowej na stałą (zawsze wyberana jest ostatna krawędź z lsty krawędz grafu), co daje na ogół lepsze rezultaty. 10 NRA97 (Network Relablty Analyss (C)1997, HTW Mttweda) paket do analzy nezawodnoścowej sec, pracujący w środowsku Wndows 3.1/Wndows95 stworzony na Unwersytece Mttweda
8 zaprezentowana technka częścowego spamętywana może znaleźć praktyczne zastosowane w projektowanu algorytmów do rozwązywana welu nnych problemów. Szczególne w przypadkach, w których lczba (rozmar) podproblemów ograncza zastosowane technk spamętywana czy programowana dynamcznego.
9 Lteratura: [1] A. V. Aho, J. E. Hopcroft, J. D. Ullman, Projektowane analza algorytmów komputerowych, PWN, 1983. [2] M. O. Ball, J. S. Provan, The complexty of countng cuts and of computng the probablty that a graph s connected, SIAM J. Comp., 1983 (12), 777-788. [3] M. O. Ball, Computatonal complexty of network relablty analyss: An overvew, IEEE Trans. Relablty, 1986 (R-35), 230-239. [4] L. Banachowsk, K. Dks, W. Rytter, Algorytmy struktury danych, WNT, 1996. [5] T. H. Cormen, C. E. Leserson, R. L. Rvest, Wprowadzene do algorytmów, WNT, 1997. [6] A. Drozdek, D. L. Smon, Struktury danych w języku C, WNT, 1996. [7] E. Horowtz, S. Sahn, Fundamentals of Computer Algorthms, Computer Scence Press, 1978. [8] L. B. Page, J. E. Perry, A practcal mplementaton of the factorng theorem for network relablty, IEEE Trans. Relablty, 1988 (37) Aug, 259-267. [9] R. Sedgewck, Algorthms n C, Addson-Wesley, 1990. [10] L. G. Valant, The complexty of enumeraton and relablty problems, SIAM J. Computng, 1979 (8), 410-421. [11] R. K. Wood, Factorng Algotthms for Computng K-Termnal Network Relablty, IEEE Trans. Relablty, 1986 (R-35), 269-278. [12] P. Wróblewsk, Algorytmy, struktury danych technk programowana, Helon, 1997.