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


9

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

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

×abcaaacbcabcbca

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

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

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

คำตอบ:


6

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

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

ATabcaacbbaacccba

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

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

ATRaaaaaaaaaaaaaaaaa

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

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

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

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


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

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

8

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

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

(LaLaR)(LbLbR)(LcLcR).
()

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

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

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


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

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

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

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

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

6

น่ารัก

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

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

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

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

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


ฉันมีปัญหานิดหน่อยที่จะทำเรื่องนี้ คุณไม่ต้องยืนยันว่าxyyxนำไปสู่การกำหนดสถานะ จำกัด ? 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.