Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 26. 10. 2011 21:38

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Turingův stroj

dobrý den,
mám za úkol vytvořit TS, který příjmá slova x, xxx, xxxxxxxxx, ..... tedy x na 1,3,9,27,81....
jenže neumím přijít na princip, jak by ten TS měl fungovat, jestli na druhou pásku po každé přečtené trojici x zapsat nějaký pomocný znak a na třetí pásku zapsat znak, vždy, když na druhé pásce budou tři znaky?

nebo na to jdu úplně špatně?

na první pohled jsem si myslel, že to zvládnu, ale žádné návrhy přechodových funkcí mi nevyšly, tak kdyby mě někdo uměl poposunout trošku dál, díky

Offline

  • (téma jako vyřešené označil(a) meron)

#2 27. 10. 2011 16:11

kompik
Místo: Bratislava
Příspěvky: 355
Škola: FMFI UK
Pozice: ucitel
Reputace:   54 
 

Re: Turingův stroj

Je to dosť dávno, odkedy som naposledy robil niečo s TS, takže možno prehliadnem nejaký problém, ale možno by to šlo takto:

Zakaždým zmazať jedno x z prvej pásky a na druhú pásku si zapisovať počet x-ov, ktoré som zmazal v trojkovej sústave, t.j. 0,1,2,10,11,12,20,...

Keď prečítam celý vstup, tak sa pozriem, či mám na druhej páske číslo, ktoré má na najvyššom mieste jednotku a potom samé nuly.

(Používam dvojpáskový TS, ale aj ty si písal o druhej páske.)

Offline

 

#3 28. 10. 2011 03:03 — Editoval meron (28. 10. 2011 03:07)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Turingův stroj

můžu použít max. 3 pásky

takže... znamená to, že načtu x, smažu ho, posunu se o políčko doprava na první pásce a na druhou pásku zapíšu 1 a posunu se doprava
           
            poté opět načtu x, smažu jej, posunu se doprava na první pásce a na druhou zapíšu 2 a posunu se doprava...... ?

jen mi teda není jasné, jakým způsobem zapisovat ty čísla trojkové soustavy pomocí přechodových stavů(neboli na druhou pásku)  :(

Offline

 

#4 28. 10. 2011 10:02

kompik
Místo: Bratislava
Příspěvky: 355
Škola: FMFI UK
Pozice: ucitel
Reputace:   54 
 

Re: Turingův stroj

meron napsal(a):

jen mi teda není jasné, jakým způsobem zapisovat ty čísla trojkové soustavy pomocí přechodových stavů(neboli na druhou pásku)  :(

Ja som si to predstavoval tak, že to budem mať na druhej páske. Implementovať je to najjednoduchšie asi tak, že najnižšia cifra bude vľavo, t.j. druhá páska s číslom 10, t.j. v trojkovej 201 vyzerá nejako takto: L102R. (Asi je dobre mať tam aj nejakú ľavú a pravú zarážku?)

* T.j. po zmazaní x si nastavíme nejaký stav s1, ktorý mi hovorí, že treba inkrementovať. A budem mať aj nejaký stav, nazvime ho s0, ktorý znamená, že som úspešne zinkrementoval a znovu mám mazať x.

* V tom stave s1 posúvam hlavu na druhej páske ceľkom po ľavú zarážku a keď na ňu narazím tak zmením stav na s2. Stav s2 znamená, že som v procese inkrementácie a všetky cifry naľavo od miesta kde práve ukazuje druhá hľava sú dvojky.

* Keď som v stave s2, tak si prečítam políčok a potom:
a) Ak je to 0 zmením na 1, môžem zmeniť stav na s0. (Inkrementácia je hotová,)
b) Ak je to 1 zmením na 2, stav na s0.
c) Ak je to 2, tak sa musím posunúť o jedno doprava, stav nemením.
d) Ak je to pravá zarážka, tak to znamená, že mám číslo tvaru 22222.....2222. Namiesto pravej zarážky dám 1 a o 1 vpravo pravú zarážku. Prejdem do stavu s3, ktorí stroju hovorí, že sa má posúvať doľava a všetko meniť na 0, až kým nedosiahne ľavú zarážku. T.j. dostanem pásaku do stavu L000000....000001R. Potom môžem zmeniť stav na s0.

