Despre baie - Tavan. Băi. Ţiglă. Echipamente. Reparație. Instalatii sanitare

Turing edu index php t. Testul Turing. Piața globală AI

O vedem tot timpul. „RESTful” asta, „REST” protocol care etc. Cu toate acestea, mulți dintre noi nu înțelegem exact ce înseamnă. Vom remedia exact acest decalaj în acest articol!

Stat

În informatică (și în matematică, într-o oarecare măsură), există un concept de stat. Un anumit sistem poate fi în stare A sau poate fi în stare B sau poate fi o grămadă de alte stări (de obicei, o listă finită de stări).

De exemplu, să presupunem că scrieți un program care face ecranul roșu dacă temperatura este mai mare de 80 de grade Farenheit sau îl devine albastru dacă temperatura este mai mică de 80 de grade Farenheit.

Putem numi prima stare (temp > 80 de grade) stare „A” și a doua stare (temp< 80 degrees) state “B”. We’ll call the middling state (temp = 80 degrees) state “C”. As we can see, we have defined behaviours of the programs at state A and state B, but not at state C.

Aceasta este ideea generală de stat. Iată definiția dată de atotștiutoarea Wikipedia:

„În informatica și teoria automatelor, starea unui circuit logic digital sau a unui program de calculator este un termen tehnic pentru toate informațiile stocate, la un moment dat în timp, care este folosit de circuit sau program.”

Pe scurt, este un fel de „combinație” a tuturor informațiilor pe care programul le ia în considerare.

Acum, vom face un salt în ceva care este considerat în mare parte teoretic și inutil și apoi ne vom conecta cumva la lumea foarte practică a REST.

Mașini Turing

Era un bărbat pe nume Alan Turing și era un matematician destul de inteligent, interesat de funcționarea computerelor. El a conceput un computer imaginar (care, după cum vom vedea, este de fapt imposibil de construit) pe care obișnuia să raționeze despre lucrurile care se întâmplă în computerele reale.

Calculatorul este format dintr-o bandă de lungime infinită, cu un cap prin care trece banda. Banda are „celule”, în care se pot scrie informații (numere, culori, etc.) Banda se deplasează prin această mașină, la stânga sau la dreapta, câte o celulă. Aparatul scanează în orice se află deja pe bandă și, în funcție de starea în care se află, scrie ceva înapoi pe bandă apoi, ulterior, își schimbă starea.

Poate doriți să citiți acea definiție din nou pentru a se integra complet. Esența ideii este că efectuează operații asupra memoriei pe baza stării și stabilește modificări în funcție de operațiile asupra memoriei.

Aceasta pare o fantezie teoretică destul de inutilă (deși, nu este absolut nimic în neregulă cu asta, citiți Scuza unui matematician dacă vă întrebați de ce oamenilor le pasă să se intereseze de lucrurile teoretice). Cu toate acestea, este foarte probabil cel mai fundamental concept al informaticii.

Folosind Mașina Turing, oamenii de știință informatic sunt capabili să raționeze despre orice algoritm care poate fi rulat pe un computer. De fapt, mașina Turing a dus la multe progrese în informatică.

Așadar, Mașina Turing ne arată că astăzi (notă: nu mă gândesc la procesoare de reducere a graficelor), literalmente totul în informatică se bazează pe ideea de stat.

Rețeaua

Apoi a apărut conceptul de internet. Acesta este un loc în care pachetele se pot încurca și sunt resimțite până când ajung la destinație. În general, nu există niciodată o transmitere completă a datelor complete.

Clienții vin repede și pleacă de două ori mai repede. Ca atare, păstrarea stării clientului nu are prea mult sens atunci când lucrați pe un sistem de rețea.

De asemenea, în general, menținerea unei stări prea mari într-un sistem a fost o cauză a durerii majore (ceea ce duce și la limbaje de programare funcționale, care nu permit menținerea stării într-o mare parte a codului tău).

Acum, oamenii aveau nevoie de un protocol de rețea pentru internet care să fie simplu, rapid și să gestioneze bine starea într-un mediu extrem de dinamic.

Protocolul respectiv a fost HTTP, iar teoria care a rezultat din munca pe HTTP a fost etichetată REST.

ODIHNĂ

REST înseamnă: REpresentational State Transfer. Este un sistem construit în jurul conceptului „client-server” pe care sunt construite rețelele (ei bine, există și rețele de tip peer-to-peer, dar, client-server este, fără îndoială, cea mai simplă și mai testată arhitectură). Numele în sine este ușor înșelător, deoarece serverul este complet fără stare!

Există câteva constrângeri pe care trebuie să le respecte toate sistemele care pretind a fi „RESTful”.

În primul rând, ea trebuie sa fi un sistem client-server. Această constrângere a fost modificată în trecut, dar în definiția formală (și, pentru ca teoria REST să funcționeze corect), avem servere la care clienții se pot conecta.

Serverul este complet apatrid. Aceasta înseamnă că pentru fiecare cerere de client către server, nu este rezervată nicio stare pe server. De exemplu, dacă un client (folosind HTTP), solicită pagina de index și ulterior solicită pagina /user/home, cele două solicitări sunt complet independente una de cealaltă. Clientul tine toate a stării sistemului (deci avem butonul înapoi).

Răspunsurile de la server trebuie să poată fi stocate în cache, ceea ce înseamnă că trebuie să existe un sistem pe server care să identifice răspunsurile ca cacheabile sau nu, astfel încât clienții (de exemplu, browserele web) să poată profita de cache.

În cele din urmă, trebuie să avem o interfață simplă, curată și uniformă. Dacă ați avut ceva experiență cu modul în care funcționează HTTP, formularele de solicitare sunt foarte simple. Sunt în mare parte verbe și substantive cu un format foarte ușor de analizat și care poate fi citit de om. SOAP este o altă formă de protocol de rețea care elimină absolut această cerință și, prin urmare, este adesea foarte dificil de lucrat.

Acum, ce implică toate aceste proprietăți, atunci când sunt luate împreună?

Implicațiile REST

Ne-au permis să construim sisteme care sunt separate curat, scalabile și depanate cu ușurință.

