ทำไม NFA จึงถูกเรียกว่า Non-deterministic?


14

ฉันมีคำถามแบบนี้อยู่ในใจ ทำไมหุ่นยนต์ จำกัด แบบไม่ จำกัด ตัวเรียกว่าnon-deterministicในขณะที่เรากำหนดช่วงการเปลี่ยนภาพสำหรับอินพุต ถึงแม้ว่าจะมีการเปลี่ยนแบบหลายครั้งและแบบเอปไซลอนแต่ก็มีการกำหนดไว้ซึ่งหมายความว่าเครื่องสามารถกำหนดช่วงการเปลี่ยนภาพได้ ซึ่งหมายความว่ามันไม่แน่นอน


12
Nondeterministic ที่ใช้ในวิทยาการคอมพิวเตอร์เชิงทฤษฎีแตกต่างจากการสุ่ม
adrianN

10
มันเป็นตัวเลือกระหว่างการเปลี่ยนภาพที่ไม่ระบุชื่อ
reinierpost

NFA คืออะไร (สำหรับคนที่ไม่ได้รับความสว่างในหมู่พวกเรา)
DarcyThomas

@DarcyThomas แนะนำแรกที่ผมมีคือswtch.com/~rsc/regexp/regexp1.html มันเป็นการอ่านที่ดี - ไม่ใช่จุดประสงค์ของบทความเพื่อแนะนำ NFA แต่มันก็เป็นงานที่ดีในการอภิปรายนิพจน์ทั่วไป
Wildcard

คำตอบ:


22

"Deterministic" หมายถึง "ถ้าคุณทำให้ระบบอยู่ในสถานการณ์เดียวกันสองครั้งจะรับประกันว่าจะให้ตัวเลือกเดียวกันทั้งสองครั้ง"

"Non-deterministic" หมายถึง "not deterministic" หรือกล่าวอีกอย่างหนึ่งว่า "ถ้าคุณทำให้ระบบอยู่ในสถานการณ์เดียวกันสองครั้งระบบอาจจะหรือไม่เลือกก็ได้ทั้งสองครั้ง"

ออโตเมติก จำกัด ที่ไม่สามารถกำหนดค่าได้ (NFA) สามารถมีการเปลี่ยนแปลงหลายสถานะ ซึ่งหมายความว่ามีหลายตัวเลือกสำหรับสิ่งที่สามารถทำได้ในสถานการณ์นั้น มันไม่ได้ถูกบังคับให้เลือกอันเดียวกันเสมอ ในอินพุตหนึ่งอาจเลือกการเปลี่ยนแปลงแรกและในอินพุตอื่นอาจเลือกการเปลี่ยนแปลงเดียวกัน

ที่นี่คุณสามารถคิดว่า "สถานการณ์" เป็น "สิ่งที่รัฐ NFA อยู่ในนั้นพร้อมกับสิ่งที่สัญลักษณ์จะถูกอ่านต่อไปจากอินพุต" แม้ว่าทั้งสองจะเหมือนกัน NFA ยังคงอาจมีช่วงการเปลี่ยนภาพที่ตรงกันหลายครั้งที่สามารถนำออกจากสถานะนั้นและสามารถเลือกโดยพลการที่จะใช้ ในทางตรงกันข้าม DFA มีการเปลี่ยนคู่ที่ตรงกันเท่านั้นที่สามารถนำมาใช้ในสถานการณ์นั้นได้ดังนั้นจึงไม่มีทางเลือก - มันจะติดตามการเปลี่ยนแปลงเดียวกันทุกครั้งที่อยู่ในสถานการณ์นั้น


"สามารถเลือกได้เองว่าจะเลือกแบบไหน" ดังนั้นโดยทั่วไปมีลักษณะความน่าจะเป็น
Trilarion

@Trilarion ไม่มันขึ้นอยู่กับว่ามันจะนำไปสู่การยอมรับสถานะหรือไม่ ในความเป็นจริง probabilistic FA เป็นลักษณะทั่วไปสำหรับ NFA
rus9384

