게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

숙제 5-2 Turing machine 의 예

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2011)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
이영석



가입: 2011년 9월 5일
올린 글: 103

올리기올려짐: 2011년10월26일 10:43    주제: 숙제 5-2 Turing machine 의 예 인용과 함께 답변

Turing machine 의 예

숙제의 튜링 머신은 인풋으로

1. 테잎의 초기상태 (symbol들의 리스트)
2. final state들의 list
3. initial state
4. 튜링머신이 작동하는 규칙을 가지는 ruletable
을 받습니다.



=========자연수 둘을 더하는 Turing machine=========

테입에 쓰여진 'one 심볼의 갯수를 자연수로 인코딩 하겠습니다.

예를들어 'one 'one 'one 'plus 'one one 이 테입에 쓰여있으면 3+2 를 하라는 의미입니다.

symbol 이 쓰여져있지 않은 테입에는 blank symbol 이 있어야합니다.


rule은 state와 symbol 을 받아서 전이되는 state, 테잎에 쓰는 symbol, 테입을 움직이는 방향을 내놓는 함수로 생각할 수

있습니다.

(읽기쓰기 헤드를 오른쪽으로 움직이려면 테입을 왼쪽으로 움직여야 합니다.)


초기 state를 s0 이라 하면

(s0, one) -> (s0, one , left)
(s0, plus) -> (s1, one , left)
(s1, one) -> (s1, one , left)
(s1, blank) -> (s2, blank, right)
(s2, one) -> (s3, blank, right)
(s3, one) -> (s3, one, right)
(s3, blank) -> (s4, blank, left)

라는 rule 을 만들 수 가 있고 final state 는 s4가 됩니다.


튜링머신의 동작을 살펴보면

s0 one one one plus one one (첫번째 심볼에 헤드가 위치하며 state 는 s0 를 의미)
one s0 one one plus one one (두번째 심볼에 헤드가 위치하며 state 는 s0 를 의미)
one one s0 one plus one one
one one one s0 plus one one
one one one one s1 one one
one one one one one s1 one
one one one one one one s1 blank
one one one one one s2 one
one one one one s3 one
one one one s3 one one
one one s3 one one one
one s3 one one one one
s3 one one one one one
s3 blank one one one one one
s4 one one one one one

이되어 튜링머신의 동작이 끝나면 테잎에는 5가 쓰여지게 됩니다.

위의 머신을 만들 때에, make-tm 함수의 인자로 들어가는 것은

