คำที่มีผลทางขวาและทางซ้ายเหมือนกัน


9

ฉันได้เริ่มต้นในการศึกษาออกำหนดไม่ใช่ใช้หนังสือของHopcroft และ Ullman ฉันติดอยู่ในปัญหาที่ฉันพบว่าน่าสนใจมาก:

ให้ออโตเมทริก จำกัด ที่ไม่ได้กำหนดค่าไว้ให้ยอมรับสตริงทั้งหมดที่มีค่าเท่ากันเมื่อประเมินจากซ้ายไปขวาเป็นจากขวาไปซ้ายโดยการคูณตามตารางต่อไปนี้:

×abcaaacbcabcbca

ดังนั้นหากเรามีสตริง , สินค้าจากซ้ายไปขวาคือและ ผลิตภัณฑ์จากขวาไปซ้ายคือabc
(a×b)×c=a×c=c
a×(b×c)=a×b=a

ดังนั้นไม่ควรยอมรับสำหรับออโตมาตะ สำหรับฉันมันชัดเจนว่าสตริงใด ๆหรือหรือเป็นสตริงที่ยอมรับได้ (การประเมินผลด้านขวาและซ้ายของพวกเขาทำงานในสตริงบางส่วนที่เหมือนกัน) เป็นการง่ายที่จะให้ NFA ที่อธิบายการประเมินจากซ้ายไปขวา แต่ปัญหาคือถ้าเครื่องพยายามคำนวณการประเมินที่ถูกต้องจากซ้ายไปฉันคิดว่ามันต้องรู้ความยาวของสตริง (จำเป็นต้องมีหน่วยความจำที่ไม่มีที่สิ้นสุด)abcaa∗bb∗cc∗

ดังนั้นออโตมาตาที่ไม่สามารถกำหนดค่าได้จะประเมินจากขวาไปซ้ายเพื่อเปรียบเทียบกับการประเมินจากซ้ายไปขวาได้อย่างไร

คำตอบ:


6

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

จากนั้นสร้างหุ่นยนต์ (" " สำหรับการแปลง) สำหรับการคูณย้อนกลับโดยการแปลง :ATTA

ATabcaacbbaacccba

ดังนั้นจะนำคุณเข้าสู่สถานะและในทำนองเดียวกันจะเข้าสู่สถานะของตามที่คุณทราบA(abc)cAT(cba)aAT

อย่างไรก็ตามถือว่าคุณกำลังจากขวาไปซ้ายและเรายังคงต้องการจากซ้ายไปขวา ดังนั้นเคล็ดลับที่สองคือการย้อนกลับของหุ่นยนต์ (ไม่ใช่การคูณซึ่งเพิ่งจะได้รับเราก็เริ่มต้น) โดยการย้อนกลับลูกศรทั้งหมดซึ่งนำไปสู่หุ่นยนต์ที่ไม่ได้กำหนดตามตารางการเปลี่ยนแปลงด้านล่าง ด้วยชุดย่อยที่ระบุด้วยตัวอักษรตัดแบ่งเพื่อป้องกันไม่ให้ไก่เกาดังนั้นจึงเป็นจริงๆ (หวังว่าฉันเข้าใจถูกต้อง - ดูเหมือนว่าจะใช้ได้)ATATRac{a,c}

ATRaขคaaขขคข∅คaคคaขaขaขขคaคขคคaคaขคaคaขคaขขคaขคaขคaขคaขค∅∅∅∅

คุณสามารถตีความได้ว่านี่เป็นหุ่นยนต์ที่ไม่สามารถกำหนดค่าได้โดยมีเพียงสามแถวด้านบนบรรทัดหรือรุ่นที่กำหนดด้วย 8 แถวทั้งหมด

ในที่สุดเครื่องจักรในการแก้ปัญหาคือหุ่นยนต์ครอสโปรดักต์ของและนั่นคือเพื่อทำพฤติกรรมการตัดกันของออโตสองตัว (เราไม่ต้องการใด ๆ มากกว่า). มีรัฐที่มีคู่เหมือนที่ ฟังก์ชันการเปลี่ยนแปลงรันและอย่างอิสระ สถานะเริ่มต้นเดียวเข้าสู่ภายใต้อินพุต , เป็นภายใต้อินพุต , ฯลฯ AATRA×ATRATA×ATR⟨a,aค⟩AATR⟨1,1⟩⟨a,a⟩a⟨b,b⟩b

การยอมรับสถานะในเวอร์ชั่นที่ไม่ใช่แบบกำหนดเองคือเป็นต้นในเวอร์ชั่นที่กำหนดขึ้นมาการยอมรับสถานะเป็นคู่ที่องค์ประกอบแรกคือของชุดองค์ประกอบที่สองเช่นหรือ\⟨a,a⟩∈⟨a,a⟩⟨b,bc⟩

A×ATRเพิ่มและตรวจสอบตามที่แสดงมีสถานะดังนั้นให้อภัยฉันถ้าฉันไม่เขียนรายละเอียด แต่เวอร์ชันที่ไม่ได้กำหนดไว้มีเพียงสถานะ25=3⋅8+110=3⋅3+1


ขอบคุณมันช่วยฉันได้คำตอบของคุณที่จะเข้าใจความคิดที่อยู่เบื้องหลังของการไม่กำหนดระดับและ "ย้อนกลับ" ของออโตมาตะ ฉันมีปัญหาในการทำความเข้าใจแนวคิดนี้โดยใช้หนังสือของ Hopcroft ตอนนี้ฉันกำลังใช้หนังสือของ Sipser "รู้เบื้องต้นเกี่ยวกับทฤษฎีการคำนวณ" มันค่อนข้างดี
— นายแอเรียล

พิจารณาการป้อนข้อมูลที่บริติชแอร์เวย์ย้ายไปที่หลังจากอินพุตและจากนั้นไปที่ภายใต้อินพุตดังนั้นไม่เป็นที่ยอมรับ แต่ควรเป็นอย่างไร ba⟨1,1⟩⟨b,b⟩b⟨c,∅⟩aba
— cemulate

8

(∗)ถ้าเป็นภาษาปกติดังนั้นภาษาที่ประกอบด้วยการย้อนกลับของคำทั้งหมดในก็เป็นปกติเช่นกัน ทำแบบนี้เป็นการออกกำลังกายLLRL

สิ่งนี้ช่วยให้เราแก้ปัญหาได้อย่างไร ให้เป็นภาษาที่ประกอบด้วยสตริงทั้งหมดที่ประเมินค่าเมื่อประเมินจากซ้ายไปขวา ภาษาที่คุณสนใจคือ นี่แสดงให้เห็นว่าถ้าคุณรู้วิธีพิสูจน์คุณสามารถสร้าง NFA สำหรับภาษาที่เป็นปัญหาได้La,Lb,Lca,b,c

(La∩LaR)∪(Lb∩LbR)∪(Lc∩LcR).
(∗)

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

ความคิดคือสิ่งนี้ สมมติว่าตัวอักษรตัวแรกที่คุณเห็นคือขจากนั้นส่วนที่เหลือของสตริงจะต้องประเมินเป็น (ตั้งแต่หมายถึง ) เหตุผลที่คล้ายกันเมื่อใช้ตัวอักษรตัวแรกคือคอย่างไรก็ตามเมื่อตัวอักษรตัวแรกเป็นส่วนที่เหลือสามารถประเมินหรือหรือเป็นโมฆะ ด้วย NFA เราสามารถเดาได้ (และตรวจสอบการเดาของเราในภายหลัง)bbbx=ax=bcaab

คำแนะนำนี้ควรให้คุณได้คิดมากพอและหวังว่าจะแก้ปัญหาได้


วิธีที่ดีในการพิสูจน์ด้วยสูตร - โหวตขึ้นสำหรับสิ่งนั้น สำหรับแนวคิดทางเลือก "ไม่ใช่การคาดเดาและการยืนยัน" ที่เป็นทางเลือกซึ่งปกติแล้วจะเป็นข้อตกลงสำหรับการพิสูจน์ ฉันคิดว่ามีรายละเอียดที่ขาดหายไปจำนวนมากที่นี่เช่นวิธีการติดตามรูปแบบสตริงที่ด้านหลัง
— David Lewis

@ David มีรายละเอียดขาดหายไปตามวัตถุประสงค์
— Yuval Filmus

@Yuval - เขาไม่ได้บอกว่าเป็นการทำการบ้าน - เราเชื่อใจผู้คนที่นี่ใช่ไหม? ฉันยังคิดว่าการพิสูจน์การมีอยู่นี้จะส่งผลให้เครื่องจักรมีขนาดค่อนข้างใหญ่อาจมีขนาดใหญ่เกินความจำเป็น
— David Lewis

@DavidLewis: Gilles ให้คำตอบที่สมบูรณ์กว่าซึ่งแสดงว่า NFA นั้นไม่ใหญ่เกินไป ลัทธิ nondeterminism ทำเพื่อคุณ แม้ว่า DFA ที่เกี่ยวข้องอาจมีขนาดใหญ่มาก
— กราฟิลส์

@MohamedAbbas บางทีฉันไม่ได้วางแผนที่จะตรวจสอบ
— Yuval Filmus

6

น่ารัก

ขั้นแรกให้สร้างหุ่นยนต์ที่คำนวณผลิตภัณฑ์จากซ้ายไปขวา ง่าย! ใส่การเปลี่ยนแปลงx→→yz→ เมื่อไรก็ตาม x⋅y=z. มีสามสถานะ{a→,b→,c→}แสดงถึงสามผลิตภัณฑ์ที่เป็นไปได้ เริ่มต้นในสถานะที่สี่1→ กับ 1→→xx→ เพื่อทุกสิ่ง x. สถานะสุดท้ายคือx→ ถ้าหากผลิตภัณฑ์ของคำที่ป้อนจากซ้ายไปขวาคือ x.