"Non-deterministic" หมายถึง "not deterministic" หรือกล่าวอีกอย่างหนึ่งว่า "ถ้าคุณทำให้ระบบอยู่ในสถานการณ์เดียวกันสองครั้งระบบอาจจะหรือไม่เลือกก็ได้ทั้งสองครั้ง" คุณหมายความว่าเครื่องสามารถยอมรับและปฏิเสธสตริงเดียวกันในสองกรณี
Madhusoodan P

3
@MadhusoodanP สัญชาตญาณของคุณถูกต้องจากสิ่งที่เขียนที่นี่และนั่นทำให้เรารู้ว่าสิ่งที่ขาดหายไปจากคำตอบนี้: เมื่อวิเคราะห์ NFAs เราจะพิจารณาเส้นทางการดำเนินการที่เป็นไปได้ทั้งหมด ตราบใดที่เส้นทางใด ๆในเครื่องนั้นนำไปสู่สถานะการยอมรับเราจะพิจารณาอินพุตเป็นที่ยอมรับ ดังนั้นมันไม่เกี่ยวกับความน่าจะเป็น แต่เพียงว่าสถานะการยอมรับนั้นสามารถเข้าถึงได้หรือไม่ สัญชาตญาณนี้ชัดเจนเมื่อคิดว่า NFA ลดลงเป็น DFA ได้อย่างไร: เราต้องจำลองการประหาร NFA ที่เป็นไปได้ทั้งหมดซึ่งนำไปสู่การระเบิดแบบทวีคูณในการก่อสร้าง
ComicSansMS

3
วิธีที่จะเห็นภาพก็คือการคิดว่าที่เปลี่ยนหลาย ๆ อาจจะเลือกที่ NFA จะใช้เวลาทั้งหมดเปลี่ยน คุณสร้างโครงสร้างที่มีลักษณะคล้ายต้นไม้ของสถานะทั้งหมดที่เข้าถึงได้โดยสตริงอินพุตและหากสาขาใด ๆจบลงด้วยสถานะการยอมรับสตริงนั้นจะได้รับการยอมรับ กล่าวอีกนัยหนึ่งด้วย DFA คุณกำลังถามว่า " สถานะของฉันเป็นรัฐที่ยอมรับได้หรือไม่" ในขณะที่ NFA คุณกำลังถามว่า "เป็นรัฐใดที่รัฐของฉันสามารถยอมรับได้หรือไม่"
Harrison Paine

8

ใช้หุ่นยนต์นี้เช่นมันเป็น NFA และยอมรับสตริง0110การจะมีความรู้มากขึ้นก็ยอมรับว่าปลายสายใน10011010

Example automaton, source: /cs/61159/what-is-the-difference-between-following-two-finite-automata/61208

หากต้องการดูว่าเราเพียงแค่ต้องตรวจสอบว่ามีสถานะยอมรับหรือไม่

Q01Q00Q11Q20

ตอนนี้ในบรรทัดสีแดงมีความเป็นไปได้อีกอย่างนั่นคือเมื่ออ่านที่สองฉันสามารถอยู่ในq 0และอยู่ในq 0เมื่ออ่าน0 ที่ผ่านมา Automata ไม่มีหน่วยความจำดังนั้นจึงไม่มีวิธีการ 'บันทึก' สถานะและตรวจสอบในภายหลังว่าสตริงของฉันลงท้ายด้วย10หรือเปล่ามันเหมือน NFA นี้มันคาดเดาได้ว่าสตริงนั้นลงท้ายด้วย10ก่อนจะแยกเป็นสถานะที่ยอมรับได้หรือไม่ ลัทธิ nondeterminism ที่นี่มีการเลือกมากมายและทำให้ถูกต้องเสมอ1Q0Q001010

การสร้าง NFA นั้นง่ายกว่าการสร้าง DFA สิ่งที่ดีคือทั้งคู่นั้นเท่าเทียมกัน


