มีเครื่อง "เล็ก" ที่สามารถจับคู่นิพจน์ปกติได้อย่างมีประสิทธิภาพหรือไม่


30

เป็นที่ทราบกันดีว่านิพจน์ทั่วไปสามารถรับรู้ได้โดย nondterministic finite automaton ที่มีขนาดตามสัดส่วนกับ expression ปกติหรือโดย FA ที่กำหนดขึ้นซึ่งอาจมีขนาดใหญ่ขึ้นแทน นอกจากนี้เมื่อพิจารณาจากสตริงและนิพจน์ทั่วไปr NFA สามารถทดสอบการเป็นสมาชิกในสัดส่วนเวลากับ| s | | r | และ DFA สามารถทดสอบการเป็นสมาชิกในเวลาตามสัดส่วนกับ| s |sr|s||r||s|. การชะลอตัวของ NFA เกิดขึ้นจากความจริงที่ว่าเราจำเป็นต้องติดตามชุดของสภาวะที่เป็นไปได้ที่หุ่นยนต์สามารถอยู่ได้ NFA

เป็นไปได้ไหมที่จะมีประสิทธิภาพ (กล่าวคือในเวลาดีกว่าและพื้นที่ที่ดีกว่าO ( 2 | r | ) ) รู้จักการแสดงออกปกติถ้าเราอนุญาตให้ใช้เครื่องจักรที่ทรงพลังกว่าออโต จำกัด (ตัวอย่างเช่นมีความชัดเจนในการรับรู้ภาษาปกติด้วยการกดลงอัตโนมัติหรือเครื่องตอบโต้หรือไม่)O(|r||s|)O(2|r|)


2
เมื่อคุณพูดว่า "NFA สามารถทดสอบการเป็นสมาชิกในเวลาตามสัดส่วนกับ " คุณหมายถึงว่าเครื่อง RAM (กำหนดขึ้น) ที่จำลอง NFA ในแบบที่เห็นได้ชัดต้องใช้เวลานานมาก? หรือมีวิธีอื่นในการกำหนด "เวลาทำงานของ NFA" ที่ไม่ได้อ้างถึงรูปแบบการคำนวณอื่น ๆ ? (นอกเหนือจากคำจำกัดความที่สมเหตุสมผล แต่ไม่มีประโยชน์มากซึ่งระบุว่าการรันไทม์ของ NFA ใด ๆ สำหรับสตริงsคือ| s | .)|s||r|s|s|
Radu GRIGore

ใช่นั่นคือการตีความที่ถูกต้องสำหรับคำถามของฉัน
Neel Krishnaswami

2
จากนั้นฉันก็ดูเหมือนเป็นธรรมชาติมากขึ้นที่จะถามสิ่งนี้: มีอัลกอริทึม (บนเครื่อง RAM) ที่ตัดสินใจว่าสตริงอยู่ในภาษาที่กำหนดโดยนิพจน์ปกติrที่ทำงานในo ( | s || r | )เวลาและพื้นที่o ( 2 | r | ) ? (โดยเฉพาะอย่างยิ่งถ้าคุณกำหนดรันไทม์ของออโตมาตาแบบกดลงในแง่ของเครื่องแรม)sro(|s||r|)o(2|r|)
Radu GRIGore

1
ฉันไม่เข้าใจปัญหาอย่างแน่นอน อินพุตเป็นสตริง s และนิพจน์ทั่วไป r และปัญหาคือการตัดสินใจว่า s อยู่ในภาษาที่กำหนดโดยนิพจน์ทั่วไป r หรือไม่?
Robin Kothari

@ Robin: ใช่นั่นแหละ ฉันต้องการทราบว่าคุณสามารถจับคู่นิพจน์ทั่วไปได้อย่างมีประสิทธิภาพมากกว่าออโต้ จำกัด โดยสามารถใช้กำลังการคำนวณได้มากขึ้นหรือคุณสมบัติพิเศษ (เช่นสแต็กแรม) ไม่ช่วยอะไรเลย
Neel Krishnaswami

คำตอบ:


20

มันง่ายพอที่จะแลกเปลี่ยนเวลาสำหรับพื้นที่ดังต่อไปนี้

rO(rs)O(2r)

kSir/kSiAiSi02r/k1

T[i,j,c,Ai]ijk1cAiSiSjyT[i,j,c,Ai]ySjAiyc

kSiAiSici,jSjAicSjO(k2)O(sk2)

O(k22r/k)

kO(rs)O(r2s)

k


ak

@Neel: หากวิธีการแก้ปัญหาของ David เป็นเครื่องที่ดีที่สุดที่หน่วยความจำสามารถทำได้จากนั้นสแต็คเคาน์เตอร์ ฯลฯ จะไม่ช่วย (แต่แน่นอนว่าเขาให้ขอบเขตสูงกว่าเท่านั้นไม่ จำกัด ขอบเขต)
Radu GRIGore

1
เท่าที่ฉันสามารถบอกได้โซลูชันของฉันใช้ "กำลังเพิ่มเติม": ขึ้นอยู่กับการค้นหาตารางและดัชนีจำนวนเต็มบางอย่างที่ไม่สามารถใช้ได้ในรุ่น DFA หรือ NFA ดังนั้นฉันจึงไม่เข้าใจจริงๆว่ามันไม่ได้ตอบคำถามส่วนนั้นอย่างไร
David Eppstein

wwlgrO(sr2)O(r/w)rwkr/wO(sr2/w2)2w

4

นี่ไม่ใช่คำตอบ แต่นานเกินไปสำหรับความคิดเห็น ฉันพยายามอธิบายว่าทำไมคำถามดังกล่าวอาจเข้าใจยาก

มีสองวิธีที่จะกำหนดความซับซ้อนของคอมพิวเตอร์สำหรับอุปกรณ์ที่มีX

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

O(f(n))f(n)

ตัวอย่างเช่นคำจำกัดความที่แท้จริงสำหรับ NFA บอกว่ามันใช้เวลาnขั้นตอนในการประมวลผลสตริงที่มีความยาวn ; นิยามภายนอกที่ใช้เครื่องแรมเป็นอุปกรณ์Yกล่าวว่าขอบเขตบนที่รู้จักกันดีที่สุดน่าจะเป็นสิ่งที่ David Eppstein ตอบ (มิฉะนั้นมันจะแปลกที่ (1) การดำเนินการในทางปฏิบัติที่ดีที่สุดชี้ไปในคำตอบอื่น ๆ ที่ไม่ได้ใช้ทางเลือกที่ดีและ (2) ไม่มีใครที่นี่ที่ระบุไว้เป็นทางเลือกที่ดีกว่า.) ยังทราบว่าพูดอย่างเคร่งครัดอุปกรณ์ของคุณXคือการแสดงออกปกติ แต่เนื่องจาก NFA มีขนาดเท่ากันจึงปลอดภัยที่จะถือว่าเป็นอุปกรณ์X ที่คุณกำลังดู

Ω(f(n))

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


4

แม้ว่าคุณจะเชื่อว่าไม่มีอะไรใหม่หรือเก่าที่จะได้เรียนรู้เกี่ยวกับการจับคู่การแสดงออกปกติให้ตรวจสอบหนึ่งในเอกสารที่สวยที่สุดที่ฉันเคยเจอมานาน: การเล่นในการแสดงออกปกติโดย S Fischer, F Huch และ T Wilke, ICFP 2010

(MMT Chakravarty สมควรได้รับเครดิตสำหรับการแนะนำบทความนี้)

แก้ไข: เหตุผลที่กระดาษนี้มีความเกี่ยวข้องคือมันอธิบายเทคนิคใหม่ (ขึ้นอยู่กับ Glushkov's จากยุค 60) ที่หลีกเลี่ยงการสร้าง NFA แบบเต็ม (นับ แต่ DFA) ที่สอดคล้องกับ RE สิ่งที่ทำจะคล้ายกับการเรียกใช้อัลกอริธึมการทำเครื่องหมายคล้ายกับที่รู้จักกันดีสำหรับการตัดสินใจยอมรับคำโดย NFA บนโครงสร้างไวยากรณ์ของ RE การวัดประสิทธิภาพแสดงให้เห็นว่าสิ่งนี้สามารถแข่งขันได้แม้จะมีไลบรารี re2 ที่เผยแพร่เมื่อเร็ว ๆ นี้ของ Google


กระดาษที่ดีในการอ่าน !!
Hsien-Chih Chang 張顯之

1

ลองดูที่บทความนี้โดยรัสค็อกซ์ มันอธิบายวิธีการตาม NFA โดยลูกจ้างคนแรกของ Ken Thompson ซึ่งสตริงอินพุตsสามารถจับคู่กับนิพจน์ทั่วไปrในเวลา O (| s |. c ) และ space O (| r |. d ) โดยที่cและdเป็นค่าคงที่ขอบเขตบน บทความนี้ยังมีรายละเอียดการใช้งาน C ของเทคนิค


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