การนับคำที่ไวยากรณ์ทั่วไปยอมรับ


26

เมื่อพิจารณาจากภาษาปกติ (NFA, DFA, ไวยากรณ์หรือ regex) จะนับจำนวนคำที่ยอมรับในภาษาที่กำหนดได้อย่างไร ทั้ง "ด้วยตัวอักษร n ทั้งหมด" และ "ที่มีตัวอักษรไม่เกิน n ตัว" เป็นสิ่งที่น่าสนใจ

Margareta Ackermanมีบทความสองเรื่องเกี่ยวกับการแจกแจงคำที่ NFA ยอมรับ แต่ฉันไม่สามารถแก้ไขให้นับได้อย่างมีประสิทธิภาพ

ดูเหมือนว่าธรรมชาติของภาษาปกติที่ จำกัด ควรทำให้นับได้ง่าย - ฉันเกือบจะคาดหวังว่าสูตรมากกว่าอัลกอริทึม แต่การค้นหาของฉันจนถึงตอนนี้ยังไม่ปรากฏอะไรเลยดังนั้นฉันต้องใช้คำที่ไม่ถูกต้อง


ฉันคิดว่าคุณหมายถึง "จำนวนการยอมรับคำที่มีขนาด " หรืออะไรทำนองนั้น อื่น ๆ จำนวนคำที่ยอมรับสำหรับnΣ
Suresh Venkat

คำตอบ:


37

สำหรับ DFA ซึ่งสถานะเริ่มต้นคือสถานะจำนวนคำของความยาวที่ลงท้ายด้วยสถานะคือโดยที่คือเมทริกซ์การถ่ายโอนของ DFA (เมทริกซ์ที่ หมายเลขในแถวและคอลัมน์คือจำนวนสัญลักษณ์อินพุตที่แตกต่างกันที่ทำให้เกิดการเปลี่ยนสถานะจากเป็นสถานะ ) ดังนั้นคุณสามารถนับการยอมรับคำที่มีความยาวได้อย่างแน่นอนได้อย่างง่ายดายแม้เมื่อมีขนาดใหญ่พอสมควรเพียงแค่คำนวณพลังงานเมทริกซ์และเพิ่มรายการที่สอดคล้องกับการยอมรับสถานะ0kiAk[0,i]Aijijkk

สิ่งเดียวกันทำงานเพื่อยอมรับคำที่มีความยาวไม่เกินโดยมีเมทริกซ์ต่างกันเล็กน้อย เพิ่มแถวและคอลัมน์พิเศษของเมทริกซ์โดยที่มีหนึ่งในเซลล์ที่อยู่ในแถวและคอลัมน์หนึ่งแถวในแถวใหม่และคอลัมน์ของสถานะเริ่มต้นและศูนย์ในเซลล์อื่น ๆ ทั้งหมด ผลของการเปลี่ยนแปลงกับเมทริกซ์นี้คือการเพิ่มพา ธ ไปยังสถานะเริ่มต้นที่แต่ละพาวเวอร์k

สิ่งนี้ใช้ไม่ได้กับ NFA ฉันสงสัยว่าสิ่งที่ดีที่สุดที่ต้องทำคือเพียงแปลงเป็น DFA แล้วใช้อัลกอริทึมเปิดเครื่องเมทริกซ์


2
คำตอบที่สมบูรณ์แบบ: ชัดเจนเมื่อคุณอ่าน
ชาร์ลส์

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

17

ให้เป็นระบบอัตโนมัติแบบ จำกัด (nondeterministic) ด้วยสถานะเริ่มต้น ,และQA=(Q={q1,,qn},Σ,δ,QF)q1QFQδQ×Σ×Q

ให้ฟังก์ชั่นการสร้างสำหรับทุกคำที่สามารถยอมรับได้เริ่มต้นในนั่นคือสัมประสิทธิ์ที่ของการขยายตัวของซีรีส์.Qi(z)qin[zn]Qi=|{w|w|=nw accepted from qi}|

เห็นได้ชัดว่า:

Qi(z)=[qiQF]+(qi,a,qj)δxQj(z)

แก้ระบบสมการที่เกิดขึ้น (เชิงเส้น) สำหรับ (โดยใช้ Mathematica หรือเครื่องมือที่คล้ายกัน) จากนั้นคือปริมาณที่ต้องการQ1[zn]Q1