ใช่ฉันรู้ทฤษฎีส่วนหนึ่งของ NFA แล้ว แต่สิ่งที่ฉันถามคือแม้ว่าจะมีการเปลี่ยนแปลงหลายครั้งสำหรับตัวอักขระอินพุตเดียว แต่เครื่องก็สามารถกำหนดได้ว่าทุกรัฐสามารถเข้าถึงได้อย่างไร (พูดโดยสร้างหัวข้อ) ดังนั้นมันจึงเป็น DFA อย่างแท้จริง [หรือคุณคิดว่าฉันตีความตีความความหมายของการตัดสินใจในระดับที่ไม่ถูกต้อง ]
Madhusoodan P

1
ตัวอย่างอาจได้รับการปรับปรุงด้วย NFA ที่ซับซ้อนกว่าเล็กน้อยเนื่องจาก DFA สำหรับจุดประสงค์เดียวกันจะใช้จำนวนสถานะเดียวกันกับ NFA ของคุณและจะไม่ซับซ้อนโดยเฉพาะ ในทางตรงกันข้ามการจับคู่นิพจน์ทั่วไปที่ซับซ้อนอาจต้องใช้ DFA ที่ซับซ้อนและยุ่งเหยิง แต่ไม่สำคัญใน NFA
supercat

ε

1
@Aristu หากคุณใช้ NFA ในภาษาการเขียนโปรแกรมที่คุณชื่นชอบกระทู้เป็นตัวเลือกที่แย่มาก คุณควรติดตามชุดของรัฐที่หุ่นยนต์ "อาจอยู่ใน" หลังจากอ่านตัวละครแต่ละตัว โค้ดที่ได้จะใกล้เคียงกับการติดตั้ง DFA
David Richerby

1
ε

5

ฟังก์ชั่นการเปลี่ยนแปลงของ NFA ระบุการเปลี่ยนแปลงที่ได้รับอนุญาต ณ จุดใดก็ได้ อาจมีตัวเลือกมากกว่าหนึ่งตัวและ NFA เลือกการเปลี่ยนผ่านแบบไม่เป็นทางการโดยมีเป้าหมายในการเข้าถึงรัฐที่ยอมรับในที่สุด

บางทีคุณควรรอจนกว่าคุณจะเรียนรู้เกี่ยวกับเครื่องจักรทัวริง nondeterministic Nondeterminism หมายถึงสิ่งเดียวกันในทั้งสองกรณี


คุณช่วยกรุณาเน้นว่า "การเปลี่ยนแปลงแบบไม่ จำกัด " และโปรดทบทวนคำตอบของฉัน
Madhusoodan P

ฉันคิดว่าคำตอบของเราทั้งสองนั้นไม่ค่อยดีนักแม้ว่าปรีชาของคุณจะมีเสียงดี
Yuval Filmus

3

เริ่มต้นด้วย Finite Automaton มันมีสถานะและสถานะการยอมรับและการเปลี่ยน

ทีนี้ให้มันมากกว่าหนึ่งกฎ trasition ของแต่ละรัฐและบอกว่ามันยอมรับถ้ามีชุดของกฎการเปลี่ยนแปลงที่เลือกหลังจากความจริงที่นำไปสู่สถานะการยอมรับที่ได้รับสายป้อน

เมื่อคุณมีสตริงป้อนเข้าของคุณจะมีชุดการเปลี่ยนรูปแบบที่แน่นอนและระบุว่าจะผ่าน (หนึ่งครั้ง) เพื่อยอมรับสตริงนั้น แต่ที่เปลี่ยนมันหยิบได้รับการแต่งตั้งเท่านั้นในตอนท้ายของสตริง ในขณะที่กำลังอ่านสตริงเส้นทางที่จะใช้ไม่ได้ถูกกำหนด

มันไม่ได้กำหนดขึ้น มันจะเลือกเส้นทางผ่านกราฟหลังจากที่คุณให้ปัญหาทั้งหมดกับมันไม่ใช่เมื่ออ่านอินพุต


ตอนนี้เราทำแบบนี้ให้แตกต่างจากการทดลองทางความคิด แต่สิ่งนี้ให้แรงบันดาลใจแก่คุณว่าทำไมมันถึงได้ชื่อนั้น

