13.07.2015 Views

Kaip sprendžiame neišsprendžiamus uždavinius ... - techmat.vgtu.lt

Kaip sprendžiame neišsprendžiamus uždavinius ... - techmat.vgtu.lt

Kaip sprendžiame neišsprendžiamus uždavinius ... - techmat.vgtu.lt

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Skaičiavimo metodų ir matematinio modeliavimoseminaras Nr. 1 (108)<strong>Kaip</strong> sprendžiame neišsprendžiamus uždaviniusRaimondas ČIEGISVilniaus Gedimino Technikos Universitetas,Saulėtekio al. 11, Vilnius, Lietuvae-mail: rc@fm.<strong>vgtu</strong>.<strong>lt</strong>1


Matematiniu˛uždaviniu˛sudėtingumasMatematiniu˛uždaviniu˛sudėtingumo vertinimo būdaiyra labai įvairūs.Egzistuoja daug pavyzdžiu˛apie klasikiniu˛uždaviniu˛(jų formuluotės labai paprastos, suprantamos ir penktokui)sprendinio egzistavimo arba nebuvimo įrodymo sudėtinguma.˛Prisiminkime didžiaj ˛a˛Ferma teorema˛Lygtisx n + y n = z n , n > 2neturi sprendinių teigiamų sveikųjų skaičių aibėje.2


Lengviausias priešingo teiginio įrodymo būdas yra surasti(atspėti) kontrapavyzdį.Pavyzdžiui, jei n = 2, tai:3 2 + 4 2 = 5 2 .Todėl ir didžiaj ˛a˛Ferma˛teorema˛bandyta įrodyti arbapaneigti remiantis paprastais pertvarkymais, loginiaissamprotavimais arba variantu˛perrinkimu.3


Teoremos įrodymo istorijaAtvejį, kai n=3, įrodė Leonardas Oileris, kai n=4 – pats Ferma,n=5 – Ležandras, n=7 – Lamė, n=14 – Leženas-Dirichlė.Teisingas pilnas teoremos įrodymas pateiktas tik po357 metu˛matematiko Andrew Wiles, išspausdinusioįrodyma˛1995 metais (Fieldso medalis 1998 metais Berlyne)Ryšys tarp Ferma teoremos ir Shimura–TaniyamahipotezėsIf p is an odd prime and a, b, and c are positive integerssuch that ap + bp = cp, then a correspondingequationy 2 = x(x − ap)(x + bp)defines a hypothetical elliptic curve, called the Freycurve, which must exist if there is a counterexampleto Fermat’s Last Theorem.4


Algoritmu˛sudėtingumo analizėAlgoritmas yra tiksliai apibrėžta skaičiavimo procedūra,kuria, imdami pradinius duomenis ir atlikę baigtinįskaičiu˛operaciju, ˛ gauname rezu<strong>lt</strong>ata.˛Skaičiavimo procedūra˛galime suprasti kaip kompiuterioprograma, ˛ užrašyta˛viena iš programavimo kalbu.˛5


Nagrinėkime dvieju˛matricu˛sandaugosskaičiavimo algoritma˛C = ABc ij =n∑k=1a ik b kj , 1 ≤ i, j ≤ n .Iš viso atliekame n 3 daugybos ir n 2 (n−1) sumavimoveiksmu, ˛ arba (2n 3 − n 2 ) aritmetiniu˛veiksmu.˛Ar galima apskaičiuoti dvieju˛matricu˛sandauga˛greičiau?6


Taip!Štraseno algoritmu, atliekame O(n log 7 ) veiksmu.˛7


Uždaviniai, kuriu˛sprendiniui rasti žinome polinominiosudėtingumo O(n p ) algoritmus, yra "išsprendžiami"net kai ju˛dimensija n ≫ 1 (aišku, jei p nėra didelisskaičius).• tiesinė algebra,• tikriniu˛reikšmiu˛radimo uždaviniai,• matematinės fizikos uždaviniai• . . .8


Nepolinominio sudėtingumo uždaviniaiTurime n skirtingu˛objektu ˛ (a 1 , a 2 , . . . , a n ).Reikia sugeneruoti visus skirtingus šiu˛objektu˛d ėstinius(kėlinius)P n = { (a ′ 1 , a′ 2 , . . . , a′ n) } .Skirtingu˛kėliniu˛yra n!, todėl net ir efektyviausiu˛generavimoalgoritmu˛sudėtingumas O(n!).Naudodami Stirlingo formulę, įvertinamen! = √ ( n2πne) n.9


Kėliniu˛P n generavimo laikaiT (11) = 0.28,T (13) = 44.7T (15) ≈ 2.61,T (17) ≈ 29.5,T (12) = 3.4(s)T (14) = 626(s)T (16) ≈ 41.7(h)T (18) ≈ 532(d)T (20) ≈ 553 metai.Galime kurti lygiagrečiuosius algoritmus. Naudodami2056 procesorius išspręsime šį uždavinį per 3 m ėnesius.Tačiau P 21 aibę generuosime ilgiau nei 5 metus.10


RSA kodavimo algoritmasRSA viešojo rakto kodavimo algoritmas yra naudojamasdaugelyje svarbiu˛duomenu˛kodavimo algoritmu,˛pvz. SSH (secure shell), SCP programose.Viešojo rakto kodavimo sistemoje visi vartotojai gali užkoduotipranešima, ˛ bet jį perskaityti gali tik tas, kas žino kodo rakta.˛Turime 2 56 skirtingus kodo rakto variantus, todėl kodopatikimumas priklauso nuo to, ar greitai galime patikrintivisus raktus.Ar uždavinys "išsprendžiamas" per kritinį laiko intervala?˛Išeitis: padidinti kodo ilgį iki 128 bitu.˛11


Sudoku žaidimasTurime 9 × 9 dydžio matrica. ˛ Visa lentelė suskirstyta į devynismažesnius kvadratėlius, kurie susideda iš 3 × 3 langelių. Kaikurie langeliai yra užpildyti skaičiais nuo 1 iki 9.Žaidimo tikslas – užpildyti visus stulpelius, eilutes ir 3 × 3 kvadratėliusskaičiais nuo 1 iki 9 (nei vienas skaičius juose negalikartotis).8967176 72 3 1 64 7 5 67 9 1 26 3 4 94 9 2 15 485386912


Užpildyta lentelė8 1 6 4 5 9 7 2492513673 5 6 2 7 9 17 2 3 1 8 6 44 9 8 7 3 5 68 7 9 6 1 2 36 3 2 4 5 8 95 4 7 9 2 1 89 1 5 8 4 3 72 8 1 3 6 4 538514762913


Variantu˛perrinkimo algoritmasint Tikrink (int n, Inf pozicija)begin(1) if ( End (pozicija) == Pabaiga ) then(2) Spausdink (pozicija);(3) return(1);(4) else(5) S = BandymųAibė(pozicija)(6) while ( S ≠ ∅ ) do(7) NaujaPozicija(S, pozicija);(8) if (Tikrink (n+1, pozicija) == 1) return (1);(8) else(10) SenaPozicija(S, pozicija);end ifend do(11) return (0);end ifend Tikrink14


S leistinu˛ėjimu˛aibė• Siekiame minimizuoti S.• Kuo greičiau išsiaiškinti, kad pozicija neleistina.• Nei vienas skaičius 3 aibėse negali kartotis(iš viso 21 laukelyje).Nauja pozicija• Leksikografinė tvarka.15


4 × 4 Sudoku variantasTestas 1: variantu˛skaičius 7.75835 · 10 101("lengvas" uždavinys)Uždavinio sprendimo laikas – 589 sekundės.16


S aibės parinkimo modifikacija• Nei vienas skaičius 3 aibėse negali kartotis(iš viso 21 laukelyje).• Patikriname ar lentelėje egzistuoja bent 2 priklausomilaukai, kuriuose leistinas tik vienas ir taspats skaičius.Tikrinimas sudėtingesnis, bet⇒Uždavinio sprendimo laikas – 190 sekundžiu.˛17


Testas 2: variantu˛skaičius 2.42879 · 10 105("sunkus" uždavinys)Uždavinio sprendimo laikas – 34.5 valandos.Naujos pozicijos pasirinkimo algoritmas• Laukelis, kuriame leistinu˛ėjimu˛skaičius yra mažiausias(heap duomenų strukt ūra).Uždavinio sprendimo laikas – 3.2 sekundės(pagreitėjimas 3600 kartų).18


Testas 3: variantu˛skaičius 3.64359 · 10 112("labai sunkus" uždavinys)Uždavinio sprendimo laikas – 350 sekundžiu.˛Lygiagretieji algoritmaiLabai netrivialus uždavinys, nes• užduočiu˛aibė sudaroma dinamiškai;• algoritmo sudėtingumas priklauso nuo pasirinktoskrypties, kai egzistuoja daugiau nei viena pasirinkimogalimybė.19


NP sudėtingumo uždaviniaiPalyginkime n 2 ir 2 n sudėtingumo algoritmus.Padidinus duomenų skaičių dvigubai, polinominio sudėtingumoalgoritmo skaičiavimo trukmė padidėja keturis kartus.Eksponentinio sudėtingumo algoritmo skaičiavimo trukmė padidėjadu kartus, pridėjus tik viena˛papildoma˛duomenį, ir keturiskartus, pridėjus du duomenis.Išskiriame NP (angl. nondeterministic polynomial time) uždaviniu˛klasę.NP uždaviniams nežinome polinominio sudėtingumo sprendimoalgoritmų, tačiau, atlikę O(n k ) veiksmų, galime patikrinti, ar duotasisobjektas yra uždavinio sprendinys.P ⊂ NP, bet ar P ≠ NP ?20


1. Hami<strong>lt</strong>ono ciklas. Reikia patikrinti ar duotajame grafe G =(V, E) egzistuoja ciklas, jungiantis visas jo virš ūnes.2. Keliaujančio pirklio uždavinys. Duotas svertinis grafas G =(V, E), reikia rasti trumpiausia˛pirklio maršruta, ˛ kai jis poviena˛karta˛aplanko visas grafo virš ūnes ir grįžta į pradinęvirš ūnę.3. Diskretusis kuprinės užpildymo uždavinys. Turime n daiktų,kurių t ūriai yra v 1 , v 2 , . . . , v n , o kaina p 1 , p 2 , . . . , p n . Reikiarasti tokį daiktų rinkinį, kuris tilptų į V t ūrio kuprinę ir kroviniovertė b ūtų didžiausia.4. Dėžiu˛užpildymo uždavinys. Turime keleta˛vienetinio t ūriodėžių ir n daiktų, kurių dydžiai v 1 , v 2 , . . ., v n , čia 0 < v j


EuristikosKeliaujančio pirklio uždavinys.Maršruto paieška˛pradedame grafo virš ūnėje v 0 . Iš kiekvienosvirš ūnės einame į artimiausia˛dar neaplankyta˛grafo virš ūnę. Paskutiniužingsniu vėl grįžtame į pradinę maršruto virš ūnę v 0(godžioji strategija GS).Teorema. Tegul C yra n × n dydžio matrica, apibrėžianti atstumustarp miestų. Tarsime, kad matrica yra simetrinė, t. y.c ij = c ji ir atstumai tenkina trikampio nelygybęc ij ≤ c ik + c kj , 1 ≤ i, j, k ≤ n.Tada teisingas toks maršruto, apskaičiuoto GS algoritmu, ilgioįvertis:L n (GS) ≤ 1 2(⌈log n⌉ + 1)Ln .23


Diskretusis kuprinės užpildymo uždavinys.Pirmiausia apibrėžiame santykinę kiekvieno daikto vertę. Visusdaiktus r ūšiuojame šios verṫes mažėjimo tvarka. Kuprinę stengiamėsužpildyti didžiausios santykinės vertės daiktais. Juosįmame viena˛po kito ir tikriname, ar daiktas dar telpa į kuprinę,jei ne – įmame kita˛daikta.˛Turime aštuonis daiktus, kuriuos žymėsime (v j , p j ):(25, 50), (20, 80), (20, 50), (15, 45),(30, 105), (35, 35), (20, 10), (10, 45).Sur ūšiuojame daiktus veřcių didėjimo tvarka(10, 45), (20, 80), (30, 105), (15, 45),(20, 50), (25, 50), (35, 35), (20, 10).Imkime kuprinę, kurios t ūris V = 80. Naudodami godųjį algoritma˛į ja˛įdedame pirmuosius keturis daiktus, jų bendras t ūris –75, o vertė – 275 litai.Imdami pirmuosius tris ir penktajį ˛ daiktus, užpildome visa˛kuprinę,o tokio krovinio vertė – 280 litų.24


OPTCABLE projektasD = {d k ,k = 1, . . . , K} yra laidų leistinų dydžių aibė.S j = {(d km , I m j ), 1 ≤ k m ≤ K, m = 1, . . . , M}, j = 1, . . . , Jyra laidų apkrovimo kritiniai režimai. Tikslo funkcija W yra visųpluošto laidų plotų suma (svoris, metalo kiekis)W (d k1 , . . . , d kM ) = π 4M∑m=1d 2 k m.Sprendžiame diskrečiojo minimizavimo uždavinįmin W (d k1 , . . . , d kM ) = W (d 0 kd km ∈D, s.t. T ≤T1, . . . , d 0 k M). (1)MaxT Max yra duota kritinė temperat ūra, T apskaǐciuota maksimalilaidų temperat ūra (atsižvelgiant į visus darbo režimus)[T = max max max U m(S j ) ] , (2)p(d)∈P 1≤j≤J 1≤m≤MU m (S j ) yra apskaičiuota m-jo laido temperat ūra, p(d) apibṙežialaidų išdėstyma˛pluošte.Du diskrečiojo optimizavimo (min-max) uždaviniai.25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!