นี่กลับไปเป็นเทคนิคที่แนะนำสำหรับไวยากรณ์โดย Chomsky และSchützenberger (1963); มันถ่ายโอนไปยังออโต จำกัด ได้อย่างง่ายดาย

แก้ไข:หากคุณต้องการบัญชีสำหรับ -transitions เพียงแค่ปล่อยแฟคเตอร์ในผลรวมสำหรับการเปลี่ยนที่สอดคล้องกัน Similiarly ถ้าคุณได้ "บีบอัด" ขอบเช่นแทนสัญลักษณ์คำในการเปลี่ยนแปลงแทนที่กับ kεxaΣwΣkxxk


ฉันขอขอบคุณบันทึกประวัติศาสตร์!
Charles

1
เอ้อนี่เป็นวิธีที่ใช้งานได้ดีจริงๆ (และเรียบง่ายเมื่อคุณเข้าใจ) ในหลาย ๆ สถานการณ์ ตัวอย่างเช่นคุณสามารถทำ CFG ได้ในวิธีเดียวกัน
กราฟิลส์

1
ฉันเข้าใจแล้วฉันเข้าใจผิด ในกรณีนี้ถ้าคุณต้องการอ่านเรื่องนี้ฉันแนะนำKuich (1970)ซึ่งฉันพบว่าสามารถเข้าถึงได้มากกว่างานของ C&S เขายังกล่าวถึงเรื่องนี้ในหนังสือของเขาที่ฉันจำไม่ได้
กราฟิลส์

1
คุณกำลังบอกว่าคุณสามารถนับคำที่มีความยาวในภาษาปกติในเวลาพหุนามและไม่สร้าง DFA ได้หรือไม่? ถามเกี่ยวกับความซับซ้อนของสิ่งนี้ใน MO: mathoverflow.net/questions/162186/…n
joro

1
@joro ในกรณีของไวยากรณ์ที่ไม่คลุมเครือฉันคิดว่านี่เป็นเรื่องจริงใช่
กราฟิลส์

7

ฉันคิดว่านี่เป็นปัญหาการนับที่ยากดูที่เอกสารนี้: การนับขนาดของลำดับปกติของความยาวที่กำหนดคือ # P-complete: S. Kannan, Z. Sweedyk และ SR Mahaney การนับและการสร้างสตริงแบบสุ่มในภาษาปกติ ใน ACM-SIAM Symposium บนอัลกอริธึมแบบไม่ต่อเนื่อง (SODA), หน้า 551–557, 1995


1
โพสต์ข้างต้นจะถือว่าความยาวที่กำหนดนั้นเป็นเอกภาพ หากความยาวอยู่ในรูปของเลขฐานสองแทนปัญหาคือ PSPACE-hard ฉันบอกว่าสิ่งนี้ขึ้นอยู่กับการพิสูจน์ว่าการตัดสินใจที่เทียบเท่าของสองนิพจน์ปกติคือ PSPACE-hard ในการลดลงนั้นหนึ่ง reg-ex ถูกสร้างขึ้นเพื่อยอมรับสตริงทั้งหมดและอีกอันหนึ่งเพื่อยอมรับสตริงทั้งหมดที่ไม่ถูกต้องปฏิเสธประวัติการคำนวณของเครื่อง PSPACE M บนอินพุต w การใช้นิพจน์ทั่วไปที่สองนั้นและความยาวของประวัติการคำนวณของ M เมื่อ w เป็นอินพุตของปัญหาที่เป็นปัญหาทำให้ปัญหาอื่น ๆ ของ PSPACE นั้นยากเช่นกัน
Mikhail Rudoy

3

ต่อไปนี้: CMTVพิจารณาความซับซ้อนของคลาสซึ่ง (โดยทั่วไป แต่ในการตั้งค่าทั่วไป) ระดับของฟังก์ชั่นการนับจำนวนการยอมรับการคำนวณของหุ่นยนต์ จำกัด nondeterministic บนอินพุตคำของ ความยาวที่แน่นอน ผลมากเป็นที่รู้จักกันในขณะนี้เกี่ยวกับเรื่องนี้รวมถึงการบรรจุระดับความซับซ้อนใน logspace กำหนดขึ้นเป็นผลมาจากCDL ขอให้สังเกตว่ามีการแก้ไขอัตโนมัติในการตั้งค่านี้และคำอินพุตเป็นอินพุตเท่านั้น#NC1

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