สิ่งนี้อธิบายว่ามันได้ชื่อมาตั้งแต่แรกอย่างไร ใช่คุณสามารถจำลอง NDFA ในทางที่กำหนดอย่างสมบูรณ์ แต่ชื่อเหนียว เมื่อคุณเรียกชื่อบ๊อบแล้วจะมีค่าใช้จ่ายในการสื่อสารเพื่อเปลี่ยนชื่อเป็นอย่างอื่นเนื่องจากไม่มีใครรู้ว่าคุณกำลังพูดถึงอะไรเมื่อคุณเรียกว่าอลิซ


ใช่! ฉันเห็นด้วยกับคำอธิบายของคุณเกี่ยวกับ NFA แต่คำถามของฉันเกี่ยวกับสาเหตุที่ไม่สามารถกำหนดได้แม้ว่าชุดของรัฐจะถูกกำหนดไว้สำหรับการป้อนข้อมูลเดียว
Madhusoodan P

@MadhusoodanP มันถูกเรียกว่า non-deterministic เพราะมันถูกคิดค้น / จินตนาการ และชื่อนั้นเหนียวแม้ว่าเราจะกำหนดวิธีการหลายอย่างเพื่อกำหนดรูปแบบ
Yakk

1

จากวิกิพีเดียวิธีที่ดีที่สุดที่จะคิดเกี่ยวกับเรื่องนี้คือเริ่มต้นด้วยเครื่องจักรสถานะ จำกัด แน่นอน (DFA) สำหรับ DFA แต่ละช่วงการเปลี่ยนภาพจะไม่ซ้ำกันกำหนดอย่างโดยสถานะปัจจุบันและสัญลักษณ์อินพุตที่ต้องดำเนินการ Nondeterministic finite state machines (NFA) เป็นเพียงสิ่งที่คุณได้รับเมื่อคุณผ่อนคลายกฎระดับนี้เพื่ออนุญาตให้ช่วงการเปลี่ยนภาพไม่ได้มีการกำหนดที่ไม่ซ้ำกัน มันคือสิ่งที่คุณจะได้รับเมื่อคุณลบกฎเด็ดเดี่ยวออกจาก DFAs


มันซับซ้อนกว่านี้เล็กน้อยเนื่องจากลัทธิ nondeterminism ก็เป็นเงื่อนไขการยอมรับที่เฉพาะเจาะจงเช่นกัน
Yuval Filmus

1

ทั้ง NFA และ DFA ใช้เพื่อรับรู้สตริงบางอย่าง

หุ่นยนต์ จำกัด ที่ไม่สามารถกำหนดค่าได้จะทำงานเหมือนมันมีอิทธิพลต่อการตัดสินใจ - มันสามารถ "เลือก" เพื่อติดตามเส้นทางได้หรือไม่

ตัวอย่าง NFA

ในภาพด้านบนเมื่อเราจัดการกับสตริง "00111" โปรดสังเกตว่าเมื่อพบ "1" ตัวแรกมีวิธีที่เป็นไปได้สองวิธี หนึ่งสามารถอยู่ที่ "p" หรือไปที่ "q" หากออโตมาตะย้ายไปที่ "q" มันจะไม่ยอมรับสตริง (เนื่องจากไม่มีขอบที่ออกมาจาก "q") แต่ออโตมาตานี้สามารถยอมรับสตริงได้โดยไปที่ "q" โดยมีเพียง 1 ตัวสุดท้ายในขณะที่อยู่ที่ "p" สำหรับทุกสิ่ง (และนั่นคือสิ่งที่เกิดขึ้น)

NFA ทำให้ดูเหมือนว่าออโตมาตา "รู้" ว่าอะไรคือสิ่งที่อยู่ข้างหน้าและเลือกตามนั้น

แน่นอนมันไม่ได้ DFA และ NFA เทียบเท่ากันในแง่ของพลังงาน (คุณสามารถลด NFA เป็น DFA และทำให้ DFA (อาจ) ง่ายกว่าด้วยการใช้ NFA) แต่ NFA นั้นมีประโยชน์เพราะช่วยให้สามารถกำหนดภาษาเดียวกันกับ DFA ได้ในขณะที่ยังคงรักษากราฟไว้มาก สั้นและอ่านง่ายขึ้น

ไม่มีสิ่งใดในที่สุ่ม ส่วนที่ไม่ได้กำหนดขึ้นอยู่กับความจริงที่ว่ามี "ทางเลือก" ที่จะทำ แต่ความจริงก็คือว่าออโตมาตะไม่ได้ทำการตัดสินใจใด ๆ


0

ทีนี้นี่คือการผสมผสานของเนื้อหาบางอย่างจากหนังสือ [Introduction to Formal languages ​​and Automata โดย Peter Linz 4E] และความเข้าใจของฉัน

พิจารณาโปรแกรมการเล่นเกมที่เครื่องต้องทำการตัดสินใจสำหรับการย้ายครั้งต่อไป [พูดสำหรับโอเอกซ์] เนื่องจากมีการเคลื่อนไหวหลายครั้งที่เป็นไปได้เราจึงเลือกการย้ายแต่ละครั้งและประเมินการเคลื่อนไหวและเลือกการเคลื่อนที่ที่ดีที่สุด แม้ว่ากระบวนการคัดเลือกจะถูกกำหนดไว้แล้วและมีการเคลื่อนไหวที่เป็นไปได้หลายอย่างการเคลื่อนไหวครั้งสุดท้ายเป็นเพียงครั้งเดียวและได้รับเลือกว่าเป็นการเคลื่อนไหวที่ดีที่สุดในขณะที่ซ่อนการเคลื่อนไหวของการคำนวณจากคู่ต่อสู้ทั้งหมด [ที่นี่เราคิดว่ากระบวนการประเมินผลของการเคลื่อนไหวที่เป็นไปได้ในแต่ละครั้งนั้นถูกซ่อนไว้จากฝ่ายตรงข้าม]

ดังนั้นจึงมีทางเลือกเพียงทางเดียวเท่านั้นและฝ่ายตรงข้ามได้รับมายาเช่นการเคลื่อนที่นั้นไม่ได้กำหนดขึ้น

ถ้าคุณยังไม่มั่นใจด้วยการถามว่าการเคลื่อนไหวที่ดีที่สุดคือผลิตภัณฑ์ของการคำนวณที่กำหนดไว้แล้วคุณจะต้องพิจารณาเครื่องจักรที่ทำให้การเคลื่อนที่แบบสุ่มสมบูรณ์แบบ (อาจเป็นเครื่องที่สูญเสียไป


1
อีกวิธีในการใส่สิ่งนี้: กับฝ่ายตรงข้ามที่คุณเลือกคือ nondeterministic เมื่อสร้างแบบจำลองระบบจากมุมมองของคู่ต่อสู้การเคลื่อนไหวของคุณเป็นตัวเลือกที่ไม่ระบุชื่อเว้นแต่คู่ต่อสู้ได้คิดกระบวนการกำหนดไว้เบื้องหลัง
reinierpost

@reierierpost สิ่งที่ฉันต้องการจะบอก
Madhusoodan P

ตัวอย่างที่น่าสนใจมากขึ้นอาจเป็นเกมที่มีข้อมูล จำกัด (เช่น "ตำรวจและโจร") ผู้เล่นคนหนึ่งย้ายโจรรอบเขาวงกตในขณะที่ผู้เล่นคนอื่นย้ายตำรวจ เมื่อใดก็ตามที่ตำรวจสามารถมองเห็นโจรโจรของรัฐจะเป็นที่ตั้งของมัน แต่เมื่อใดก็ตามที่ตำรวจไม่เห็นโจรพวกโจรอาจเปลี่ยนเป็นช่องสี่เหลี่ยมที่อยู่ติดกับตำแหน่งและตำรวจสามารถ ไม่เห็นในขณะนั้น
supercat

@supercat หนึ่งที่ดี แต่การเปลี่ยนแปลงที่ทำอยู่เสมอรัฐเดียวและถ้าคุณซ่อนการคำนวณของการเคลื่อนไหวที่ดีที่สุดดูเหมือนว่าไม่ได้กำหนด
Madhusoodan P
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.