Khoảng cách lớn giữa RAM và độ phức tạp của máy Turing


9

Nếu chúng ta chỉ xem xét các vấn đề trong P, liệu có bất kỳ khoảng cách lớn nào giữa thuật toán RAM-word được biết đến nhanh nhất và thuật toán máy Turing được biết đến nhanh nhất cho các vấn đề cụ thể không? Tôi đặc biệt quan tâm nếu có những khoảng trống rộng cho các vấn đề tự nhiên có lợi ích chung.


6
một máy RAM có thể được mô phỏng bằng máy Turing với chi phí hoạt động O(nlogn) trong thời gian chạy. Vì vậy, sẽ không có khoảng cách thực sự lớn.
Shaull 11/05/2015

@Shaull Có tồn tại một khoảng trống của kích thước đó cho bất kỳ vấn đề tự nhiên / phổ biến nào không?
Lembik

3
Palindrome mất Ω(n2) thời gian trên một TM single-băng (và là O(n) trong RAM). eecs.yorku.ca/cference_archive/2008-09/W/6115/palindrome.pdf
SamM

6
Nhận xét của Shaull chỉ đúng với các máy không xác định và trong cài đặt TM hai băng, theo như tôi biết. Trích dẫn, Shaull?
Ryan Williams

1
@ qbt937 - Wow, thật là một vụ nổ từ quá khứ :) Tôi tin rằng tôi đã không cung cấp một trích dẫn vì tôi không có (bây giờ tôi cũng không có), và có lẽ Ryan Williams đã đúng.
Shaull

Câu trả lời:


6

Được biết, bất kỳ vấn đề nào bạn có thể tính toán trên máy RAM trong thời gian , bạn có thể thực hiện điều đó trong Máy Turing kịp thời nhiều nhất là T ( n ) 2 . Bạn cần lưu ý rằng tổng kích thước của bộ nhớ được sử dụng không thể nhiều hơn T ( n ) , vì điều đó có nghĩa là bạn đã thực hiện nhiều thao tác ghi hơn T ( n ) , vì vậy mỗi lần bạn lấy một thứ gì đó từ bộ nhớ RAM, Turing Máy sẽ mất trong trường hợp xấu nhất T ( n )T(n)T(n)2T(n)T(n)T(n)thời gian để tìm các yếu tố mong muốn tuần tự từ băng. Bên cạnh việc truy cập bộ nhớ, các hoạt động còn lại sẽ diễn ra cùng một lúc. Và do đó bạn có được ràng buộc.


2
RAM có thể tính toán độ dài của đầu vào (và do đó cũng là bên của độ dài đó) theo thời gian logarit, nhưng Máy Turing cơ bản cần thời gian tuyến tính để tính tương đương.

1

Ví dụ dưới đây chứng minh rằng thuật toán lấy O ( n log ( n ) ) để giải quyết vấn đề trên word-Ram có thể cần O ( n 2 log ( n ) 3 ) trên Máy Turing 1 băng (TM) thực thi chính xác tất cả các tính toán chỉ ra bởi Một . Tôi hiểu câu hỏi liên quan đến TM 1 băng và tôi chỉ sử dụng câu hỏi này trong câu trả lời của mình. Đây là một chỉnh sửa để giải quyết các nhận xét của Emil Jeřábek.AO(nlog(n))O(n2log(n)3)A

Chúng tôi sẽ tìm thấy kết luận chung hơn sau đây . Để chứng minh rằng TM có thể giải quyết trong một vấn đề được giải quyết trong O ( T ( n ) ) bằng thuật toán A trên RAM, nó không đủ chạy A trên TM. Một thuật toán thông minh có thể cần thiết. Áp dụng tương tự nếu người ta muốn chứng minh một O ( n log ( n ) )O(T(n)2)O(T(n))AAO(nlog(n))trên không. Chứng minh sự tồn tại của một thuật toán thông minh bất cứ khi nào cần thiết dường như xa ngay lập tức, để nói rằng ít nhất. Điều này không phù hợp với các phản hồi khác mà về cơ bản chỉ đề xuất mô phỏng / thực thi trên TM tất cả các tính toán RAM (của thuật toán ) để thông báo độ phức tạp TM như O ( T ( n ) 2 ) hoặc O ( T ( n ) n log ( n ) ) .AO(T(n)2)O(T(n)nlog(n))

Vấn đề: Chúng tôi được cung cấp một mảng / bảng với số nguyên n = 2 k mỗi số được lưu trên các bit log ( n ) . Chúng ta được cung cấp một mảng thứ hai d với các vị trí log ( n ) , mỗi vị trí ghi một số bit log ( n ) . Với mọi t [ 0 .. log ( n ) - 1 ] , chúng tôi xác định X t = 1 nếu tab [ i ]tabn=2klog(n)dlog(n)log(n)t[0..log(n)1]Xt=1tab[i]MOD MOD d [ t ] i [ 0 .. n / 2 - 1 ] . Mặt khác, X t = 0 . Đầu ra log ( n ) - 1 t = 0 X t . Tôi xem xét đầu vào được đưa ra dưới dạng băng có n log ( n ) +d[t]=tab[n/2+i]d[t] i[0..n/21]Xt=0t=0log(n)1Xt chữ số nhị phân, để giải quyết các ý kiến ​​của Emil Jeřábek.nlog(n)+log(n)log(n)

Thuật toán trên RAMA Một RAM có kích thước từ cần O ( n log ( n ) + log ( n ) 2 ) = O ( n log ( n ) ) để đọc dữ liệu đầu vào chuỗi nhị phân. Nhưng sau khi đọc dữ liệu, nó chỉ có thể hoạt động với các từ có kích thước log ( n ) . Thuật toán A tính toán bất kỳ X t nào trong O ( nw=log(n)O(nlog(n)+log(n)2)O(nlog(n))log(n)AXt bằng cách đi qua tất cả i [ 0 .. n / 2 - 1 ] và kiểm tra điều kiện. Vòng lặp chính của ACHO t = 0 , 1 , 2 , ... log ( n ) - 1 : tính toán X t . Tổng độ phức tạp là O ( n log ( n ) ) (đọc dữ liệu) + O ( n log ( n ) )O(n)i[0..n/21]At=0,1,2,log(n)1XtO(nlog(n))O(nlog(n))(thực hiện các phép tính), vì vậy có thể thực hiện tất cả trong O ( n log ( n ) ) trên RAM.AO(nlog(n))

Thuật toán trên TM 1 băng:A Tôi cho rằng TM một băng cần thời gian cho một t cố định . Từ quan điểm của TM, xác định A t tương đương với việc kiểm tra sự bằng nhau của hai chuỗi nhị phân có độ dài O ( n log ( n ) ) . Chẳng hạn, tab thao tác MOD [ i ] MOD d [ t ] có thể tương đương với việc loại bỏ bit 0 của tabO(n2log(n)2)tAtO(nlog(n))tab[i]d[t]0 . Trong các trường hợp như vậy, việc xác định A t tương đương với kiểm tra đẳng thức trên các chuỗi bit có độ dài n ( log ( n ) - 1 ) / 2 . Điều nổi tiếng là việc kiểm tra sự bằng nhau của hai chuỗi có độ dài m yêu cầu O ( m 2 ) trên TM 1 băng, nhưng tôi thực sự không thể tìm thấy tài liệu tham khảo ngay bây giờ. Tuy nhiên, tôi cung cấp một bằng chứng trong ps. Nếu TM thực hiệnvòng lặp chínhcủa A , thì nó phải tiêu tốn ít nhất O ( ( n log ntab[i]Atn(log(n)1)/2mO(m2)A cho mỗi t = 0 , 1 , 2 , ... log ( n ) - 1 , kết thúc trong O ( n 2 log ( n ) 3 ) .O((nlogn)2)t=0,1,2,log(n)1O(n2log(n)3)


ps. Tôi chỉ ra rằng kiểm tra đẳng thức trên các chuỗi bit với bit không thể nhanh hơn kiểm tra hội chứng trên các chuỗi có m bit (hội chứng mờ được biết là mất ít nhất thời gian O ( m 2 ) ). Chúng tôi có thể sửa đổi bất kỳ thuật toán TM nào để kiểm tra đẳng thức để giải quyết palindrom. Giả sử TM kiểm tra đẳng thức bắt đầu bằng hai số nguyên: một ở bên trái của đầu, một ở bên phải (đây là hình thức nhập đơn giản nhất cho TM). Mỗi di chuyển trên các vị trí bên trái có thể được nhân đôi (phản ánh) trên các vị trí bên phải. Chúng tôi xây dựng một TM được nhân đôi: bất cứ khi nào TM ban đầu ở vị trí - x < 0 (bên trái), TM được nhân đôi ở vị trí xmmO(m2)x<0x(Phía bên phải). Nếu một TM giải quyết kiểm tra đẳng thức trong ít hơn , TM nhân đôi được sửa đổi này sẽ giải quyết palindrom trong ít hơn O ( m 2 ) .O(m2)O(m2)

Ngoài ra, có một số thuật toán TM kiểm tra đẳng thức ngoài kia và tất cả chúng đều yêu cầu thời gian bậc hai vì chúng cần một số zigzagging, ví dụ, ví dụ Turing Machine Ví dụ 2 tại khóa học.cs.washington.edu / cferences / cse431 / 14sp / foues / lec3.pdf


Giới hạn dưới của palindromes chỉ giữ cho mô hình băng đơn không tự nhiên. Thật đơn giản để kiểm tra sự bằng nhau của hai chuỗi trên TM trong thời gian tuyến tính. Điều tương tự giữ cho sự bình đẳng của hai chuỗi các mục dài hơn. Ngoài ra, để câu hỏi có ý nghĩa gì cả, các đầu vào cho cả hai kiểu máy phải giống hệt nhau, nghĩa là được viết dưới dạng chuỗi trên một bảng chữ cái hữu hạn. Do đó, RAM của bạn sẽ cần thời gian O (log n) để đọc từng mục và chuyển đổi nó thành một từ, khiến hoạt động này trở nên vô nghĩa.
Emil Jeřábek 27/07/17

@Emil Jeřábek, tôi sẽ chỉnh sửa câu trả lời của mình để cho biết rằng tôi chỉ nghĩ về TM 1 băng. Khi bạn nói một TM có thể kiểm tra sự bằng nhau trong thời gian tuyến tính, tôi cho rằng bạn nghĩ đến một TM 2 băng. Tuy nhiên, tôi hiểu rằng toàn bộ câu hỏi là về 1 băng TM. Về hình thức đầu vào, tôi phải thú nhận rằng bạn có thể đúng, ít nhất là đối với một số RAM từ. Nhưng theo như tôi biết, một mảng int C ++ lưu trữ các số nguyên lần lượt không có dấu phân cách, như thể chúng lưu trữ cùng một chuỗi bit. 10 ints trên 16 bit chiếm chính xác 160 bit, không? Ngay cả khi đây không phải là trường hợp, người ta có thể chế tạo một cỗ máy hoạt động theo cách này.
Daniel porumbel

3
Mô hình máy Turing tiêu chuẩn trong lý thuyết phức tạp là đa băng. Tôi không thấy C ++ có liên quan như thế nào ở đây, chúng tôi không thảo luận về C ++, mà là mô hình RAM. Trong mô hình này, các vị trí bộ nhớ riêng lẻ có thể giữ số lượng độ dài , nhưng chúng ta vẫn chỉ có thể hoạt động trên một (hoặc O ( 1 ) ) vị trí bộ nhớ tại một thời điểm. Cụ thể, chúng tôi chỉ có thể truy cập vào một vị trí đầu vào tại một thời điểm: không có thao tác nào cho phép bạn thực hiện các vị trí nhập nhật ký log n và ghép chúng lại với nhau thành một từ duy nhất trong thời gian không đổi. O(logn)O(1)logn
Emil Jeřábek 27/07/17

Có hai khả năng: (1) Vị trí đầu vào [0] chứa bit đầu tiên của số thứ nhất, vị trí [1] chứa bit thứ hai của số thứ nhất, v.v. Sau đó, nó cần thời gian để đọc trên RAM, giống như đối với máy Turing. Do đó, ngay cả với các TM băng đơn, bạn chỉ có thể tăng tốc bậc hai. (2) Vị trí đầu vào [0] chứa số thứ nhất, vị trí [1] số thứ hai, v.v. Sau đó, vấn đề là vô nghĩa đối với một TM, vì nó không thể xử lý đầu vào của mẫu này. Do đó, bạn hoàn toàn không tăng tốc, nhưng vấn đề chỉ rõ ràng ở một trong các kiểu máy. O(nlogn)
Emil Jeřábek 27/07/17

@Emil Jeřábek, Theo nhận xét của bạn, tôi đã chỉnh sửa câu hỏi để đề xuất một vấn đề và thuật toán RAM rõ ràng lấy để đọc dữ liệu (từ băng). Tôi đã loại bỏ một số nhận xét của tôi không còn phù hợp. Tôi hy vọng điều này giải quyết vấn đề bạn chỉ ra. O(nlog(n))
Daniel porumbel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.