Znovu pripomeniem, že TS som sa učil dávno, t.j. detaily si budeš musieť domyslieť sám.

Tu som písal hlavne o tom ako inkrementovať, možno to budeš chcieť pomeniť nejako o trochu inak. (Napríklad v bode d neprejsť do s0, ale do stavu, v ktorom sa kontroluje, či na páske nezostali x-ká. Lebo bod d znamená, že som zatiaľ zmazal počet x-ov, ktorý je nejakou mocninou trojky.)

Veľa zdaru pri programovaní TS.

Offline

 

#5 29. 10. 2011 04:40 — Editoval meron (29. 10. 2011 04:41)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Turingův stroj

no, zatím se mi povedlo napsat přechodové stavy pouze tak, že jsem načetl x a xxx
když jsem to testoval na devíti x, tak už mi to vyhodilo L001R po umazání 6ti x místo na 9tém x:
a když se to snažím nějak upravit, tak se do toho vždycky víc a víc zamotávám. Přechodové stavy mám takto: 

( 0 je počáteční stav,   l,r - pohyb vlevo,vpravo, mezera = prázdný znak nebo žádný pohyb, 99=koncový stav)

d(0,x, )=(5,x, ,L,r)  1.
d(5,x, )=(6,x, ,0,r)  1.
d(6,x, )=(7,x, ,R,l)  1.
d(7,x,0)=(7,x, ,0,l)  1.
d(7,x,L)=(1,x, ,L, )  1.  zde jsem vygeneroval L0R
d(1,x,L)=(2,x, ,L,r)  2.  zde přecházím z L na 0          16. jdu z L ze stavu 1 na stav 2
d(2,x,0)=(0,x, ,1, )  3. přepisuju na 0 na 1 , tedy L1R   17. nulu přepisuju na jedničku, dostávám L11R
d(0,x,1)=(1, ,r,1,l)   4. umazávám x a vracím se z 1 na L  18. mažu čtvrté x
d(1,x,2)=(1,x, ,2,l)     7. vracím se na L                              20. vracím se znovu na L...zatím vše v ok ***
d(1,x,L)=(2,x, ,L,r)     8. přejdu do stavu 2, a posunu se doprava od L
d(2,x,1)=(0,x, ,2, )  5.  přepisuju v L1R 1 na 2 >> L2R
d(0,x,2)=(1, ,r,2, )   6.  umazávám další x protože už mám L2R  19. přepisuju na L21R
d(2,x,2)=(2,x, ,2,r)    9. na pásce mám 2 tak jdu dále..
d(2,x,R)=(2,x, ,1,r)    10. narazím na R tak ho přepíšu na 2 a mám L21_
d(2,x, )=(3,x, ,R,l)     11. narážím na prázdné pole,proto dám novou zarážku R, tedy L21R
d(3,x,1)=(3,x, ,1,l)     12.vracím se zpátky na 2. pásce
d(3,x,2)=(3,x, ,0,l)     13. umazávám vše co je za jedničkou a jdu doleva
d(3,x,L)=(0,x, ,L, )     14. docházím k L a mám L01R ..
d(0,x,L)=(1, ,r,L, )      15. smažu x a jdu na L, takže smazány 3 x a v trojk.soustavě mám 10, což sedí
d(2,x,0)=(0,x, ,1,r)   
d(0, ,L)=(10, , ,L,r)
d(10, ,0)=(10, , ,0,r)
d(10, ,1)=(11, , ,1,r)
d(1, ,L)=(10, , ,L,r)
d(11, ,R)=(99, , , , )