ตอนนี้เรามาสร้างหุ่นยนต์ที่คำนวณผลิตภัณฑ์จากขวาไปซ้าย อันนี้จะไม่กำหนดขึ้น เราจะทำอย่างนั้นได้อย่างไร? ง่าย ๆ ... ในการไปในทิศทางอื่นเพียงย้อนกลับทุกอย่าง : ลูกศรและทิศทางของผลิตภัณฑ์

ที่เราเคยมีมาก่อน x→→yx⋅y→ตอนนี้เรารับ x⋅y←←xy←: เมื่อเราใช้คำจากซ้ายไปขวาเราจะเปลี่ยนจากผลิตภัณฑ์เป็นปัจจัยทางขวา หรือในคำอื่น ๆx←←yy⋅x←.

เพิ่มโหนดที่ไม่ได้เชื่อมต่อ 1←เพื่อประโยชน์ของคำที่ว่างเปล่า โหนดทั้งหมดเป็นค่าเริ่มต้น

ตอนนี้เราจำเป็นต้องคำนวณทั้งสองเส้นทางด้วยกันดังนั้นเราจึงนำผลคูณของออโตมาตะสองตัว: (x1→,x2←)→y(z1→,z2←) IFF x1→→yz1→ และ x2←→yz2←. ให้สี่รัฐ(1→,x←) จะเริ่มต้นและสี่รัฐ (x→,x←)ถือเป็นที่สุด คำนี้ได้รับการยอมรับจากออโตเมติกที่ไม่สามารถกำหนดค่าได้หากผลิตภัณฑ์จากซ้ายไปขวาและผลิตภัณฑ์จากขวาไปซ้ายเหมือนกันx.


ฉันมีปัญหานิดหน่อยที่จะทำเรื่องนี้ คุณไม่ต้องยืนยันว่าx→←yy⋅x→นำไปสู่การกำหนดสถานะ จำกัด ? IAC ไม่ใช่แค่ง่าย ๆ เพียงแค่ "ย้อนกลับทุกอย่าง" เนื่องจากคุณยังต้องกินจากซ้ายไปขวา แต่คูณจากขวาไปซ้ายและฉันไม่แน่ใจว่าคุณทำอย่างนั้น
— David Lewis

@DavidLewis ชุดสถานะมี จำกัด ฉันกำหนดให้เป็น {overleftarrowa,b←,b←,1←}. ฉันได้กลับคำสั่งของการคูณ (ยกเว้นความผิดพลาดมากขึ้น)
— Gilles 'หยุดความชั่วร้าย'

5

ดูเหมือนว่าปัญหาหลักของคุณคือการใช้ลัทธิ nondeterminism ดังนั้นฉันขออธิบายอย่างละเอียด

แนวคิดพื้นฐานที่คนอื่นใช้คือเครื่องจักรที่สามารถคาดเดาผลสุดท้ายได้

ให้เราพิจารณาตัวอย่างเล็ก ๆ ของคุณ abcและแนวคิดการก่อสร้างของ Gilles ออโต "คอมพิวเตอร์" ผลิตภัณฑ์จากขวาไปซ้ายคาดเดาผลในการเริ่มต้นและจะตรวจสอบมัน ดังนั้นจึงมีความเป็นไปได้สามประการ:

  • เดา a: เป็น symol แรกคือ aผลิตภัณฑ์ rl ของ bc จะต้องได้รับ a หรือ b.
    • เดา a: ในฐานะที่เป็นสัญลักษณ์ที่สองคือ bสัญลักษณ์สุดท้ายจะต้องเป็น b.
      • (เดา b:) มันคือ cดังนั้นอย่ายอมรับ
    • เดา b: ในฐานะที่เป็นสัญลักษณ์ที่สองคือ bสัญลักษณ์สุดท้ายจะต้องเป็น c.
      • (เดา c:) มันใช่แน่ ๆ cดังนั้นเราจึงยอมรับ
  • เดา b: เป็น symol แรกคือ aเป็นไปไม่ได้ดังนั้นอย่ายอมรับ
  • เดา c: เป็น symol แรกคือ aผลิตภัณฑ์ rl ของ bc จะต้องได้รับ c
    • (เดา c:) ในฐานะที่เป็นสัญลักษณ์ที่สองคือ bสัญลักษณ์สุดท้ายจะต้องเป็น a
      • (เดา a:) มันคือ cดังนั้นอย่ายอมรับ

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

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


แนวคิดของการคาดเดาสตริงนั้นแปลกสำหรับฉัน แต่ฉันได้อ่านหนังสือของ Sipser และฉันคิดว่านั่นเป็นวิธีที่ดีกว่าสำหรับมือใหม่เช่นฉันในทฤษฎีการคำนวณ
— นายแอเรียล

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