Phân tích thuật toán trường hợp trung bình bằng phương pháp không nén được Kolmogorov


8

Phương pháp không thể nén được cho là đơn giản hóa việc phân tích các thuật toán cho trường hợp trung bình. Theo những gì tôi hiểu, điều này là do không cần phải tính toán tất cả các kết hợp đầu vào có thể có cho thuật toán đó và sau đó rút ra độ phức tạp trung bình. Thay vào đó, một chuỗi không thể nén được lấy làm đầu vào. Là một chuỗi không thể nén là điển hình, chúng ta có thể giả sử rằng đầu vào này có thể hoạt động như một xấp xỉ chính xác của trường hợp trung bình.

Tôi bị mất liên quan đến việc thực sự áp dụng Phương pháp không thể nén cho một thuật toán. Ở một khía cạnh khác, tôi không phải là một nhà toán học, nhưng nghĩ rằng lý thuyết này có những ứng dụng thực tế trong lập trình hàng ngày.

Cuối cùng, tôi muốn tìm hiểu làm thế nào tôi có thể suy ra trường hợp trung bình của bất kỳ thuật toán nào, dù là tầm thường hay phức tạp. Ai đó có thể vui lòng chứng minh cho tôi cách phương pháp có thể được áp dụng cho một thuật toán đơn giản không? Chẳng hạn, được cung cấp một chuỗi đầu vào S, lưu trữ tất cả các ký tự duy nhất trong S, sau đó in riêng từng ký tự:

void uniqueChars(String s) {
    char[] chars = chars[ s.length() ]
    int free_idx = 0;

    for (int i = 0; i < s.length(); i++) {
       if (! s[i] in chars) {
          chars[free_idx] = s[i]
          free_idx++;
       }
    }

    for (int i = 0; i < chars.length(); i++) {
        print (chars[i])
    }
}

Giả sử tìm kiếm tuyến tính để kiểm tra xem mảng có chứa phần tử hay không.

Đoạn mã trên chỉ nhằm mục đích tranh luận. Các thuật toán tốt hơn mà theo đó lý thuyết có thể được chứng minh là chấp nhận được, tất nhiên.

Tôi đã hỏi câu hỏi này trên StackOverflow ( https://stackoverflow.com/q/24619383/3813812 ) vào tháng 7 năm 2014 và đã nhận được một vài bình luận hữu ích nhưng không phải là một câu trả lời chắc chắn. Như một trong những người bình luận đã chỉ ra, câu hỏi này phù hợp hơn với Khoa học máy tính StackExchange, vì vậy tôi hỏi ở đây hôm nay.

Một số tài liệu mà tôi đã xem xét bao gồm:

  1. Giới thiệu về độ phức tạp Kolmogorov và các ứng dụng của nó, bởi Ming Li và Paul MB Vitányi

  2. https://www.cs.duke.edu/~reif/cifts/complectures/Li/KC-Lecture1.pdf

  3. http://www.detectingdesign.com/PDF%20Files/Kolmogorov%20Complexity%202.pdf

Trong số một số tài nguyên khác mà tôi không có liên kết trên tay.

Nếu sự hiểu biết của tôi về khả năng áp dụng độ phức tạp Kolmogorov là không chính xác hoặc những gì tôi yêu cầu là không thực tế, tôi sẽ đánh giá cao một tuyên bố liên quan đến thực tế.


Nó có thể làm cho một số trường hợp dễ phân tích hơn, nhưng tôi sẽ không nói nó vẫn dễ dàng. Một trong những ví dụ đẹp nhất là chứng minh có vô số số nguyên tố. Áp dụng phương pháp này vào một thuật toán thú vị nhất định có xu hướng đáng giá một bài nghiên cứu từ kinh nghiệm của tôi.
Juho

Câu trả lời:


4

kαk/2αkαkk8αk+klogαk8αk+klog2αk8kkαk256128kk

Θ(n)αk


Cảm ơn vì câu trả lời tuyệt vời đó, Yuval. Tôi đã có ấn tượng sai lầm rằng phương pháp không thể nén có thể đóng vai trò thay thế trực tiếp cho phân tích xác suất. Tôi tin rằng câu trả lời của bạn và nhận xét của Juho rất quan trọng để làm nổi bật rằng nó chỉ có thể đơn giản hóa việc phân tích trong một số trường hợp.
dùng3813812

1

Như một bình luận thêm (nhưng hơi dài hơn một bình luận thực tế) về câu trả lời được chấp nhận:

  1. Độ phức tạp Kolmogorov (hay Độ phức tạp thuật toán ) liên quan đến các mô tả tối ưu về "chuỗi" (theo nghĩa chung của chuỗi là chuỗi ký hiệu )

  2. Một chuỗi là (đủ) không thể nén hoặc (đủ) thuật toán ngẫu nhiên nếu mô tả (thuật toán) của nó (kolmogorov comlplexity K ) không nhỏ hơn kích thước (bằng chữ) của nó . Nói cách khác , mô tả tối ưu của chuỗi, là chính chuỗi đó .

  3. Kết quả chính của lý thuyết là hầu hết các chuỗi là (thuật toán) ngẫu nhiên (hoặc điển hình) (cũng liên quan đến các lĩnh vực khác như Định lý của Goedel, thông qua công việc của Chaitin)

  4. Độ phức tạp Kolmogorov có liên quan đến Entropy xác suất (hoặc Shannon) , trên thực tế Entropy là một giới hạn trên của KC. Và điều này liên quan đến phân tích dựa trên độ phức tạp mô tả với phân tích dựa trên xác suất. Chúng có thể thay đổi lẫn nhau.

  5. Đôi khi có thể dễ dàng hơn để sử dụng phân tích xác suất, sự phức tạp mô tả khác (các quan điểm tương tự cho phép)

Vì vậy, trong ánh sáng ở trên, giả sử một đầu vào ngẫu nhiên theo thuật toán cho một thuật toán, người ta sẽ đưa ra các điều sau:

  1. Đầu vào là điển hình , do đó phân tích mô tả kịch bản trường hợp trung bình (điểm 3 ở trên)
  2. Kích thước đầu vào có liên quan theo cách nhất định với xác suất của nó (điểm 2 ở trên)
  3. Người ta có thể chuyển từ chế độ xem thuật toán sang chế độ xem xác suất (điểm 4 ở trên)
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.