ช่องว่างขนาดใหญ่ระหว่าง RAM และความซับซ้อนของเครื่องทัวริง


9

หากเราพิจารณาเฉพาะปัญหาใน P จะมีช่องว่างขนาดใหญ่ระหว่างอัลกอริธึม word-RAM ที่รู้จักกันเร็วที่สุดและอัลกอริทึมเครื่องทัวริงที่รู้จักกันเร็วที่สุดสำหรับปัญหาเฉพาะหรือไม่ ฉันสนใจเป็นพิเศษหากมีช่องว่างที่กว้างสำหรับปัญหาทางธรรมชาติที่น่าสนใจทั่วไป


6
เครื่องแรมสามารถจำลองโดยเครื่องทัวริงที่มีค่าใช้จ่าย O(nlogn)ในรันไทม์ ดังนั้นจะไม่มีช่องว่างขนาดใหญ่จริงๆ
Shaull

@Shaull มีช่องว่างขนาดนั้นสำหรับปัญหาตามธรรมชาติ / เป็นที่นิยมหรือไม่?
Lembik

3
Palindrome ใช้เวลา Ω(n2) เวลาบน TM เทปเดี่ยว (และเป็น O(n)ใน RAM) eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdf
SamM

6
ความคิดเห็นของ Shaull นั้นเป็นจริงสำหรับเครื่อง nondeterministic และในการตั้งค่า TM แบบสองเทปเท่าที่ฉันรู้ การอ้างอิง, Shaull?
Ryan Williams

1
@ qbt937 - ว้าวเสียงระเบิดดังมาจากในอดีต :) ฉันเชื่อว่าฉันไม่ได้ให้การอ้างอิงเพราะฉันไม่ได้มีหนึ่ง (และฉันไม่มีมัน) และมันอาจเป็นไปได้ว่า Ryan Williams นั้นถูกต้อง
Shaull

คำตอบ:


6

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


2
RAM สามารถคำนวณความยาวของอินพุต (และยังเป็นปาร์ตี้ของความยาวนั้น) ในเวลาลอการิทึม แต่ทัวริงเครื่องพื้นฐานจำเป็นต้องใช้เวลาเชิงเส้นเพื่อคำนวณความเท่าเทียมกันนั้น

1

ตัวอย่างด้านล่างพิสูจน์ว่าอัลกอริทึม A ที่ต้องใช้ O(nlog(n)) เพื่อแก้ปัญหาเกี่ยวกับ word-Ram อาจจำเป็นต้องใช้ O(n2log(n)3)บนเครื่องทัวริง 1 เทป (TM) ที่ประมวลผลการคำนวณทั้งหมดที่ระบุอย่างแม่นยำA. ฉันเข้าใจว่าคำถามเกี่ยวข้องกับ 1-tape TM และฉันใช้เฉพาะสิ่งนี้ในการตอบกลับของฉัน นี่คือการแก้ไขเพื่อแก้ไขข้อสังเกตของ Emil Jeřábek

เราจะพบว่าตามข้อสรุปทั่วไปมากขึ้น เพื่อพิสูจน์ว่า TM สามารถแก้ไขได้O(T(n)2) แก้ไขปัญหาได้แล้ว O(T(n)) โดยอัลกอริทึม Aบน RAM มันทำงานไม่เพียงพอAบน TM ฉลาดขั้นตอนวิธีการอาจจะต้อง เช่นเดียวกันถ้ามีใครต้องการพิสูจน์O(nlog(n))เหนือศีรษะ การพิสูจน์การมีอยู่ของอัลกอริทึมที่ฉลาดเมื่อใดก็ตามที่ต้องการนั้นดูเหมือนจะห่างไกลจากคนพูดจริง สิ่งนี้ไม่สอดคล้องกับคำตอบอื่น ๆ ที่โดยทั่วไปเสนอให้จำลอง / ดำเนินการกับการคำนวณ TM all RAM เท่านั้น (ของอัลกอริทึมA) เพื่อประกาศความซับซ้อนเช่น TM O(T(n)2) หรือ O(T(n)nlog(n)).