*** jenže když dojedu na sedmé x,  tak už mám na 2. pásce L001R a hlava je na L ... neumím se z toho vykopat, když už jsem myslel, že se to podařilo, tak se to seklo hned na dalším x :-/

bohužel se to tady špatně vysvětluje, mám v PC stažený simulátor Turingového stroje na kterém to dělám, na tom je to samozřejmě mnohem jasnější, nevím jestli je můj problém z toho, co jsem výše napsal chápat

Offline

 

#6 29. 10. 2011 11:54 — Editoval kompik (29. 10. 2011 13:39)

kompik
Místo: Bratislava
Příspěvky: 355
Škola: FMFI UK
Pozice: ucitel
Reputace:   54 
 

Re: Turingův stroj

Skus dat pozor na to, ci spravne inkrementujes taketo cisla:
>> L22101R.
T.j. ked to zmenis na
>> L22201R
tak ci sa nezabudnes vratit a prepisat predosle 2-ky na 0:
>> L00201R

Ja som si vyskusal tie znejaky simulator TS, konkretne JFLAP: http://www.jflap.org/
("Instalacia" bola uplne bezbolestna, stiahol som subor jflap.jar a spustil.)

Vyskusal som si v tom spravit TS na tento problem, trochu som to testoval a funguje - mozes si to pozriet na screenshotoch, alebo aj spustit moj zdrojak a testovat na nejakych vstupoch, pripadne upravovat, ak si stiahnes ten JFLAP
http://ifile.it/81tmy2z/meron.zip

Na tom screenshote/v zdrojaku su:
Stavy nalavo (q5,q6,q7) pripravne - vyrobim L0R.
Stavy napravo (q1,q2,q3) pocitacie - mazem x a pocitam ich pocet na druhej paske.
Stavy dole (q8,q9,q4) testovacie - uz su vsetky x zmazane, tak testujem, ci spodna paska ma tvar L00....001R
(Predpokladam, ze sa ten moj navrh da povylepsovat - usetrit par stavou alebo prechodov.)


http://img406.imageshack.us/img406/356/ts02sim10x.th.png
http://img259.imageshack.us/img259/7567/ts02sim9xaccept.th.png
http://img690.imageshack.us/img690/2852/ts02sim9x.th.png
http://img72.imageshack.us/img72/4037/ts02z.th.png

Tie obrazky predstavuju: Diagram turingovho stroja = TS02.png, +nejake simulacie, konkretne tam kde na paske je na zaciatku 10x (a zobrazeny je stav ked sa x-y zmazali a ide sa testovat ako vyzera cislo na paske) = TS02_sim10x.png a ked na paske je na zaciatku 9x (tiez je tu prichod do testovacieho stavu a potom prichod do akceptacneho stavu) = TS02_sim9x.png a TS02_sim9xaccept.png

P.S.
Z casov Tvojich postov sa da tipovat, ze si v inom casovom pasme ako ja ;-) Studujes v USA?

Offline

 

#7 30. 10. 2011 05:02 — Editoval meron (30. 10. 2011 05:04)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Turingův stroj

Problém byl skutečně v tom, že jsem špatně přemazával ty dvojky, prostě jsem při programování přehlédl vždycky nějakou chybku a snažil jsem se ji napravit v jiné přechodové funkci a tím jsem si z toho pokaždé udělal takový guláš, že jsem raději začal znova a tu chybu stejně udělal znovu.

To řešení v JFLAP je super, v tom grafickém znázornění jsem se konečně přestal ztrácet a udělal si jasno v tom, kde jsem pořád tu chybu chybu sekal.

Problém  je tedy vyřešen, už mi to funguje jak má, takže DÍKY MNOHOKRÁT za cenné rady a strávený čas nad řešením, hodně mi to pomohlo.

PS. V USA opravdu ne :-D . Studuji v ČR, jen jsem ten TS chtěl tak vehementně dokončit, že jsem si za poslední tři dny hodně posunul denní režim (a v tuto dobu se umím, i když je to možná divné, nejlíp soustředit). A ještě jednou díky!

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson