Tôi xin lỗi trước vì tôi đã đưa ra quá nhiều chi tiết, nhưng tôi sắp mâu thuẫn với mọi người.
Giới thiệu về K ( x ) ≤ K ′ ( x ) + cK(x)≤K′(x)+c
Thực tế là K 1 ( x ) ≤ K 2 ( x ) + c thường xuất phát từ một thông dịch của ngôn ngữ mô tả # 2 vào ngôn ngữ mô tả # 1 và không từ một bản dịch từ các chương trình của # 2 vào các chương trình của # 1.K1(x)≤K2(x)+c
Ví dụ K C ( x ) ≤ K P y t h o n ( x ) + c p y 2 c và bạn sẽ có được sự bất bình đẳng này một cách đơn giản như thế này:KC(x)≤KPython(x)+cpy2c
void py_run(char * s) {
// code of your Python interpreter
}
int main(void) {
py_run("Put here your Python program of size Kpython(x)");
}
Sau đó, hằng số c p y 2 c của bạn sẽ giống như 528 + 490240688 trong đó 528 là số bit cho mã này và 490240688 bit là kích thước trình thông dịch Python chính thức được viết bằng C. Tất nhiên bạn chỉ cần diễn giải những gì có thể có trong ngôn ngữ mô tả của bạn cho Python để bạn có thể làm tốt hơn 69 MB :-)cpy2c528+490240688528490240688
Điều quan trọng là bạn có thể viết chương trình Python của bạn một cách tuyến tính trong mã C của bạn. Ví dụ, một ngôn ngữ mà bạn cần đặt "BANANA" giữa mỗi ký tự không phải là một chương trình mô tả rất tốt và thuộc tính đó là sai. (Nhưng nếu ngôn ngữ mô tả cho phép bạn ghi dữ liệu trong một tệp riêng hoặc trong một khối, thì vấn đề này sẽ biến mất)
Tại sao K 1 ( x ) = q của bạn bị thiếu sótK1(x)=q
Vấn đề với định nghĩa của bạn về K 1 là bạn có thể cần nhiều hơn q bit để mô tả máy Turing có trạng thái q vì bạn cần mã hóa chuyển tiếp.K1qq
Vì vậy, không có K 1 và K 2 có thể không tương đương, nhưng đó chủ yếu là lỗi của K 1 . Tôi nghĩ rằng chúng ta có thể chứng minh rằng đối với tất cả một > 0 có một c một ví dụ rằng K 1 ( x ) ≤ một | x | + c a . Tất nhiên bất kỳ một < 1 là đủ để bác bỏ sự thật rằng K 1 không phải là một chức năng hợp lệ, vì nó có nghĩa là chúng ta có thể mã hóa tất cả hơn 2 n có thể chuỗi có độ dàiK1K2K1a>0caK1(x)≤a|x|+caa<1K12nn thành một n + c một bit.nan+ca
Nhưng kích thước là một ràng buộc vô cùng chặt chẽ khi xây dựng máy Turing. Ý tưởng là trong một khối các trạng thái b có b 2 b cách tìm chuyển đổi cho mỗi trạng thái và điều đó tốt hơn so với cách 2 b thông thường mà bạn có thể điền vào b bit. Sau đó, bạn có thể lưu trữ trong mỗi khối log 2 b bit thông tin. (không phải 2 log 2 b vì bạn phải vào và ra khối này bằng cách này hay cách khác)bb2b2bblog2b
Vì vậy, yeah ... Với khối kích thước 2 1 / một bạn có thể có thể chứng minh K 1 ( x ) ≤ một | x | + c a . Nhưng tôi đã viết quá nhiều về lý do tại sao số lượng trạng thái không phải là hàm phức tạp Kolmogorov hợp lệ. Nếu bạn muốn tôi giải thích, tôi sẽ.
Bây giờ về K 2
Các tương ứng với ngôn ngữ mô tả ngây thơ xấp xỉ để K 2 ( x ) = q ⋅ 2 ⋅ ( log 2 q + 2 ) (ví dụ: đăng nhập 2 q cho mỗi tiểu bang kế tiếp và chi tiết về ghi và chấm dứt).
Như bạn có vẻ như vậy, tôi tin rằng một cách tốt hơn / gian lận hơn là ủy quyền để mã hóa "dữ liệu" vào máy Turing, có thể bằng cách thêm một thẻ nhị phân trong ngôn ngữ mô tả cho biết liệu trạng thái có phải là trạng thái dữ liệu hay không ( chỉ cần viết một chút và chuyển sang trạng thái tiếp theo) hoặc nếu nó làm điều gì khác. Bằng cách đó, bạn có thể lưu trữ một bit x của mình bằng một bit ngôn ngữ mô tả của bạn.
Tuy nhiên nếu bạn tiếp tục cùng K 2 bạn có thể sử dụng kỹ thuật tương tự tôi đã sử dụng trong phần trước để tiết kiệm một vài bit, nhưng tôi dường như bị mắc kẹt tại K 2 ( x ) ≤ một | x | đăng nhập | x | + c (với bất kỳ a > 0 ) .. có thể ít hơn log | x | , thậm chí, nhưng thu được O ( | x | ) có vẻ khó. (Và tôi hy vọng nó phải là | x | , thậm chí không phải O ( |x | ) .)