Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สร้าง Turing Machine สำหรับภาษา L = {aⁿ bᵐ a⁽ⁿ⁺ᵐ⁾ | n,m ≥ 1} ใน C++


Turing Machine − อุปกรณ์ยอมรับคำในภาษาที่สร้างโดย grammar ประเภท 0 (Type-0) TM เป็นโมเดลทางคณิตศาสตร์ประกอบด้วยเทปยาวไม่สิ้นสุดแบ่งเป็นเซลล์ ให้อินพุต มีหัวอ่าน (head) อ่านเทป ลงทะเบียนสถานะ (state register) เก็บสถานะ TM หลังอ่านสัญลักษณ์ จะแทนที่ด้วยสัญลักษณ์อื่น เปลี่ยนสถานะภายใน และเคลื่อนที่ซ้าย/ขวา 1 เซลล์ หากถึง final state คำถูกยอมรับ มิฉะนั้นปฏิเสธ

TM อธิบายอย่างเป็นทางการเป็น 7-tuple (Q, X, Σ, δ, q₀, B, F) โดย:

  • Q: ชุดสถานะจำกัด
  • X: อัลฟาเบทบนเทป
  • Σ: อัลฟาเบทอินพุต
  • δ: ฟังก์ชันการเปลี่ยนสถานะ δ: Q × X → Q × X × {Left, Right}
  • q₀: สถานะเริ่มต้น
  • B: สัญลักษณ์ว่าง
  • F: ชุดสถานะสิ้นสุด

เป้าหมาย: สร้าง TM ที่ยอมรับภาษา L = aⁿbᵐa⁽ⁿ⁺ᵐ⁾ โดย n,m ≥ 1

ตัวอย่างคำที่ TM ยอมรับ:

  • abaa (n=1,m=1)
  • aabaaa (n=2,m=1)
  • abbaaa (n=1,m=2)
  • aaabaaaa (n=3,m=1)

คือ a ซ้ำ n ตามด้วย b ซ้ำ m ตามด้วย a ซ้ำ n+m ครั้ง อีกครั้ง n,m ≥ 1

จำนวน a น้อยที่สุดคือ 3 (n=m=1) และ b น้อยที่สุดคือ 1

แนวคิด: เครื่องจักรก่อนยอมรับ a ทั้ง n ตัว ตามด้วย b ทั้ง m ตัว เมื่อเจอ a เพิ่มเติม เริ่มลบ b และ a ที่อ่านมาแล้ว จนกว่าจะไม่มี a ใหม่ และหัวอ่านกลับถึงตัวแรก หมายถึงประมวลผลถูกต้อง

รายละเอียดการเปลี่ยนสถานะ (Transitions) แบ่งตาม state q0, q1, q2, q3, q4, qf พร้อมตัวอย่างการทำงานสำหรับสตริง "aabaaa" แสดงในเนื้อหาเดิม

สร้าง Turing Machine สำหรับภาษา L = {aⁿ bᵐ a⁽ⁿ⁺ᵐ⁾ | n,m ≥ 1} ใน C++

ตัวอย่างการทำงาน

Input: aabaaa
q0: aabaaa → q1: xabaaa → q1: xabaaa → q2: xabaaa → q3: xabzaa → q2: xazzaa
q2: xazzaa → q3: xazzza → q3: xazzza → q3: xazzza → q2: xzzzzza → q2: xzzzzza
q2: xzzzzza → q2: xzzzzza → q2: xzzzzza → q2: xzzzzza → q2: xzzzzzz → q3: xzzzzzz...
q3: xzzzzzz → q3: xzzzzzz → q4: zzzzzzz → q4: zzzzzzz... q4: xzzzzzz$ → qf: xzzzzzz$
ถึง qf หมายถึง aabaaa ถูกยอมรับ