(list 'one 'one 'one 'plus 'one 'one) (list 's4) 's0 ruletable
이 됩니다.


이영석 가 2011년10월26일 15:50에 수정함, 총 2 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
이영석



가입: 2011년 9월 5일
올린 글: 103

올리기올려짐: 2011년10월26일 11:26    주제: 인용과 함께 답변

숙제 문서에는 나와있지 않지만 turing 머신에는 blank symbol 이 있어야합니다. (erase 를 한 결과, 또는 테입의 끝에 비어있는 tape 을 나타냅니다.)

blank symbol 은 'BLANK 로 정하겠습니다.

테입을 만들 때나 erase 를 할 때에 꼭!!! 위의 symbol로 작성해주세요
위로
사용자 정보 보기 비밀 메시지 보내기
이영석



가입: 2011년 9월 5일
올린 글: 103

올리기올려짐: 2011년10월26일 15:39    주제: Turing machine 의 또다른 예 인용과 함께 답변

========주어진 문자열 w 를 받았을 때 ww 를 출력하는 Turing machine========

문자열을 구성하는 문자는 a와 b로 이루어져있다고 가정하면

'a 'b 'a 'a 를 초기 인풋으로 주면 'a 'b 'a 'a 'a 'b 'a 'a 를 리턴해야 합니다.

rule은 다음과 같이 정의 됩니다.

(s0, a) -> (s1, a_1, left)
(s0, b) -> (s2, b_1, left)
(s1, a) -> (s1, a, left)
(s1, b) -> (s1, b, left)
(s1, a_2) -> (s1, a_2, left)
(s1, b_2) -> (s1, b_2, left)
(s1, BLANK) -> (s3, a_2, right)
(s2, a) -> (s2, a, left)
(s2, b) -> (s2, b, left)
(s2, a_2) -> (s2, a_2, left)
(s2, b_2) -> (s2, b_2, left)
(s2, BLANK) -> (s3, b_2, right)
(s3, a_2) -> (s3, a_2, right)
(s3, b_2) -> (s3, b_2, right)
(s3, a) -> (s_noend, a , right)
(s3, b) -> (s_noend, b , right)
(s3, a_1) -> (s_semifinal, a_1, left)
(s3, b_1) -> (s_semifinal, b_1, left)
(s_noend, a) -> (s_noend, a ,right)
(s_noend, b) -> (s_noend, b ,right)
(s_noend, a_1) -> (s0, a_1, left)
(s_noend, b_1) -> (s0, b_1, left)
(s_semifinal, a_2) -> (s_semifinal, a_2, left)
(s_semifinal, b_2) -> (s_semifinal, b_2, left)
(s_semifinal, BLANK) -> (s_ff, BLANK, right)
(s_ff, a_2) -> (s_ff, a ,right)
(s_ff, a_1) -> (s_ff, a ,right)
(s_ff, b_2) -> (s_ff, b ,right)
(s_ff, b_1) -> (s_ff, b ,right)
(s_ff, BLANK) -> (s_final, BLANK, left)


initial state 는 s0 이고 final state 는 s_final이 됩니다.

a b a 라는 인풋이 있을 때의 동작을 살펴보면

s0 a b a
a_1 s1 b a
a_1 b s1 a
a_1 b a s1 BLANK
a_1 b s3 a a_2
a_1 s_noend b a x
s_noend a_1 b a a_2
a_1 s0 b a a_2
a_1 b_1 s2 a a_2
a_1 b_1 a s2 a_2
a_1 b_1 a a_2 s2 BLANK
a_1 b_1 a s3 a_2 b_2
a_1 b_1 s3 a a_2 b_2
a_1 s_noend b_1 a a_2 b_2
a_1 b_1 s0 a a_2 b_2
a_1 b_1 a_1 s1 a_2 b_2
a_1 b_1 a_1 a_2 s1 b_2
a_1 b_1 a_1 a_2 b_2 s1 BLANK
a_1 b_1 a_1 a_2 s3 b_2 a_2
a_1 b_1 a_1 s3 a_2 b_2 a_2
a_1 b_1 s3 a_1 a_2 b_2 a_2
a_1 b_1 a_1 s_semifinal a_2 b_2 a_2
...
a_1 b_1 a_1 a_2 b_2 a_2 s_semifinal BLANK
a_1 b_1 a_1 a_2 b_2 s_ff a_2
a_1 b_1 a_1 a_2 s_ff b_2 a
a_1 b_1 a_1 s_ff a_2 b a
a_1 b_1 s_ff a_1 a b a
a_1 s_ff b_1 a a b a
...
s_ff BLANK a b a a b a
s_final a b a a b a



위의 머신을 만들 때에, make-tm 함수의 인자는

(list 'a 'b 'a) (list 's_final) 's0 (위에서 만든 ruletable)
이 되겠습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
박유군



가입: 2011년 10월 4일
올린 글: 15

올리기올려짐: 2011년10월27일 23:23    주제: left right 질문 인용과 함께 답변

예제의 ruletable 에서 'left 는 tape를 왼쪽으로

움직이라는 의미로 사용된 거 같은데

저희가 구현하는 make-rule: state × symbol × todo × move × state -> rule

에서 move 가 'left 일때도 마찬가지로

읽기쓰기 헤드를 왼쪽으로 움직이는 것이 아니라

테이프를 왼쪽으로 움직이도록 구현하면 되나요?
위로
사용자 정보 보기 비밀 메시지 보내기
박유군



가입: 2011년 10월 4일
올린 글: 15

올리기올려짐: 2011년10월27일 23:59    주제: blank 질문 인용과 함께 답변

blank 에 관해서도 질문이 있습니다

실행이 종료되었을 때 tape 에 blank 가 있다면

BLANK 로 출력해주면 되는 건가요? 아니면 blank는 출력하지는 않는건가요?



아님 혹시 애초에 실행종료되었을 때에

tape에 blank가 남지 않도록 ruletable 을 작성하나요?

blank 가 남는다면 테이프 양 끝에만 존재할 수 있나요 아니면

중간중간에도 존재 할 수 있는 건가요?
위로
사용자 정보 보기 비밀 메시지 보내기
이영석



가입: 2011년 9월 5일
올린 글: 103

올리기올려짐: 2011년10월28일 12:04    주제: 인용과 함께 답변

숙제문서에 보시면 left right 는 테입의 움직이는 방향입니다.

출력에 관한내용은 빠른 시일내에 공지하겠습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
엄태건



가입: 2011년 9월 27일
올린 글: 50

올리기올려짐: 2011년10월29일 14:01    주제: 인용과 함께 답변

이영석 씀:
숙제문서에 보시면 left right 는 테입의 움직이는 방향입니다.

출력에 관한내용은 빠른 시일내에 공지하겠습니다.


make-rule에서 todo에 들어가는 left와 right는

헤드를 왼쪽, 오른쪽으로 움직이라는 거 아닌가요?

즉, todo에서 left가 나온다면, 헤드를 왼쪽으로 움직이기 위해서 테잎을 오른쪽으로 움직이는거 아닌가요..?
위로
사용자 정보 보기 비밀 메시지 보내기 AIM 주소
이영석



가입: 2011년 9월 5일
올린 글: 103

올리기올려짐: 2011년10월30일 15:53    주제: 인용과 함께 답변

사실 문제를 해석하기 나름인데 todo 의 left right 도 테입이 움직이는 방향으로 숙제를 작성해주세요
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2011) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay