0과 0 사이 1의 개수를 홀수로 만드는 튜링 기계 구현

 

이 튜링 기계는 테이프 상에서 0과 0 사이에 존재하는 1의 개수를 세고, 그 개수가 짝수인 경우에는 1을 하나 추가하여 홀수로 만드는 기능을 수행합니다.


📌 기본 조건

  • 심볼: 0, 1, 공백(_)
  • 명령어: R (오른쪽), L (왼쪽), P (쓰기), E (종료 상태)
  • 입력 예시: 0 1 1 0 → 출력: 0 1 1 1 0 (1이 3개 → 홀수)

🧠 상태 정의

  • q0: 시작 상태 – 첫 번째 0 찾기
  • q1: 0 이후 1을 탐색
  • q_even: 현재 1의 개수가 짝수 상태
  • q_odd: 현재 1의 개수가 홀수 상태
  • q_write: 0까지 돌아가서 1 삽입할 위치로 이동
  • q_add: 1 삽입 실행
  • qe: 종료

🧾 최종 명령어 구현


(q0, 0) → (0, R, q1)
(q0, 1) → (1, R, q0)
(q0, _) → (_, R, qe)

(q1, 1) → (1, R, q_even)
(q1, 0) → (0, R, qe)     // 0 뒤에 1이 하나도 없을 경우

(q_even, 1) → (1, R, q_odd)
(q_even, 0) → (0, L, q_write)

(q_odd, 1) → (1, R, q_even)
(q_odd, 0) → (0, R, qe)  // 홀수면 그대로 종료

(q_write, 1) → (1, L, q_write)
(q_write, 0) → (0, R, q_add)

(q_add, 1) → (1, R, q_add)
(q_add, 0) → (1, R, qe)  // 짝수 개수였으니 1을 삽입하여 홀수로
  


💡 요약

  • 이 튜링 기계는 매번 첫 번째 0부터 탐색하며
  • 0과 0 사이의 1 개수를 홀/짝 상태 전이로 판별하고
  • 짝수일 경우 1을 삽입하여 홀수로 만든다
  • 그 외 경우는 아무 작업 없이 다음 블록으로 이동


이제 이 논리를 기반으로 수업 과제, 논문, 오토마타 실습에 활용하실 수 있습니다. 

다음 이전