120 likes | 374 Views
Ievads algoritmu teorijā. Datorzinātnes pamati. …. …. Tjūringa mašīnas.
E N D
Ievads algoritmu teorijā Datorzinātnes pamati
… … Tjūringa mašīnas Tjūringa mašīna - abstrakta mašīna, paplašināts automāts: - vadības bloks – galīgs automāts,- datu bloks – bezgalīga lenta, sadalīta šūnās, katrā šūnā iespējams ierakstīt vienu simbolu no fiksēta galīga alfabēta, katrā brīdī automāta “galviņa” aplūko vienu no šūnām- operācija: atkarīga no automāta stāvokļa un no simbola, kas uz lentas pretī galviņai; pēc izpildes – jauns stāvoklis, jauns simbols uz lentas un pārvietota galviņa. M = Q, L, P, S, F Q – galīga automāta stāvokļu kopa, L = {0,1, , …} – galīgs lentas simbolu alfabēts P – mašīnas komandu kopa (programma), katra komanda ir formā qiakqjare, kur qi, qj Q, qi – komandas sākuma stāvoklis, qj – komandas beigu stāvoklis ak, ar L, ak – no lentas nolasītais simbols, ar – uz lentas uzrakstītais simbols e {L,R,E} – galviņas nobīde: L – pa kreisi, R – pa labi, E – paliek uz vietas Tjūringa mašīnas izpilde: Ja automāts stāvoklī qi redz simbolu ak, tas uzraksta uz lentas simbolu ar, pāriet uz stāvokli qj un pabīda galviņu uz lentas par e. S Q – sākuma stāvokļu kopa, F Q – beigu stāvokļu kopa.
Tjūringa mašīnas (2) Tjūringa mašīna sāk darbu no kāda stāvokļa q S, beidz darbu, ja sasniegusi kādu q F. Pieņemsim, ka T.M. programmā nav komandu qa q’a’e, kur q F (no beigu stāvokļiem tālākas pārejas nav iespējamas). Definīcija. Tjūringa mašīna M = Q, L, P, S, F ir determinēta, ja 1) |S| = 1 (t.i. eksistē tieši viens sākuma stāvoklis)2) q Q, a L eksistē ne vairāk kā viena komanda ar veidu (qa q’a’e), t.i. komanda, kurai qa ir kreisajā pusē. Nedeterminētai T.M. – izpilde vienu ieejas datu gadījumā var notikt dažādos virzienos. T.M. ieejas dati – lentas sākuma stāvoklis. T.M. izejas dati – lentas beigu stāvoklis (kad T.M. sasniegusi kādu beigu stāvokli). T.M. – specifisks abstrakto mašīnu veids. Datu struktūra – samērā vienkārša, iespējamās operācijas – visai ierobežotas. Skatīsimies, kā T.M. izmantot dažādu algoritmu realizācijai.
… … … … 1 1 0 1 1 0 1 1 0 1 0 1 Naturālo skaitļu kodējums Definīcija. T.M. lenta satur skaitļa n kodējumu, ja uz lentas sākot no kādas vietas ir n binārais pieraksts (bez priekšā esošiem 0 simboliem), un no šī pieraksta pa labi un pa kreisi visās šūnās ir ierakstīts simbols . Tiek prasīts, lai mašīnas galviņa aplūkotu n pieraksta fragmenta pirmo simbolu. Piemērs: skaitļa 53 kodējums uz T.M. lentas: Definīcija. T.M. lenta satur skaitļu kortežan1,n2,…,nkkodējumu, ja uz lentas sākot no kādas vietas ir pēc kārtas n1, n2, …, nk binārie pieraksti, atdalīti ar vienu simbolu , pa kreisi un pa labi visās pārējās šūnās ir , mašīnas galviņa aplūko n1 binārā pieraksta kreiso simbolu. Piemērs: korteža 3,0,6 kodējums uz T.M. lentas: Definīcija. Tjūringa mašīna M rēķina (daļēji definētu) funkciju f : N N, ja M, sākot darbu ar lentu, uz kuras uzrakstīts n N:- ja f(n) ir definēts, pabeigs darbu ar lentu, uz kuras uzrakstītsf(n);- ja f(n) nav definēts, tad neapstāsies, vai arī pabeigs darbu ar lentu, kuras saturs neatbilst naturāla skaitļa kodam. Analoģiski definē, kā T.M. rēķina k-argumentu funkciju f : Nk N.
1/0L 0/0R / L 1/1R 0/1L /1 E 0/0L / R 1/1L Kā T.M. rēķina vienkāršu funkciju? Tjūringa mašīna, kas, saņemot uz lentas x, uz tās uzrakstīs x + 1.
1/1L 0/0R / L 0/ R / R /L 1/ R 1/1R / L 0/0L 0/0R /0 L /1 L + 0/0R1/1R/R 0/0R1/1R/R / R / L / L / L 1/1R 0/0L - /1R 1/1L 0/ L1/ L/ L 0/0L 1/1L / L / R / R 1/ L 0/ L /1 E /L 0/ L1/ L/ L /0 R 1/1L /L /0E 0/0L + - Mazliet sarežģītāks piemērs Tjūringa mašīna, kas, noskaidro, vai ieejā saņemtais naturālā skaitļa pieraksts ir simetrisks (ja ir, tad izejā izdod 1, ja nav, tad izejā izdod 0).
Piemērs: komentāri Tjūringa mašīna, kas, noskaidro, vai ieejā saņemtais naturālā skaitļa pieraksts ir simetrisks (ja ir, tad izejā izdod 1, ja nav, tad izejā izdod 0). Piemērs izvēlēts tādējādi, lai redzētu, ka ar T.M. var kaut ko, ko nevar ar galīgiem automātiem. Ievērojam papildus simbola * izmantošanu T.M. darba gaitā (darba sākumā un darba beigās * uz lentas nav). T.M. programmēšanas princips: neturēt simbolus starp citiem simboliem, lai ieraudzīšana nozīmētu, ka tālāk visi būs (ja sākumā pa vienam bija kaut kur pa vidu, tos var “pārtulkot” par kādu citu simbolu). Ja grib “programmēt” Tjūringa mašīnu valodā, papildus simbolu izmantošana ļoti būtiska no ērtuma viedokļa (ar 0,1 un iztikt ļoti grūti). Bet – principā ir iespējams iztikt tikai ar tiem (sk. teorēmu vēlāk). Tjūringa mašīnas – teorētisks abstraktās mašīnas modelis, svarīgāk par pašu programmēšanu saprast, ka vienu vai otru lietu “var uzprogrammēt”. Var uzprogrammēt: 2 skaitļu saskaitīšanu, reizināšanu, u.c. funkcijas.
Tjūringa mašīnas – ar ko ievērojamas? Čerča tēze (1936). Katra funkcijai f: NN, kas ir algoritmiski izrēķināma (ja eksistē algoritms intuitīvā nozīmē, kas rēķina šo funkciju), ir izrēķināma arī ar kādu Tjūringa mašīnu. Citiem vārdiem: ar Tjūringa mašīnām iespējams izpildīt VISUS algoritmus. Kā pierādīt šo tēzi? Nevar pierādīt, jo “algoritms intuitīvā nozīmē” nav matemātiski precīzs termins. Kāpēc domājam, ka šī tēze patiesa? Nav atrasti tādi algoritmi, kas nebūtu izpildāmi ar Tjūringa mašīnām. Gadu desmitu intensīvas pētniecības gaitā piedāvātas dažādas savstarpēji nesaistītas pieejas algoritma jēdziena formalizācijai. Visas tās izrādījušās ekvivalentas. Katru programmu augsta līmeņa programmēšanas valodā iespējams principā noprogrammēt arī ar Tjūringa mašīnām. Tjūringa mašīnas – vēsturiski pirmā algoritma jēdziena formalizācija, izmantojot abstraktas mašīnas. Ja ticam Čerča tēzei, tad varam runāt ne tikai par algoritma eksistenci, bet arī par to, ka kāds algoritms neeksistē (neeksistē T.M., kas risina doto problēmu).
Universālā Tjūringa mašīna Čerča tēze: Katra funkcijai f: NN, kas ir algoritmiski izrēķināma, ir izrēķināma arī ar kādu Tjūringa mašīnu. Katrai intuitīvi izrēķināmai funkcijai f eksistē sava Tjūringa mašīna M(f), kas šo funkciju rēķina. Tjūringa ideja vēl tālāk: Eksistē tāda viena T.M. (Universālā Tjūringa mašīna), kas var rēķināt visas intuitīvi izrēķināmās funkcijas (izpildīt visus algoritmus). Matemātiski precīzāk: • Sanumurējam visas Tjūringa mašīnas (faktiski pietiek sanumurēt tikt daudz T.M. ar kurām var izrēķināt visas funkcijas), mašīnas M numuru apzīmējam ar #(M); • Eksistē Universālā Tjūringa mašīna, kas katrai T.M. M un katram naturālam skaitlim x, sākot darbu uz korteža #(M),x koda, izdos tādu pašu rezultātu, kā M, darbojoties uz x. #(M) – mašīnas M simboliski (skaitliski) nokodēta programma. Universālā Tjūringa mašīna – Tjūringa mašīnu interpretators. Tjūringa ideja par instrukciju kodēšanas iespējamību un universālu izpildes mehānismu – moderno datoru teorētiskais pamats. Universālā T.M. – teorētisks kodētu instrukciju izpildes mehānisms. Modernais dators – ideja realizēta praktiski.
Teorēma par TM klases sašaurināšanu Čerča tēze: Katra funkcijai f: NN, kas ir algoritmiski izrēķināma, ir izrēķināma arī ar kādu Tjūringa mašīnu. Teorēma. Ja funkcija f: NN ir izrēķināma ar kādu Tjūringa mašīnu M, tad f ir izrēķināma arī ar tādu Tjūringa mašīnu M’, kurai spēkā: • Ja f(x) nav definēts, tad M’ uz x neapstājas (M’ uz x nevar apstāties ar lentas saturu, kas nav naturāla skaitļa kods); • Visiem x M’ darba laikā mašīnas galviņa neaizvirzās pa kreisi no x pirmā simbola vietas (pietiek ar bezgalīgās lentas vienpusēju izmantošanu, “kreisā puse” var tikt rezervēta citai informācijai) • M’ alfabēts ir {0,1, }(programmas, kas darbojas plašākā alfabētā, var tikt kodētas šajā minimālajā alfabētā). Pierādījuma ideja.No M būvē M1, kas apmierina (1), tad no M1 būvē M2, kas apmierina (1) un (2), tad no M2 būvē M3 = M’, kas apmierina (1), (2) un (3). (1): izmanto principu par neievietošanu starp simboliem, tad ja M uz x apstājas, var pārbaudīt, vai rezultāts ir naturāla skaitļa kods, ja nav – tad ieciklot mašīnu. (2): ielikt sākumā * kā marķieri kreisajam galam, pabīdīt visu info (līdz ) vienu šūnu pa labi. Veikt pabīdīšanu arī katru reizi, kad galviņa nonāk uz *. (3): simbolus no lielāka alfabēta kodēt ar {0,1} – virknēm. Vajadzīgi arī kodēšanas darbi sākumā un atkodēšanas darbi beigās.
Tjūringa mašīnu kodēšana Visas izrēķināmās funkcijas var izrēķināt ar T.M., kas apmierina teorēmas nosacījumus (1), (2) un (3). Turpmāk aplūkojam tikai šādas T.M. Definējam Tjūringa mašīnas kodu. Tjūringa mašīnas programma: komandas qiakqjare. Kodējam katru komandas elementu, tad komandu, tad visu programmu. k(0) = 01, k(1) = 10, k() = 11 k(n) = k(n0) k(n1) … k(nx), kur n0n1…nx- skaitļa n binārā forma. Piemēram: k(5) = k(1012) = 100110 k(qi) = k(i), k(L) = 10, k(R) = 01, k(E) = 11 k(qiakqjare) = k(qi ) 00 k(ak )00 k(qj)00 k(ar )00 k(e). Piemēram: k(q20q51E) = 1001 00 01 00 100110 00 10 00 11 Programmas kods: sakārtojam komandas noteiktā secībā: vispirms visas, kam sākuma stāvoklis q1, tad – kam q2, utt. Katram stāvoklim vispirms komanda ar 0, tad ar 1, tad ar .Programmas kodu iegūstam, starp katriem 2 komandu kodiem ievietojot 0000. Novērojums: katrai T.M. ir unikāls kods. Novērojums: katras T.M. kods ir skaitlis binārā sistēmā. Mašīnas M koda skaitli apzīmējam ar #(M).
Daži secinājumi Universālā Tjūringa mašīna:- interpretēs mašīnas, kas atbilst teorēmas prasībām (1) (2) un (3);- interpretējamās mašīnas kodu #(M) rakstīs pa kreisi no datiem x- simulējot M darbību uz x “sekos līdzi” vienlaicīgi transformācijām, kas tiek veiktas ar x un pārejām mašīnas koda daļā (labi sākumā iedomāties, ka Universālā mašīna izmanto plašāku alfabētu, tad var pielikt “atzīmi” tam stāvoklim, uz kuru M attiecīgajā brīdī nonākusi). Cik daudz ir Tjūringa mašīnu? (ne vairāk kā tik, cik naturālu skaitļu) Cik daudz ir funkciju f: N N? (vairāk, nekā naturālie skaitļi). Tātad, eksistē tādas funkcijas, kuru rēķināšanai neeksistē algoritms (tādu funkciju ir ļoti daudz). Vēlāk kursā: arī konkrētas problēmas, kuru risināšanai neeksistē algoritmi.