Moore และ Mealy Machines
Finite automata อาจมีเอาต์พุตที่สอดคล้องกับการเปลี่ยนแต่ละครั้ง มีเครื่องจักรสถานะ จำกัด สองประเภทที่สร้างเอาต์พุต -
- เครื่องแป้ง
- เครื่องมัวร์
เครื่องแป้ง
Mealy Machine เป็น FSM ซึ่งเอาต์พุตขึ้นอยู่กับสถานะปัจจุบันและอินพุตปัจจุบัน
สามารถอธิบายได้ด้วย 6 ทูเปิล (Q, ∑, O, δ, X, q 0 ) โดยที่ -
Q เป็นชุดของรัฐที่ จำกัด
∑ เป็นชุดสัญลักษณ์ จำกัด ที่เรียกว่าตัวอักษรอินพุต
O เป็นชุดสัญลักษณ์ จำกัด ที่เรียกว่าอักษรเอาต์พุต
δ คือฟังก์ชั่นการเปลี่ยนอินพุตโดยที่δ: Q × ∑ → Q
X คือฟังก์ชันการเปลี่ยนเอาต์พุตโดยที่ X: Q × ∑ → O
q0คือสถานะเริ่มต้นจากการประมวลผลอินพุตใด ๆ (q 0 ∈ Q)
ตารางสถานะของเครื่อง Mealy แสดงไว้ด้านล่าง -
สถานะปัจจุบัน | ชาติหน้า | |||
---|---|---|---|---|
อินพุต = 0 | อินพุต = 1 | |||
สถานะ | เอาต์พุต | สถานะ | เอาต์พุต | |
→ก | ข | x 1 | ค | x 1 |
ข | ข | x 2 | ง | x 3 |
ค | ง | x 3 | ค | x 1 |
ง | ง | x 3 | ง | x 2 |
แผนภาพสถานะของ Mealy Machine ข้างต้นคือ -
มัวร์แมชชีน
Moore machine เป็น FSM ที่เอาต์พุตขึ้นอยู่กับสถานะปัจจุบันเท่านั้น
เครื่อง Moore สามารถอธิบายได้ด้วย 6 tuple (Q, ∑, O, δ, X, q 0 ) โดยที่ -
Q เป็นชุดของรัฐที่ จำกัด
∑ เป็นชุดสัญลักษณ์ จำกัด ที่เรียกว่าตัวอักษรอินพุต
O เป็นชุดสัญลักษณ์ จำกัด ที่เรียกว่าอักษรเอาต์พุต
δ คือฟังก์ชั่นการเปลี่ยนอินพุตโดยที่δ: Q × ∑ → Q
X คือฟังก์ชันการเปลี่ยนเอาต์พุตโดยที่ X: Q → O
q0คือสถานะเริ่มต้นจากการประมวลผลอินพุตใด ๆ (q 0 ∈ Q)
ตารางสถานะของ Moore Machine แสดงไว้ด้านล่าง -
สถานะปัจจุบัน | รัฐถัดไป | เอาต์พุต | |
---|---|---|---|
อินพุต = 0 | อินพุต = 1 | ||
→ก | ข | ค | x 2 |
ข | ข | ง | x 1 |
ค | ค | ง | x 2 |
ง | ง | ง | x 3 |
แผนภาพสถานะของ Moore Machine ข้างต้นคือ -
Mealy Machine กับ Moore Machine
ตารางต่อไปนี้เน้นประเด็นที่ทำให้ Mealy Machine แตกต่างจาก Moore Machine
เครื่องแป้ง | มัวร์แมชชีน |
---|---|
เอาต์พุตขึ้นอยู่กับสถานะปัจจุบันและอินพุตปัจจุบัน | ผลลัพธ์ขึ้นอยู่กับสถานะปัจจุบันเท่านั้น |
โดยทั่วไปจะมีสถานะน้อยกว่า Moore Machine | โดยทั่วไปจะมีสถานะมากกว่า Mealy Machine |
ค่าของฟังก์ชันเอาต์พุตเป็นฟังก์ชันของการเปลี่ยนและการเปลี่ยนแปลงเมื่อตรรกะอินพุตในสถานะปัจจุบันเสร็จสิ้น | ค่าของฟังก์ชันเอาต์พุตเป็นฟังก์ชันของสถานะปัจจุบันและการเปลี่ยนแปลงที่ขอบนาฬิกาเมื่อใดก็ตามที่เกิดการเปลี่ยนแปลงสถานะ |
เครื่องจักร Mealy ตอบสนองต่ออินพุตได้เร็วขึ้น โดยทั่วไปจะตอบสนองในวงจรนาฬิกาเดียวกัน | ในเครื่อง Moore จำเป็นต้องใช้ตรรกะมากขึ้นในการถอดรหัสเอาต์พุตซึ่งส่งผลให้วงจรล่าช้ามากขึ้น โดยทั่วไปจะตอบสนองหนึ่งรอบนาฬิกาในภายหลัง |
Moore Machine ไปยัง Mealy Machine
อัลกอริทึม 4
Input - เครื่องมัวร์
Output - เครื่องแป้ง
Step 1 - ใช้รูปแบบตารางการเปลี่ยนแปลง Mealy Machine ที่ว่างเปล่า
Step 2 - คัดลอกสถานะการเปลี่ยนแปลงของ Moore Machine ทั้งหมดลงในรูปแบบตารางนี้
Step 3- ตรวจสอบสถานะปัจจุบันและผลลัพธ์ที่เกี่ยวข้องในตารางสถานะของ Moore Machine หากเอาต์พุตสถานะ Q iคือ m ให้คัดลอกลงในคอลัมน์เอาต์พุตของตารางสถานะ Mealy Machine ที่ใดก็ตามที่ Q iปรากฏในสถานะถัดไป
ตัวอย่าง
ให้เราพิจารณาเครื่อง Moore ดังต่อไปนี้ -
สถานะปัจจุบัน | รัฐถัดไป | เอาต์พุต | |
---|---|---|---|
a = 0 | a = 1 | ||
→ก | ง | ข | 1 |
ข | ก | ง | 0 |
ค | ค | ค | 0 |
ง | ข | ก | 1 |
ตอนนี้เราใช้ Algorithm 4 เพื่อแปลงเป็น Mealy Machine
Step 1 & 2 -
สถานะปัจจุบัน | รัฐถัดไป | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
สถานะ | เอาต์พุต | สถานะ | เอาต์พุต | |
→ก | ง | ข | ||
ข | ก | ง | ||
ค | ค | ค | ||
ง | ข | ก |
Step 3 -
สถานะปัจจุบัน | รัฐถัดไป | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
สถานะ | เอาต์พุต | สถานะ | เอาต์พุต | |
=> ก | ง | 1 | ข | 0 |
ข | ก | 1 | ง | 1 |
ค | ค | 0 | ค | 0 |
ง | ข | 0 | ก | 1 |
Mealy Machine ไปยัง Moore Machine
อัลกอริทึม 5
Input - เครื่องแป้ง
Output - เครื่องมัวร์
Step 1- คำนวณจำนวนเอาต์พุตที่แตกต่างกันสำหรับแต่ละสถานะ (Q i ) ที่มีอยู่ในตารางสถานะของเครื่อง Mealy
Step 2- ถ้าหากผลของฉีเหมือนกันคัดลอกรัฐ Q ฉัน หากมี n เอาต์พุตที่แตกต่างกันให้แบ่ง Q iเป็น n สถานะเป็น Q ในที่ใดn = 0, 1, 2 .......
Step 3 - หากเอาต์พุตของสถานะเริ่มต้นเป็น 1 ให้ใส่สถานะเริ่มต้นใหม่ที่จุดเริ่มต้นซึ่งให้เอาต์พุต 0
ตัวอย่าง
ให้เราพิจารณา Mealy Machine ต่อไปนี้ -
สถานะปัจจุบัน | รัฐถัดไป | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
รัฐถัดไป | เอาต์พุต | รัฐถัดไป | เอาต์พุต | |
→ก | ง | 0 | ข | 1 |
ข | ก | 1 | ง | 0 |
ค | ค | 1 | ค | 0 |
ง | ข | 0 | ก | 1 |
ที่นี่สถานะ 'a' และ 'd' ให้ผลลัพธ์เพียง 1 และ 0 ตามลำดับดังนั้นเราจึงคงสถานะ 'a' และ 'd' แต่สถานะ 'b' และ 'c' ให้ผลลัพธ์ที่แตกต่างกัน (1 และ 0) ดังนั้นเราจึงแบ่งb เป็น b0, b1 และ c เป็น c0, c1.
สถานะปัจจุบัน | รัฐถัดไป | เอาต์พุต | |
---|---|---|---|
a = 0 | a = 1 | ||
→ก | ง | ข1 | 1 |
ข0 | ก | ง | 0 |
ข1 | ก | ง | 1 |
ค0 | ค1 | ค0 | 0 |
ค1 | ค1 | ค0 | 1 |
ง | ข0 | ก | 0 |