Să luăm în considerare mai întâi restricția apatridiei pe server, poate fi cel mai important (și, de asemenea, cel mai des încălcat de așa-numitele arhitecturi RESTful).

După cum sa menționat anterior, într-o arhitectură client-server clienții sunt foarte agile; ei lansează cereri și opresc brusc orice comunicare. În acest tip de situație, este mult mai curat să nu salvezi starea despre client pe server. Acest lucru ne permite să raționăm foarte ușor despre serverele HTTP; fiecare solicitare a clientului poate fi tratată ca și cum ar fi un client complet nou și nu ar face nicio diferență.

În al doilea rând, răspunsurile care pot fi stocate în cache înseamnă că clienții pot obține date mult mai rapid, deoarece de multe ori, datele pot fi preluate din memoria clientului. Acest lucru crește imediat performanța clientului și, în unele sisteme, scalabilitatea serverului.

Interfața uniformă poate fi cea mai importantă. După ce am lucrat cu SOAP, vă pot spune că formatul simplu HTTP este o binecuvântare atunci când încercați să depanați codul serverului și același lucru se aplică și altor sisteme RESTful.

Proiectarea unui sistem RESTful

Să presupunem că trebuie să scriem un server care returnează cotații bursiere, precum și să păstrăm o listă de cotații bursiere de monitorizat (și, utilizatorul poate fie să adauge la listă, fie să ștergă).

Acesta este un caz excelent pentru un sistem RESTful, deoarece este în mod inerent independent de identitatea clientului. Prin urmare, serverul nu trebuie să dețină nicio stare despre client.

Începem mai întâi prin a defini cum va funcționa limbajul protocolului (un pic ca verbele GET și POST ale HTTP):

OBȚINEȚI CITAT ticker- oferă prețul pentru un anumit stoc
ADDTICKER ticker- adaugă stocul dat la listă
GETLIST - primește o listă de acțiuni separate prin virgulă din listă

Acesta este un protocol destul de simplu și nu deține nicio stare pe server. Acum, în ceea ce privește stocarea în cache, putem spune că actualizăm prețurile la fiecare oră, astfel încât cache-urile mai vechi de o oră pot fi aruncate.

Și, asta este tot ce este! Desigur, mai trebuie să implementăm acest lucru, dar ideea generală a sistemului este destul de simplă și curată!

Concluzie

Sperăm că acest articol v-a oferit o înțelegere solidă a REST.

De asemenea, sper că acum veți putea chema oamenii care aruncă prea mult termenul „odihna” - vă pot spune că sunt mulți!

Testul Turing, propus de Alan Turing, a fost dezvoltat ca o definiție funcțională satisfăcătoare a inteligenței. Turing a decis că nu are rost să elaboreze o listă extinsă de cerințe pentru crearea inteligenței artificiale, care ar putea fi, de asemenea, contradictorie, și a propus un test bazat pe faptul că comportamentul unui obiect cu inteligență artificială va fi în cele din urmă imposibil de distins de cel al inteligenței artificiale. comportamentul unor astfel de entități incontestabil inteligente precum ființele umane. Un computer va trece acest test dacă un experimentator uman care îi pune întrebări scrise nu poate determina dacă răspunsurile scrise provin de la o altă persoană sau de la un dispozitiv.

Rezolvarea problemei scrierii unui program pentru ca un computer să treacă acest test necesită multă muncă. Un computer programat în acest fel trebuie să aibă următoarele capacități:

  • Facilităţi procesarea textului în limbaj natural(Natural Language Processing - NLP), permițându-vă să comunicați cu succes cu un computer, să spunem în engleză.
  • Facilităţi reprezentarea cunoștințelor, cu ajutorul căruia computerul poate scrie în memorie ceea ce învață sau citește.
  • Facilităţi generarea automată a concluziilor logice, oferind posibilitatea de a utiliza informațiile stocate pentru a găsi răspunsuri la întrebări și a trage noi concluzii.
  • Facilităţi învățare automată, care vă permit să vă adaptați la noile circumstanțe, precum și să detectați și să extrapolați semne ale situațiilor standard.

În testul Turing, interacțiunea fizică directă dintre experimentator și computer este exclusă în mod deliberat, deoarece crearea inteligenței artificiale nu necesită imitarea fizică a unei persoane. Dar în așa-zisa complet testul Turing utilizarea unui semnal video este prevăzută astfel încât experimentatorul să poată testa abilitățile perceptuale ale obiectului testat și, de asemenea, să aibă posibilitatea de a prezenta obiecte fizice „într-o formă incompletă” (le trece „prin umbrire”). Pentru a trece testul Turing complet, un computer trebuie să aibă următoarele abilități:

  • Viziunea artificială pentru perceperea obiectelor.
  • Facilităţi robotică pentru manipularea obiectelor și deplasarea în spațiu.

Cele șase domenii de cercetare enumerate în această secțiune reprezintă cea mai mare parte a inteligenței artificiale, iar Turing merită mulțumirile noastre pentru furnizarea unui test care rămâne relevant 50 de ani mai târziu. Cu toate acestea, cercetătorii în inteligența artificială practic nu abordează problema trecerii testului Turing, considerând că este mult mai important să studiem principiile fundamentale ale inteligenței decât să dublezi unul dintre purtătorii inteligenței naturale. În special, problema „zborului artificial” a fost rezolvată cu succes abia după ce frații Wright și alți cercetători au încetat să imite păsările și au început să studieze aerodinamica. În lucrările științifice și tehnice despre aeronautică, scopul acestui domeniu de cunoaștere nu este definit ca „crearea de mașini care în zborul lor seamănă atât de mult cu porumbeii încât pot chiar înșela păsările adevărate”.

Probabil că astăzi nu există o persoană care să nu fi auzit măcar o dată de un astfel de concept precum testul Alan Turing. Majoritatea oamenilor sunt probabil departe de a înțelege ce este un astfel de sistem de testare. Prin urmare, să ne oprim asupra ei mai detaliat.

Ce este testul Turing: Concept de bază

Înapoi la sfârșitul anilor 40 ai secolului trecut, multe minți științifice erau implicate în problemele primelor dezvoltări de computere. Atunci unul dintre membrii unui anumit grup neguvernamental Ratio Club, angajat în cercetări în domeniul ciberneticii, a pus o întrebare complet logică: este posibil să se creeze o mașină care să gândească ca o persoană, sau cel puțin imit comportamentul lui?

Trebuie să spun cine a inventat testul Turing? Aparent nu. Baza inițială a întregului concept, care este încă relevant astăzi, a fost următorul principiu: va putea o persoană, după un timp de comunicare cu un interlocutor invizibil pe teme arbitrare complet diferite, să poată determina cine se află în fața sa - un persoană reală sau o mașină? Cu alte cuvinte, întrebarea nu este doar dacă o mașină poate imita comportamentul unei persoane reale, ci și dacă poate gândi de la sine. această problemă rămâne încă controversată.

Istoria creației

În general, dacă considerăm testul Turing ca un fel de sistem empiric pentru determinarea capacităților „umane” ale unui computer, merită să spunem că baza indirectă pentru crearea lui au fost afirmațiile curioase ale filosofului Alfred Ayer, pe care le-a formulat. în 1936.

Ayer însuși a comparat, ca să spunem așa, experiențele de viață ale diferiților oameni și, pe baza acesteia, și-a exprimat opinia că o mașină fără suflet nu ar putea trece niciun test, deoarece nu ar putea gândi. În cel mai bun caz, aceasta va fi o imitație pură.

În principiu, așa este. Numai imitația nu este suficientă pentru a crea o mașină de gândire. Mulți oameni de știință citează exemplul fraților Wright, care au construit primul avion, renunțând la tendința de a imita păsările, care, de altfel, era caracteristică unui geniu precum Leonardo da Vinci.

Istria tace dacă el însuși (1912-1954) știa despre aceste postulate, totuși, în 1950 a alcătuit un întreg sistem de întrebări care ar putea determina gradul de „umanizare” a mașinii. Și trebuie spus că această dezvoltare este încă una dintre cele fundamentale, deși doar la testarea, de exemplu, roboții de computer etc. În realitate, principiul s-a dovedit a fi de așa natură încât doar câteva programe au reușit să treacă testul Turing . Și apoi, „trece” se spune cu mare întindere, deoarece rezultatul testului nu a avut niciodată un indicator de 100 la sută, în cel mai bun caz - puțin mai mult de 50.

La începutul cercetării sale, omul de știință și-a folosit propria invenție. A fost numită mașina de testare Turing. Deoarece toate conversațiile urmau să fie introduse exclusiv în formă tipărită, omul de știință a stabilit câteva directive de bază pentru scrierea răspunsurilor, cum ar fi mutarea benzii de imprimare la stânga sau la dreapta, tipărirea unui anumit caracter etc.

Programele ELIZA și PARRY

De-a lungul timpului, programele au devenit mai complexe, iar două dintre ele, în situațiile în care a fost aplicat testul Turing, au dat rezultate uluitoare la acea vreme. Aceștia erau ELIZA și PARRY.

În ceea ce privește „Eliza”, creată în 1960: pe baza întrebării, mașina trebuia să determine cuvântul cheie și pe baza acestuia să creeze un răspuns de răspuns. Acesta este ceea ce a făcut posibilă înșelarea oamenilor adevărați. Dacă nu exista un astfel de cuvânt, aparatul a returnat un răspuns generalizat sau a repetat unul dintre cele anterioare. Cu toate acestea, trecerea testului Eliza este încă în dubiu, întrucât oamenii adevărați care au comunicat cu programul au fost inițial pregătiți psihologic în așa fel încât au crezut dinainte că vorbesc cu o persoană și nu cu o mașinărie.

Programul PARRY este oarecum similar cu Eliza, dar a fost creat pentru a simula comunicarea unei persoane paranoice. Cel mai interesant este că pacienții adevărați din clinică au fost folosiți pentru a-l testa. După înregistrarea transcrierilor conversațiilor prin teletip, acestea au fost evaluate de psihiatri profesioniști. Doar în 48% din cazuri au fost capabili să evalueze corect unde se afla persoana și unde se afla mașina.

În plus, aproape toate programele din acea vreme funcționau ținând cont de o anumită perioadă de timp, deoarece o persoană în acele vremuri gândea mult mai repede decât o mașină. Acum e invers.

Supercalculatoarele Deep Blue și Watson

Dezvoltarea corporației IBM arăta destul de interesantă, nu numai că aveau o putere de calcul incredibilă.

Mulți oameni probabil își amintesc cum în 1997 supercomputerul Deep Blue a câștigat 6 jocuri de șah împotriva actualului campion mondial Garry Kasparov. De fapt, testul Turing este foarte condiționat aplicabil acestei mașini. Chestia este că inițial conținea multe șabloane de joc cu o cantitate incredibilă de interpretare a dezvoltării evenimentelor. Mașina ar putea evalua aproximativ 200 de milioane de poziții de piese pe tablă pe secundă!

Calculatorul Watson, format din 360 de procesoare și 90 de servere, a câștigat show-ul de jocuri de televiziune americană, depășind din toate punctele de vedere pe ceilalți doi participanți, pentru care, de fapt, a primit un bonus de un milion de dolari. Din nou, întrebarea este discutabilă, deoarece aparatul a fost încărcat cu cantități incredibile de date enciclopedice, iar aparatul a analizat pur și simplu întrebarea pentru prezența unui cuvânt cheie, sinonime sau potriviri generale și apoi a dat răspunsul corect.

Emulator Eugene Goostman

Una dintre cele mai interesante evoluții în acest domeniu a fost programul rezidentului din Odessa Evgeniy Gustman și al inginerului rus Vladimir Veselov, care locuiește acum în Statele Unite, care a imitat personalitatea unui băiat de 13 ani.

Pe 7 iunie 2014, programul Eugene și-a demonstrat toate capacitățile. Interesant este că la testare au participat 5 roboți și 30 de oameni reali. Doar în 33% din cazuri din o sută, juriul a putut determina că este vorba despre un computer. Ideea aici este că sarcina a fost complicată de faptul că un copil are o inteligență mai mică decât un adult și mai puține cunoștințe.

Întrebările testului Turing au fost cele mai generale, totuși, pentru Eugene au existat și câteva întrebări specifice despre evenimentele de la Odesa care nu puteau trece neobservate de niciun rezident. Dar răspunsurile tot m-au făcut să cred că juriul era un copil. De exemplu, programul a răspuns imediat la întrebarea despre locul de reședință. Când s-a pus întrebarea dacă interlocutorul se afla în oraș la una și alta dată, programul a precizat că nu vrea să vorbească despre asta. Când interlocutorul a încercat să insiste asupra unei conversații în concordanță cu ceea ce s-a întâmplat exact în acea zi, Eugene s-a renegat spunând, se spune, tu însuți ar trebui să știi, de ce să-l întrebi? În general, emulatorul de copii s-a dovedit a fi extrem de reușit.

Cu toate acestea, acesta este încă un emulator, nu o creatură gânditoare. Așa că revolta mașinii nu va avea loc pentru foarte mult timp.

dar pe de altă parte

În cele din urmă, rămâne de adăugat că până acum nu există condiții prealabile pentru a crea mașini de gândire în viitorul apropiat. Cu toate acestea, dacă problemele de recunoaștere anterioare se refereau în mod special la mașini, acum aproape fiecare dintre noi trebuie să demonstreze că nu sunteți o mașină. Uită-te doar la introducerea unui captcha pe Internet pentru a avea acces la anumite acțiuni. Până acum, se crede că încă nu a fost creat un singur dispozitiv electronic care să poată recunoaște text distorsionat sau un set de caractere, cu excepția unei persoane. Dar cine știe, totul este posibil...

TURING

TURING(Turing) Alan (1912-54), matematician și logician englez care a formulat teorii care au devenit ulterior baza tehnologiei computerelor. În 1937 a venit cu masina Turing - o mașină ipotetică capabilă să transforme un set de comenzi de intrare. A fost precursorul computerelor moderne. Turing a folosit și ideea unui computer pentru a oferi o dovadă alternativă și mai simplă a teoremei de incompletitudine a lui Gödel. Turing a jucat un rol major în rezolvarea Enigma, o metodă complexă de criptare folosită de Germania în timpul celui de-al Doilea Război Mondial. În 1948 a participat la crearea unuia dintre primele computere din lume. În 1950 a venit cu testul Turing - trebuia să fie un test al capacității unui computer de a „gândi”. În esență, a afirmat că o persoană nu ar fi capabilă să distingă un dialog cu o mașină de un dialog cu o altă persoană. Această lucrare a deschis calea pentru crearea INTELIGENTEI ARTIFICIALE. Turing a fost, de asemenea, implicat în biologia teoretică. În curs „Bazele chimice ale morfogenezei”(1952) el a propus un model care descrie originea diferitelor modele structurale ale organismelor în biologie. De atunci, astfel de modele au fost adesea folosite pentru a descrie și explica multe sisteme observate în natură. Turing s-a sinucis după ce a fost acuzat oficial de homosexualitate.


Dicționar enciclopedic științific și tehnic.

Vedeți ce este „TURING” în alte dicționare:

    Turing, Alan Mathison Alan Turing Monumentul Alan Mathison Turing din Sackville Park Data nașterii... Wikipedia

    - (Turing) Alan Mathieson (1912 54), matematician englez. În 1936-1937 el a introdus conceptul matematic al unui echivalent abstract al unui algoritm, sau o funcție calculabilă, care a fost numită apoi mașina Turing... Enciclopedie modernă

    - (Turing), Alan Mathieson (23 iunie 1912 - 7 iunie 1954) - engleză. logician și matematician. În 1936–37, el a propus un model de mașină idealizat de calcul. proces - o schemă de calcul apropiată de acțiunile persoanei care efectuează calculele și propusă... ... Enciclopedie filosofică

    Turing A.- Turing A. matematician englez. Subiecte securitatea informațiilor RO Turing... Ghidul tehnic al traducătorului

    Alan Turing Monumentul Alan Turing din Parcul Sackville Data nașterii: 23 iunie 1912 Locul nașterii: Londra, Anglia Data morții: 7 iunie 1954 ... Wikipedia

    Turing- Matematicianul englez Alan M. Turing, unul dintre creatorii fundamentelor logice ale tehnologiei informatice, în special, a dat una dintre definițiile formale ale algoritmului; a demonstrat că există o clasă de calculatoare care poate simula... ... Lumea lui Lem - Dicționar și ghid

    - (Turing) Alan Mathieson (23.6.1912, Londra, 7.6.1954, Wilmslow, lângă Manchester), matematician englez. Fellow of the Royal Society (1951). După ce a absolvit Universitatea Cambridge (1935), a lucrat la teza de doctorat la Princeton... ... Marea Enciclopedie Sovietică

    Turing A.M.- TURING (Turing) Alan Mathieson (191254), englez. matematician. De bază tr. în matematică logica, calculeaza. matematică. În 193637 a introdus matematica. conceptul de echivalent abstract al unui algoritm, sau o funcție calculabilă, numită apoi. masina T... Dicţionar biografic

    - (complet Alan Mathison Turing) (23 iunie 1912, Londra 7 iunie 1954, Wilmslow, Marea Britanie), matematician britanic, autor de lucrări despre logica matematică și matematică computațională. În 1936-1937 a introdus conceptul matematic... Dicţionar enciclopedic

Cărți

  • Poate o mașină să gândească? Teoria generală și logică a automatelor. Numărul 14, Turing A., Această carte, care conține lucrările lui Alan Turing și John von Neumann, care au fost la originile creării primelor calculatoare gânditoare, aparține clasicilor filosofic-cibernetici... Categorie: Baze de date Seria: Științe artificiale Editura: URSS, Producator: URSS,
  • Poate o mașină să gândească? Teoria generală și logică a automatelor. Numărul nr. 14, Turing A., Această carte, care conține lucrările lui Alan Turing și John von Neumann, care au fost la originile creării primelor „mașini de gândire” ale computerelor, aparține clasicilor filosofo-ciberneticii. direcție... Categorie:

Subiectul „Turing Machine” într-un curs școlar de informatică

ÎN. Falina,
Moscova

În multe manuale de informatică, atunci când se studiază conceptul și proprietățile unui algoritm, există fraze cu următorul conținut: „... există multe moduri diferite de a scrie același algoritm, de exemplu, scrierea sub formă de text, scrierea sub forma unei organigrame, scriere într-un limbaj algoritmic, reprezentare a unui algoritm sub forma unei mașini Turing sau a unei mașini Post...” Din păcate, aceste tipuri de fraze sunt singurele care menționează o mașină Turing. Fără îndoială, volumul de ore dedicat studiului algoritmilor nu ne permite să includem în acest subiect și studiul modalităților de a scrie un algoritm sub forma unei mașini Turing. Dar acest subiect este extrem de interesant, important și util pentru școlari, în special pentru cei interesați de informatică.

Tema „Turing Machine” poate fi studiată în clasele 8-11 ca parte a subiectului „Procese informaționale. Prelucrarea informațiilor”, la orele opționale, în sistemul de învățământ suplimentar, de exemplu, în școlile pentru tineri programatori. Studierea acestei teme poate fi însoțită de suport informatic dacă profesorul are un simulator software „Turing Machine”. La cursurile de programare avansată, studenții pot scrie independent un program Turing Machine. Ca parte a acestui articol, vă oferim un atelier de rezolvare a problemelor pe tema „Turing Machine”. Material teoretic pe această temă a fost publicat de mai multe ori pe paginile ziarului Informatică, de exemplu, în nr. 3/2004, un articol al lui I.N. Falina „Elemente ale teoriei algoritmilor”.

Material teoretic scurt

O mașină Turing este o construcție matematică strictă, un aparat matematic (similar, de exemplu, cu aparatul de ecuații diferențiale), creat pentru a rezolva anumite probleme. Acest aparat matematic a fost numit „mașină” pentru că, în ceea ce privește descrierea părților sale constitutive și a funcționării, este similar cu un computer. Diferența fundamentală dintre o mașină Turing și computere este că dispozitivul său de stocare este o bandă infinită: în computerele reale, dispozitivul de stocare poate fi atât de mare cât vrei, dar trebuie să fie finit. O mașină Turing nu poate fi realizată tocmai pentru că banda sa este infinită. În acest sens, este mai puternic decât orice mașină de calcul.

Fiecare mașină Turing are două părți:

1)nelimitat dus-întors panglică, împărțit în celule;

2) mașinărie(cap de citire/scriere controlat de software).

Fiecare mașină Turing este asociată două alfabete finale: alfabetul simbolurilor de intrare A = (a 0 , a 1 , ..., a m ) și alfabetul stărilor Q = (q 0 , q 1 , ..., q p ). (Diferitele mașini Turing pot avea asociate alfabete diferite AȘi Q.) Se numește starea q 0 pasiv. Se crede că, dacă mașina intră în această stare, atunci și-a terminat munca. Se numește starea q 1 iniţială. În această stare, mașina își începe lucrul.

Cuvântul introdus este plasat pe bandă câte o literă în celule consecutive. În stânga și în dreapta cuvântului introdus există doar celule goale (în alfabet A include întotdeauna o scrisoare goală A 0 este un semn că celula este goală).

Aparatul se poate deplasa de-a lungul benzii la stânga sau la dreapta, poate citi conținutul celulelor și poate scrie litere în celule. Mai jos este un desen schematic al unei mașini Turing, al cărei automat examinează prima celulă cu date.

Aparatul „vede” doar o celulă de fiecare dată. În funcție de ce literă ai vede și, de asemenea, în funcție de starea lui qj Mașina poate efectua următoarele acțiuni:

  • · scrie o literă nouă în celula observată;
  • · mutați banda cu o celulă la dreapta/stânga sau rămâneți nemișcați;
  • · trecerea într-un nou stat.

Adică, o mașină Turing are trei tipuri de operații. De fiecare dată pentru următorul cuplu ( q j, un i) o mașină Turing execută o comandă constând din trei operații cu anumiți parametri.

Programul mașinii Turing este un tabel cu o comandă scrisă în fiecare celulă.

Celula ( q j, un i) este determinată de doi parametri - simbolul alfabetului și starea mașinii. Comanda este o indicație: unde să mutați capul de citire/scriere, ce caracter să scrieți în celula curentă, în ce stare ar trebui să meargă mașina. Pentru a indica direcția de mișcare a mașinii, folosim una dintre cele trei litere: „L” (stânga), „P” (dreapta) sau „N” (staționar).

După ce mașina execută următoarea comandă, intră în stare q m(care poate coincide într-un caz particular cu starea anterioară q j). Următoarea comandă ar trebui să fie găsită în m al-lea rând al tabelului la intersecția cu coloana a l(scrisoare a l mașina vede după schimb).

Să fim de acord că atunci când banda conține un cuvânt de intrare, atunci mașina este situată lângă o celulă din stare q 1. În timpul funcționării, automatul va sări dintr-o celulă a programului (tabelului) în alta până ajunge la celula în care este scris că automatul trebuie să intre în stare q 0 . Aceste celule sunt numite opri celulele. Ajuns la orice astfel de celulă, mașina Turing se opreste.

În ciuda designului său simplu, o mașină Turing poate efectua toate transformările posibile ale cuvintelor, implementând astfel toți algoritmii posibili.

Exemplu. Trebuie să construiți o mașină Turing care adaugă unul la un număr de pe o bandă. Cuvântul de intrare este format din cifrele unui număr întreg zecimal scris în celule consecutive pe bandă. La momentul inițial, mașina este situată vizavi de cifra cea mai din dreapta a numărului.

Soluţie. Aparatul trebuie să adauge una la ultima cifră a numărului. Dacă ultima cifră este 9, înlocuiți-o cu 0 și adăugați una la cifra anterioară. Un program pentru o anumită mașină Turing ar putea arăta astfel:

În această mașină Turing q 1 - stare de schimbare a cifrei, q 0 - stare de oprire. Dacă puteți q l mașina vede numărul 0..8, apoi îl înlocuiește cu 1..9 în consecință și intră în stare q 0, adică mașina se oprește. Dacă vede numărul 9, atunci îl înlocuiește cu 0, se deplasează la stânga, rămânând în stare q l. Aceasta continuă până când mașina întâlnește un număr mai mic de 9. Dacă toate numerele au fost egale cu 9, atunci le va înlocui cu zerouri, va scrie 0 în locul celei mai mari cifre, va muta la stânga și va scrie 1 într-o celulă goală. Apoi va intra în stat q 0, adică se va opri.

Sarcini practice

1. Banda mașinii Turing conține o secvență de simboluri „+”. Scrieți un program pentru o mașină Turing care înlocuiește fiecare secundă simbolul „+” cu un „–”. Înlocuirea începe de la capătul din dreapta al secvenței. Mașina este capabilă q 1 se uită la unul dintre caracterele din secvența specificată. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

2. Dat un număr nîn sistemul de numere octale. Proiectați o mașină Turing care crește un anumit număr n pe 1. Aparatul este capabil q 1 se uită la o anumită cifră a cuvântului introdus. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

3. Având în vedere notația zecimală a unui număr natural n> 1. Dezvoltați o mașină Turing care ar reduce un anumit număr n pe 1. Aparatul este capabil q 1 se uită la cifra dreaptă a numărului. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

4. dat un număr natural n> 1. Dezvoltați o mașină Turing care ar reduce un anumit număr n cu 1, în timp ce cea mai semnificativă cifră din cuvântul de ieșire nu ar trebui să fie 0. De exemplu, dacă cuvântul de intrare a fost „100”, atunci cuvântul de ieșire ar trebui să fie „99”, nu „099”. Mașina este capabilă q 1 se uită la cifra dreaptă a numărului. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

5. Dată o serie de paranteze de deschidere și de închidere. Construiți o mașină Turing care ar elimina perechile de paranteze reciproce, de ex. situat pe un rând „()”.

De exemplu, dat fiind „) (() (()”, trebuie să obțineți „) . . . ((”.

Mașina este capabilă q

6. Dat un șir de litere „ A" Și " b" Dezvoltați o mașină Turing care va muta toate literele” A„în stânga și literele „ b” - în partea dreaptă a liniei. Mașina este capabilă q 1 se uită la caracterul din stânga al liniei. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

7. Pe banda mașinii Turing există un număr scris în sistemul numeric zecimal. Înmulțiți acest număr cu 2. Mașina este capabilă q 1 se uită la cifra cea mai din stânga a numărului. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

8. Date două numere naturale mȘi n, prezentate în sistemul numeric unar. Seturile de caractere potrivite sunt „|” separate printr-o celulă goală. Mașina este capabilă q 1 se uită la caracterul din dreapta al secvenței de intrare. Dezvoltați o mașină Turing care va lăsa o sumă de numere pe o bandă mȘi n. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

9. Date două numere naturale mȘi n, prezentate în sistemul numeric unar. Seturile de caractere potrivite sunt „|” separate printr-o celulă goală. Mașina este capabilă q 1 se uită la caracterul din dreapta al secvenței de intrare. Dezvoltați o mașină Turing care va lăsa o diferență între numere pe bandă. mȘi n. Se știe că m> n. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

10. Există un număr zecimal pe banda mașinii Turing. Stabiliți dacă acest număr este divizibil cu 5 fără rest. Dacă este divizibil, atunci scrieți cuvântul „da” în dreapta numărului, în caz contrar „nu”. Aparatul examinează o anumită cifră a numărului introdus. Pe lângă programul tabel în sine, descrieți în cuvinte ceea ce este realizat de mașină în fiecare stare.

Rezolvarea problemelor

Capabil q 1 mașină caută capătul drept al numărului, capabil q 2 - omite semnul „+”, când se ajunge la sfârșitul secvenței - se oprește. Capabil q 3, mașina înlocuiește semnul „+” cu semnul „–”, iar când ajunge la sfârșitul secvenței se oprește.

Soluția la această problemă este similară cu exemplul discutat mai sus.

Stat q 1 - micșorăm cifra cea mai mică (următoarea) cu 1. Dacă nu este egală cu zero, atunci ne oprim imediat după scădere dacă cifra cea mai mică este 0, atunci scriem în schimb 9, deplasăm la stânga și efectuăm din nou scăderea; . În cușcă [ A 0 , q 1 ] o mașină Turing nu va lovi niciodată, așa că poate fi lăsată neumplută.

Sarcina 4 (complicația sarcinii 3)

Stat q 1 - micșoram cifra minoră (următoarea) cu 1. Dacă este mai mare decât 1, atunci după reducere ne oprim imediat, dar dacă cifra minoră este 0, atunci scriem în schimb 9, deplasăm la stânga și efectuăm scăderea din nou. Dacă cifra care se reduce este 1, atunci scriem 0 și trecem la starea q 2 .

Stat q 2 - după ce scrie „0” în orice poziție, este necesar să se analizeze dacă acest zero este cea mai semnificativă cifră (adică dacă se află în stânga acestuia în înregistrarea cuvântului de ieșire A 0).

Stat q 3 - dacă „0” înregistrat este cea mai semnificativă cifră, atunci trebuie eliminată din înregistrarea cuvântului de ieșire.

Acele celule în care mașina Turing nu intră niciodată sunt lăsate goale.

Stat q 1: dacă se întâlnește „(”, atunci comutați la dreapta și treceți la starea q 2; dacă te-ai întâlnit” A 0”, apoi opriți.

Stat q 2: analiza simbolului „(” pentru asociere, în cazul asocierii ar trebui să vadă „)”. Dacă este o baie de aburi, atunci reveniți la stânga și mergeți la stat q 3 .

Stat q 3: mai întâi ștergeți „(”, apoi „)” și accesați q 1 .

Rezolvarea acestei probleme cauzează de obicei dificultăți pentru școlari. Când analizați soluția la această problemă, puteți merge, de exemplu, în felul următor.

Examinați următoarele opțiuni pentru cuvintele introduse împreună cu elevii dvs. și rugați-le să formuleze ce ar trebui să facă o mașină Turing, cum arată cuvântul de ieșire și cum diferă aceste opțiuni din punctul de vedere al unei mașini Turing:

aaa ->

a -> cuvântul de ieșire se potrivește cu cuvântul de intrare, ne uităm prin cuvântul de intrare până se termină.

bbb -> cuvântul de ieșire se potrivește cu cuvântul de intrare, ne uităm prin cuvântul de intrare până se termină.

b -> cuvântul de ieșire se potrivește cu cuvântul de intrare, ne uităm prin cuvântul de intrare până se termină.

ab -> cuvântul de ieșire se potrivește cu cuvântul de intrare, ne uităm prin cuvântul de intrare până se termină.

Rezultatul discutiei. O mașină Turing trebuie să „înțeleagă” ce lanț de litere urmează, adică. trebuie să aibă cel puţin două stări. Lasă statul q 1 - mișcare de-a lungul unui lanț de litere „ A", A q 2 - starea de mișcare de-a lungul unui lanț de litere „ b" Rețineți că lanțul poate consta și dintr-o literă. Dacă am ajuns la capătul liniei în stat q 1 sau q 2, adică întâlnit A 0, mașina ar trebui să se oprească, am procesat întreaga linie.

Luați în considerare următoarele opțiuni pentru cuvintele introduse:

bba -> abb

bbbaab -> aabbbb

aabbbaab -> aaaabbbb

Rezultatul discutiei. Prima versiune a cuvântului de intrare poate fi procesată secvenţial după cum urmează: bba -> bbb-> reveniți la capătul din stânga lanțului de litere „ b” -> abb(înlocuiți prima literă din acest lanț cu „ A"). Pentru a efectua aceste acțiuni, va trebui să introducem două state noi și, în plus, să clarificăm starea q 2. Astfel, pentru a rezolva această problemă trebuie să construim o mașină Turing cu următoarele stări:

q 1 - mergeți la dreapta de-a lungul lanțului de litere „ A" Dacă lanțul se termină A 0, apoi accesați q 0; dacă se termină cu litera „ b”, apoi mergem la q 2 ;

q 2 - mergeți la dreapta de-a lungul lanțului de litere „ b” dacă lanțul se termină A 0, apoi accesați q 0; daca se termina " A”, apoi înlocuiți litera „ A" pe " b”, mergi la stat q 3 (lanțul speciei a fost înlocuit cu un lanț al speciei);

q 3 - mergeți la stânga de-a lungul lanțului de litere „ b” la capătul său stâng. Dacă te-ai întâlnit A 0 sau „ A”, apoi mergem la q 4 ;

q 4 - înlocuiți „ b" pe " A” și du-te la q 1 (înlocuim lanțul formei cu un lanț al formei .

Problema 7

stat q 1 - căutați cifra dreaptă (cea mai mică) a unui număr;

stat q 2 - înmulțirea următoarei cifre a unui număr cu 2 fără a adăuga 1 purtare;

stat q 3 - înmulțirea următoarei cifre a unui număr cu 2 cu adăugarea a 1 purtare.

Mașina Turing pentru acest program pare trivial de simplă - are o singură stare. O astfel de mașină Turing efectuează următoarele acțiuni: șterge cursa cea mai din dreapta, caută un separator (celula goală) și plasează o cursă în această celulă goală, formând astfel o secvență continuă de curse de lungime n + m.

Cu toate acestea, în mod ciudat, rezolvarea acestei probleme provoacă mari dificultăți. Foarte des, elevii construiesc o mașină Turing care efectuează acțiuni ciclice: împingerea secvenţială spre dreapta n lovituri spre stânga.

În acest caz, programul lor arată astfel:

stat q 1 - căutarea separatorului;

stat q 2 - a mutat cursa;

stat q 3 - verificați sfârșitul (dacă toate cursele au fost mutate).

Exemplul acestei probleme arată clar cât de des încearcă copiii să rezolve o problemă în moduri deja familiare. Mi se pare că, oferind studenților probleme pentru a construi mașini Turing, dezvoltăm capacitatea de a găsi soluții neobișnuite și dezvoltăm capacitatea de a gândi creativ!

Această sarcină pare destul de ușoară pentru școlari, dar apar dificultăți la oprirea mașinii Turing. Mai jos este o versiune posibilă a unei mașini Turing pentru această sarcină.

Idee de soluție (condiția de oprire). Există două matrice de cursă inițială pe bandă.

Începem să ștergem liniile din capătul stâng al matricei m. Și unul câte unul ștergem contura din stânga din matrice mși cursa cea mai din dreapta din matrice n. Dar înainte de a șterge cursa dreaptă din matrice n, verificăm dacă este singurul (adică ultimul care trebuie șters) sau nu.

Să descriem mai întâi stările mașinii Turing care sunt necesare pentru a ne rezolva problema și apoi să creăm un program tabel.

Stat q 1 - căutați un separator între rețele de linii atunci când vă deplasați de la dreapta la stânga;

stat q 2 - căutați cursa stângă în matrice m;

stat q 3 - eliminarea cursei stângi din matrice m;

stat q 4 - căutați un separator când vă deplasați de la stânga la dreapta;

stat q 5 - căutați cursa corectă în matrice n;

stat q 6 - verificarea unicității acestei curse în matrice n, adică stabiliți dacă a fost ultimul;

stat q 7 - dacă a fost ultimul, atunci opriți-vă, altfel treceți la un nou ciclu de execuție a algoritmului.

Când rezolvați această problemă, ar trebui să acordați atenție scrierii corecte a alfabetului:

A = ( A 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, D, A, N, E, T).

Stat q 1 - căutați capătul din dreapta al numărului;

stat q 2 - analiza celei mai puțin semnificative cifre a unui număr; dacă este egal cu „0” sau „5”, adică numărul este divizibil cu 5, apoi trecerea la stare q 3, altfel trecerea la stat q 5 ;

stat q 3 - scrieți litera „D” în dreapta cuvântului de pe bandă;

stat q 4 - scrieți litera „A” în dreapta cuvântului și opriți mașina;

stat q 5 - scrierea literei „N” în dreapta cuvântului;

stat q 6 - scrierea literei „E” în ​​dreapta cuvântului;

stat q 7 - scrieți litera „T” în dreapta cuvântului și opriți mașina.

Proprietățile mașinii Turing ca algoritm

Folosind mașina Turing ca exemplu, proprietățile algoritmilor pot fi văzute clar. Cereți elevilor să arate că o mașină Turing are toate proprietățile unui algoritm.

Discretenie. O mașină Turing poate merge la ( k + Pasul 1) numai după finalizare La- pasul, pentru că exact La- pasul determină ce va fi ( k + 1) pasul.

Claritate. La fiecare pas, în celulă este scris un simbol din alfabet, automatul face o mișcare (L, P, N), iar mașina Turing intră într-una dintre stările descrise.

Determinism. Fiecare celulă din tabelul mașinii Turing conține o singură opțiune pentru o acțiune. La fiecare pas, rezultatul este definit în mod unic, prin urmare, succesiunea de pași pentru rezolvarea problemei este definită în mod unic, adică. Dacă unei mașini Turing i se dă același cuvânt de intrare, atunci cuvântul de ieșire va fi același de fiecare dată.

Productivitate. În ceea ce privește conținutul, rezultatele fiecărui pas și întreaga secvență de pași sunt definite în mod unic, prin urmare, o mașină Turing scrisă corect va intra în stare într-un număr finit de pași q 0, adică într-un număr finit de pași se va obține răspunsul la întrebarea problemă.

Caracter de masă. Fiecare mașină Turing este definită peste toate cuvintele admisibile din alfabet, aceasta este proprietatea caracterului de masă. Fiecare mașină Turing este proiectată pentru a rezolva o clasă de probleme, de exemplu. Pentru fiecare problemă, este scrisă propria (nouă) mașină Turing.

DE LA EDITOR

Toate problemele prezentate în articol pot fi rezolvate simplu într-un caiet prin desenarea unei benzi informative și a unui program de masă. Dar puteți face acest proces mai distractiv și mai vizual: utilizați o implementare a mașinii - interpretul mașinii Post și mașina Turing „Algo2000”, creată de Radik Zartdinov. Programul are o interfață intuitivă, iar cerințele sale sunt cele mai moderate: un computer IBM PC AT 486 sau superior, sistemul de operare Windows 95/98/NT.

Să ne uităm în termeni generali la modul în care funcționează „Algo2000”.

În meniul programului, selectați elementul Interpretși indicați cu ce mașină vrem să lucrăm (în cazul nostru, este o „mașină Turing”).

Un câmp de mașină Turing va apărea în fața noastră.

Acum trebuie să setați alfabetul extern, adică. în linie Alfabetul extern indicați ce caractere sunt incluse în el (dacă șirul Alfabetul extern nu este vizibil, trebuie să selectați un element de meniu Vizualizați | Alfabetul extern). Fiecare caracter poate fi specificat o singură dată. După terminarea introducerii alfabetului extern, se formează prima coloană a tabelului: se umple cu caractere din alfabetul extern în aceeași ordine. La editarea alfabetului extern, tabelul este schimbat automat: rândurile sunt inserate, șterse sau schimbate.

Să nu uităm că trebuie să aranjați cumva simbolurile alfabetului extern în secțiuni ale benzii (puteți lăsa toate secțiunile goale) și să plasați căruciorul vizavi de una dintre secțiuni, de exemplu. trebuie să setați programul și o anumită stare a mașinii.

Acum puteți trece direct la scrierea algoritmului pentru rezolvarea problemei. Este specificat sub forma unui tabel: caracterele alfabetului intern sunt introduse în fiecare coloană a liniei de sus, iar caracterele alfabetului extern sunt introduse în fiecare rând a primei coloane. Comenzile sunt plasate în celulele de la intersecția altor coloane și rânduri. Dacă la intersecția oricărui rând și a oricărei coloane obținem o celulă goală, aceasta înseamnă că în această stare internă acest simbol nu poate fi găsit.

De exemplu, creăm un algoritm pentru găsirea diferenței dintre două numere întregi pozitive (în sistemul numeric zecimal), dacă se știe că primul număr este mai mare decât al doilea și există un semn minus între ele.

Câmpul programului va arăta astfel:

Formatul comenzii din fiecare celulă este aKq. Aici:
a este noul conținut al celulei curente (un nou simbol al alfabetului extern care este introdus în celula curentă), K este comanda mecanismului de bandă al mașinii Turing (stânga, dreapta, oprire), q este noua stare internă a mașinii Turing.

Butonul va lansa programul. Dacă execuția nu a fost suspendată, începe întotdeauna de la starea internă zero Q0.

Programul poate fi finalizat pas cu pas. Pentru a face acest lucru, faceți clic pe butonul din bara de instrumente (dacă butoanele nu sunt vizibile, trebuie să selectați elementul de meniu Vizualizați | Bara de instrumente ) sau selectați din meniul principal Start | Pas cu pas . Dacă trebuie să întrerupeți complet execuția programului, acest lucru se poate face folosind butonul de pe bara de instrumente sau folosind meniul principal ( Start | Avorta ). Articol din meniu Viteză

vă permite să reglați viteza de execuție a programului.

Programul va continua să se execute până când se întâlnește comanda „Stop” sau apare o eroare. Dacă aveți întrebări în timp ce lucrați cu programul de interpret, vă rugăm să consultați fișierul de ajutor Algo2000.hlp . Acesta, precum și programul „Algo2000” în sine, pot fi găsite pe site-ul ziarului „Informatică” http://inf.1september.ru



în secțiunea „Descărcare”. Ți-a plăcut articolul?
imprimare
A fost de ajutor articolul?
da
Nu
Vă mulțumim pentru feedback-ul dumneavoastră!
Ceva a mers prost și votul tău nu a fost numărat.
Mulțumesc. Mesajul tau a fost trimis
Ați găsit o eroare în text? Selectați-l, faceți clic Ctrl + Enter