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
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