Với sự quan tâm đến câu hỏi này, tôi nghĩ có thể hữu ích khi chỉ ra rõ ràng hơn lý do chúng ta không nên ngạc nhiên với câu trả lời và cố gắng đưa ra một số hướng để sàng lọc câu hỏi. Điều này thu thập và mở rộng trên một số ý kiến. Tôi xin lỗi nếu điều này là "hiển nhiên"!
Hãy xem xét tập hợp các chuỗi có độ phức tạp Kolmogorov :
Có nhiều nhất chuỗi như vậy, vì có mô tả về độ dài . Nhưng lưu ý rằng bộ này là không thể áp dụng được cho chung (nếu không, chúng ta có thể tính chỉ bằng cách lặp từ đến và kiểm tra tư cách thành viên trong ). Hơn nữa, hàm
phát triển nhanh không thể chối cãi. Nó là một biến thể của hàm busy-beaver: sản lượng dài nhất của Máy Turing có chiều dài mô tảJ K ( n ) = { w : K ( w ) = n } .n
JK(n)={w:K(w)=n}.
2n2nnnK(w)n=1|w|JK(n)gK(n)=maxw∈JK(n)|w|
n? Nếu điều này phát triển chậm hơn một số chức năng tính toán, chúng ta có thể quyết định vấn đề tạm dừng: Đưa ra TM , xây dựng mô phỏng và in ở mỗi bước. Nếu độ dài mô tả của là , thì: dừng lại ở nhiều nhất bước; hoặc không dừng lại.
MM′M1M′nMgK(n)M
Bây giờ, với câu hỏi của Andrew, chúng ta có , trong đó là ngôn ngữ gốc. Vì vậy, cách duy nhất để tránh chứa các đầu vào rất lớn trong sẽ là nếu chỉ chứa các chuỗi rất không nén được. (Lưu ý rằng, nếu không, chúng ta hoàn toàn có thể bỏ qua sự phân biệt giữa phân tích trường hợp xấu nhất và trường hợp trung bình ở đây, bởi vì chúng ta trung bình trên nhiều nhất là chuỗi nhưng kích thước của chuỗi lớn nhất đang tăng nhanh hơn bất kỳ hàm tính toán nào của . )IK(n)=S∩JK(n)SIK(n)nS2nn
Tôi cảm thấy rằng có khả năng không thể xây dựng bất kỳ không cần thiết (tức là vô hạn) chỉ chứa các chuỗi không nén được, nhưng vẫn có thể quyết định được. Nhưng tôi không biết. Tuy nhiên, hy vọng điều này mang lại trực giác về lý do tại sao chúng ta không nên hy vọng hầu hết các ngôn ngữ sẽ có phát triển chậm hơn chức năng tính toán.SfKn
Để lùi lại một chút, câu hỏi là so sánh hiệu suất trên các đầu vào có độ dài với hiệu suất trên các đầu vào có thể được nén với chiều dài . Nhưng chúng ta có các khái niệm về nén có thể dễ điều khiển hơn (và ít mạnh hơn) so với Độ phức tạp Kolmogorov. Một cách đơn giản là đưa ra một mạch có kích thước , trên đầu vào số nhị phân tạo ra bit thứ của . Lưu ý rằng ở đây, blowup trong kích thước đầu vào nhiều nhất là theo cấp số nhân (một mạch có kích thước có nhiều nhất là đầu vào có thể).nnnbbwn2n
Vì vậy, chúng ta có thể viết lại câu hỏi bằng cách để
Và xác định tương tự. Lý do cho hy vọng ở đây là hầu hết các chuỗi yêu cầu một mạch lớn gần bằng chính chuỗi đó và không có chuỗi nào lớn hơn theo cấp số nhân so với mạch yêu cầu. Có lẽ trong trường hợp này, chúng ta có thể tìm thấy các ngôn ngữ trong đó và tương tự nhau không có triệu chứng.
IC(n)={w∈S:the smallest circuit implicitly specifying w has size n}.
fCnfnfCn
Một câu hỏi khá liên quan là sự phức tạp của các ngôn ngữ ngầm như
IMPLICIT_SAT là NEXP-Complete và thông thường phiên bản ngầm của các vấn đề hoàn thành NP là NEXP-Complete. Quyết định IMPLICIT_SAT ít nhất là dễ dàng như chỉ cần sử dụng mạch để viết ra tất cả , sau đó chạy một thuật toán cho SAT trên . Vì vậy, nếu cho SAT, thì điều này dường như gần với việc đưa ra bằng chứng rằng IMPLICIT_SAT trong trường hợp trung bình gần như có thể quyết định nhanh như SAT trong trường hợp xấu nhất. Nhưng tôi không biết người ta sẽ so sánh trực tiếp khái niệm của bạn với các ngôn ngữ ngầm như thế nào bởi vì khái niệm "mạch nhỏ nhất chow w f C n = Θ ( f n ) w
IMPLICIT_SAT={circuits C:C implicitly specifies w,w∈SAT}.
wwfCn=Θ(fn)w"Không đi vào chơi cho các ngôn ngữ ngầm.
Hy vọng điều này là hữu ích / thú vị!
Tôi không chắc chắn về một cuốn sách giáo khoa có đề cập đến các vấn đề tiềm ẩn, nhưng đây là một số ghi chú bài giảng: http://people.seas.harvard.edu/~salil/cs221/spring10/lec8.pdf