Tại sao hầu hết (hoặc tất cả?) Thuật toán thời gian đa thức thực tế?


7

Tôi đã đọc một bình luận thú vị trong một bài báo gần đây về việc toán học hữu ích kỳ lạ như thế nào. Nó đề cập đến việc thời gian đa thức không có nghĩa là hiệu quả trong thực tế (ví dụ: là thời gian đa thức, nhưng không hiệu quả). Tuy nhiên, đó không phải là trường hợp mà tất cả các thuật toán trong thời gian đa thức cũng xảy ra là thực tế, giống như nhiều nhất là hay gì đó? Tôi đoán câu hỏi của tôi là:O(n999999999999999999999)O(n4)

  1. Điều này có đáng ngạc nhiên không?

  2. Có bất kỳ ví dụ về các thuật toán là thời gian đa thức nhưng không thực tế?


Bài viết này là một ví dụ cho câu hỏi 2. (Xem đoạn ngay dưới Định lý 1.1.)

3
Chào mừng đến với CS.SE! Vì vậy, bạn biết trong tương lai, chúng tôi thường muốn bạn hỏi một câu hỏi cho mỗi bài đăng; trang web của chúng tôi hoạt động tốt hơn theo cách đó. Dù sao, bạn có thể muốn xem cs.stackexchange.com/q/13202/755 , cs.stackexchange.com/q/3523/755 , cs.stackexchange.com/q/45296/755 , cs.stackexchange. com / q / 210/755 , cs.stackexchange.com/q/3523/755 , cs.stackexchange.com/q/10472/755 , cs.stackexchange.com/q/38219/755 , rjlipton.wordpress.com/ 2010/10/23 / thuật toán thiên hà
DW

Một số ví dụ khác là một số thuật toán cho lập trình tuyến tính; một số thuật toán nhân ma trận; một số thuật toán lưu lượng mạng ; và nhiều hơn nữa . (Câu hỏi cho các thành viên cộng đồng: đây có phải là câu hỏi của một trong những câu hỏi khác trong CS.SE không?)
DW

Không phải là một bản sao, mặc dù, @DW?
Raphael

1
Hãy giới hạn bản thân trong một câu hỏi. Xem như có rất nhiều bản sao, thứ hai là lỗi thời; Tôi sẽ xóa nó ở đó không có nhiều câu trả lời. Câu hỏi đầu tiên đòi hỏi ý kiến, không thực tế, vì vậy tôi dám khẳng định nó sẽ tự đóng. Tôi sẽ để cộng đồng quyết định: câu hỏi nào được ưu tiên? Đây có phải là một bản sao?
Raphael

Câu trả lời:


9

Nhận xét là sai. Rất dễ dàng để đưa ra các ví dụ về thuật toán thời gian đa thức mà không thực tế chút nào:

  1. Thuật toán ellipsoid để giải các chương trình tuyến tính chạy trong thời gian đa thức nhưng quá chậm để không thực tế. Thuật toán đơn giản, có thời gian chạy trường hợp xấu nhất là theo cấp số nhân, được ưa thích trong thực tế.

  2. Thuật toán kiểm tra tính nguyên thủy của AKS chạy trong thời gian đa thức nhưng quá chậm để không thực tế. Thay vào đó, các thuật toán thời gian đa thức ngẫu nhiên được sử dụng. Chúng tôi hy sinh sự chắc chắn cho hiệu suất.

  3. Các thuật toán nhân ma trận nhanh chạy nhanh bất thường so với nhân ma trận trung học (cả hai đều là đa thức), nhưng quá chậm để không thực tế. Thuật toán trung học được sử dụng trong thực tế.

  4. Một vấn đề tương tự xảy ra trong các thuật toán nhân số nguyên nhanh. Thuật toán có độ phức tạp tiệm cận tốt nhất, thuật toán của Fürer, quá chậm để sử dụng trong thực tế. Thay vào đó, các thuật toán tương đối đơn giản được sử dụng ngay cả đối với các số nguyên khá lớn.

  5. Các thuật toán dữ liệu lớn cần phải chạy trong thời gian tuyến tính (đó là ) để thực tế.O(nlogO(1)n)

Những ví dụ này cho thấy việc xác định thời gian đa thức với thực tế là không chính xác và có thể phụ thuộc vào hoàn cảnh. Các nhà nghiên cứu trong các thuật toán lý thuyết cảm thấy cần phải biện minh cho lĩnh vực nghiên cứu của họ, và vì vậy họ tin vào ý thức hệ về tình cảm được thể hiện trong nhận xét mà bạn đề cập. Bạn không nên nhận xét như vậy theo nghĩa đen.

Trên thực tế, nhiều thuật toán được sử dụng trong thực tế là heuristic và chúng tôi không có bất kỳ ước tính nào về thời gian chạy của chúng ngoài kết quả thực nghiệm. Thuật toán như vậy hoàn toàn không phù hợp với khung lý thuyết, nhưng thực tế có rất hữu ích. Một số (nhưng không phải tất cả) thuật toán học máy thuộc về lớp này chỉ về thời gian chạy (không đề cập đến hiệu suất ), cũng như các thuật toán tìm kiếm như A * và alpha-beta và thuật toán giải SAT.


1
Thuật toán nhân này cải thiện không có triệu chứng trên Fürer.

6

Câu hỏi (1) là một câu hỏi khó mà tôi chưa bao giờ thấy một lý do chính đáng nào. Một gợi ý có thể là chúng ta có nhiều khả năng hiểu và tìm ra câu trả lời cho các vấn đề đơn giản hơn, những người khó hơn có các kỹ năng đặc biệt, vì vậy khả năng người phù hợp làm việc với nó và đưa ra câu trả lời là thấp. Đây là tất cả rất vẫy tay mặc dù.

Đối với (2) chắc chắn có những ví dụ, trên thực tế, câu hỏi này đã được hỏi và trả lời! Cũng lưu ý rằng có một chuỗi các liên kết đến một câu hỏi cstheory.se và một câu hỏi math.se trong đó có các ví dụ khác.


4

Tôi đã thấy lời giải thích sau đây liên quan đến câu hỏi của bạn (1):

Quyền hạn của trong thời gian chạy thường phát sinh từ cho vòng lặp hoặc cấu trúc tương tự. Mỗi cho vòng lặp lần lượt là cần thiết, bởi vì chúng ta, như những người giải quyết, có một ý tưởng làm thế nào để phá vỡ các vấn đề hoặc chỉ qua một cái gì đó hữu ích. Vì chúng ta thường chỉ sử dụng một số lượng nhỏ ý tưởng, nên sức mạnh có xu hướng nhỏ. Thật khó để tưởng tượng một thuật toán với 20 lồng cho vòng, nơi bên trong cuối cùng cho vòng lặp chúng tôi thực sự làm điều gì đó mà phụ thuộc vào tất cả 20 chỉ số.n

Lập luận này là hấp dẫn đối với tôi, nhưng nó là khá yếu bởi vì nó chỉ thỏa thuận với cho vòng lặp. Chẳng hạn, người ta có thể dễ dàng tạo ra bất kỳ số lượng lồng nào cho các vòng lặp với đệ quy, nhưng sau đó người ta có thể tìm thấy những lý do chính đáng để chống lại việc xây dựng kỳ quái như vậy. Trong mọi trường hợp, tôi nghĩ rằng lập luận này có thể được củng cố bằng một phân tích về rất nhiều trường hợp khác nhau, nhưng tôi chỉ trình bày ý tưởng cấp cao.

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.