ปัญหา:เราได้รับอาร์เรย์ / ตารางtab กับ n=2k จำนวนเต็มแต่ละอันเก็บไว้ log(n)เกร็ด เราจะได้รับอาร์เรย์ที่สองd กับ log(n) ตำแหน่งแต่ละคนบันทึกจำนวน log(n)เกร็ด สำหรับคนใดt[0..log(n)1]เรากำหนด Xt=1 ถ้า tab[i] กห d[t]=tab[n/2+i] กห d[t] i[0..n/21]. มิฉะนั้น,Xt=0. เอาท์พุตt=0log(n)1Xt. ฉันพิจารณาอินพุตจะได้รับเป็นเทปด้วยnlog(n)+log(n)log(n) เลขฐานสองเพื่อแสดงความคิดเห็นของ Emil Jeřábek

ขั้นตอนวิธี Aบน RAM RAM ขนาดเท่าคำw=log(n) จำเป็น O(nlog(n)+log(n)2) = O(nlog(n))เพื่ออ่านข้อมูลอินพุตสตริงของไบนารี แต่หลังจากอ่านข้อมูลมันสามารถทำงานได้กับคำพูดของเท่านั้นlog(n)ขนาด. ขั้นตอนวิธีA คำนวณใด ๆ Xt ใน O(n) โดยจะผ่านทั้งหมด i[0..n/21]และทดสอบสภาพ ห่วงหลักของAเป็นสำหรับt=0,1,2,log(n)1: คำนวณ Xt. ความซับซ้อนโดยรวมคือO(nlog(n)) (กำลังอ่านข้อมูล) + O(nlog(n)) (ทำการคำนวณ) ดังนั้น A สามารถทำได้ทุกอย่างค่ะ O(nlog(n)) บน RAM

ขั้นตอนวิธี Aบน 1-tape TM:ฉันเถียงถึงความต้องการหนึ่งเทป TMO(n2log(n)2) เวลาสำหรับการแก้ไข t. จากมุมมองของ TM การพิจารณาAt เทียบเท่ากับการทดสอบความเท่าเทียมกันของความยาวสองสตริงไบนารี่ O(nlog(n)). ตัวอย่างเช่นการดำเนินการ MODtab[i] กห d[t] อาจเทียบเท่ากับการลบบิต 0 ของ tab[i]. ในกรณีดังกล่าวให้พิจารณาAt เทียบเท่ากับการทดสอบความเท่าเทียมกันในสตริงบิตที่มีความยาว n(log(n)1)/2. มันเป็นที่รู้จักกันดีว่าการทดสอบความเท่าเทียมกันของความยาวสองสายm ต้องใช้ O(m2)บน 1-TM TM แต่ฉันไม่สามารถหาข้อมูลอ้างอิงได้ในขณะนี้ อย่างไรก็ตามฉันให้หลักฐานใน ps หาก TM ดำเนินการลูปหลักของAมันต้องใช้จ่ายอย่างน้อย O((nlogn)2) แต่ละ t=0,1,2,log(n)1จบลงด้วย O(n2log(n)3).


PS ฉันแสดงให้เห็นว่าการทดสอบความเท่าเทียมกันในสตริงบิตด้วยmบิตต้องไม่เร็วกว่าการทดสอบด้วย Palyndrome กับสตริงด้วยm บิต (palyndrome เป็นที่รู้กันว่าใช้เวลาอย่างน้อย O(m2)เวลา). เราสามารถปรับเปลี่ยนอัลกอริทึม TM สำหรับการทดสอบความเท่าเทียมกันเพื่อแก้ปัญหา Palindrome สมมติว่าการทดสอบความเท่าเทียมกัน TM เริ่มต้นด้วยเลขจำนวนเต็มสองค่าคือหนึ่งที่ด้านซ้ายของหัวหนึ่งที่อยู่ทางขวา (นี่คือรูปแบบอินพุตที่ง่ายที่สุดสำหรับ TM) การเคลื่อนที่ข้ามตำแหน่งด้านซ้ายสามารถทำมิรเรอร์ (สะท้อน) เหนือตำแหน่งด้านขวา เราสร้าง mirrored TM: เมื่อใดก็ตามที่ TM เริ่มต้นอยู่ในตำแหน่งx<0 (ทางซ้าย) TM ที่มิร์เรอร์อยู่ในตำแหน่ง x (on the right). If a TM solved equality testing in less than O(m2), this modified mirrored TM would solve palindrome in less than O(m2).

Also, there are some equality-testing TM algorithms out there and all of them require quadratic time because they need some zigzagging, see for instance the Turing Machine Example 2 at courses.cs.washington.edu/courses/cse431/14sp/scribes/lec3.pdf


ขอบเขตล่างสำหรับ palindromes เก็บไว้สำหรับรุ่นเทปเดี่ยวที่ไม่เป็นธรรมชาติ มันเป็นเรื่องง่ายที่จะทดสอบความเท่าเทียมกันของสองสายบน TM ในเวลาเชิงเส้น เช่นเดียวกันถือเพื่อความเท่าเทียมกันของสองลำดับของรายการที่ยาวขึ้น ยิ่งไปกว่านั้นเพื่อให้คำถามมีเหตุผลใด ๆ อินพุตสำหรับเครื่องทั้งสองรุ่นจะต้องเหมือนกันกล่าวคือเขียนเป็นสตริงเหนือตัวอักษรที่ จำกัด ดังนั้น RAM ของคุณจะต้องใช้เวลา O (บันทึก n) เพื่ออ่านแต่ละรายการและแปลงเป็นคำเพื่อให้การดำเนินการนี้ไม่มีจุดหมาย
Emil Jeřábek

@Emil Jeřábek, I will edit my reply to indicate that I only think about the 1-tape TM. When you say a TM can test equality in linear time, I suppose you think to a 2-tape TM. However, I understood that the whole question is about 1-tape TMs. Regarding the input form, I must confess you might be right, at least for some word-RAMs. But as far as I know, a C++ int array stores the integers one after the other with no separator, as if they stored together a sequence of bits. 10 ints on 16 bits occupy exactly 160 bits, non? Even if this is not the case, one could build a machine working this way.
Daniel Porumbel

3
โมเดลเครื่องจักรทัวริงมาตรฐานในทฤษฎีความซับซ้อนคือมัลติเทป ฉันไม่เห็นว่า C ++ มีความเกี่ยวข้องใด ๆ ที่นี่เราไม่ได้พูดถึง C ++ แต่เป็นรูปแบบ RAM ในรุ่นนี้ตำแหน่งหน่วยความจำแต่ละแห่งอาจมีความยาวไม่มากนักO(logn), but we can still operate only on one (or O(1)) memory location at a time. In particular, we can only access the input one location at a time: there is no operation that would allow you to do “read logn input locations and splice them together into a single word” in constant time.
Emil Jeřábek

There are two possibilities: (1) Input location [0] contains the first bit of the first number, location [1] contains the second bit of the first number, and so on. Then it needs O(nlogn) time to read on RAM, just like for a Turing machine. Thus, even with single-tape TMs, you only get a quadratic speed-up. (2) Input location [0] contains the first number, location [1] the second number, and so on. Then the problem is meaningless on a TM, as it can’t process input of this form. Thus, you don’t get any speed-up at all, but a problem that is only expressible in one of the machine models.
Emil Jeřábek

@Emil Jeřábek, Following your remarks, I edited the question to propose a problem and a RAM algorithm that explicitly takes O(nlog(n)) to read the data (from a tape). I removed some of my remarks that are no longer relevant. I hope this solves the problem you pointed out.
Daniel Porumbel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.