Các thuật toán mạnh mẽ quá phức tạp để thực hiện


67

Một số thuật toán của tiện ích hợp pháp đơn giản là quá phức tạp để thực hiện là gì?

Hãy để tôi rõ ràng: Tôi không tìm kiếm các thuật toán như thuật toán nhân ma trận tối ưu tiệm cận hiện tại (Coppersmith-Winograd), rất hợp lý để thực hiện nhưng có một hằng số khiến nó trở nên vô dụng trong thực tế. Tôi đang tìm kiếm các thuật toán có thể có giá trị thực tế, nhưng rất khó để viết mã mà chúng chưa bao giờ được thực hiện, chỉ được thực hiện trong các cài đặt cực kỳ nhân tạo hoặc chỉ được thực hiện cho các ứng dụng đặc biệt đáng chú ý.

Cũng được hoan nghênh là các thuật toán gần như không thể thực hiện có triệu chứng tốt nhưng có khả năng có hiệu suất thực tế kém.


1
làm CW này, vì nó có thể là một danh sách dài.
Suresh Venkat

4
Có một số liệu cho 'gần như không thể thực hiện' không? Có lý thuyết định nghĩa nó?
Ritwik Bose

@Mechko, có lẽ giới hạn dưới về kích thước của máy Turing nhỏ nhất đưa ra mô tả về máy Turing là triển khai thuật toán. :)
Radu GRIGore

@Radu GRIGore đây là một số liệu được chấp nhận hay một số liệu phải được phát triển? Tôi cho rằng (hiện tại) có một dòng đơn giản, bất động định nghĩa 'meh, không đáng' ...: D
Ritwik Bose

4
Tôi quan tâm đến đề xuất rằng Coppersmith-Winograd là hợp lý để thực hiện. Có ai từng thấy một triển khai được viết ra ngay cả ở mã giả cấp cao và có ai đã từng ước tính các hằng số chưa?
Raphael

Câu trả lời:


33

Chazelle đã đưa ra một thuật toán thời gian tuyến tính để tam giác một đa giác đơn giản . Skiena đã viết (tr.575, Hướng dẫn thiết kế thuật toán) rằng "thật vô vọng khi thực hiện rằng nó đủ điều kiện hơn như một bằng chứng tồn tại"


3
Liệu thuật toán có hằng số hợp lý?
jbapple

Đây có phải là thuật toán thời gian tuyến tính duy nhất được biết cho vấn đề?
Thomas Ahle

2
@ThomasAhle Tôi tin rằng đây là thuật toán thời gian tuyến tính xác định duy nhất được biết đến. Amato, Goodrich, và Ramos có một đơn giản ngẫu nhiên một: cs.princeton.edu/courses/archive/fall05/cos528/handouts/...
Sasho Nikolov

Theo hiểu biết của tôi, thuật toán tam giác đa giác đơn giản theo thời gian tuyến tính của Chazelle chưa bao giờ được thực hiện và có khả năng sẽ không bao giờ vì nó phức tạp và cũng vì các hằng số cao nên nó sẽ không thể cạnh tranh với các lựa chọn thay thế trong thực tế. Thành tựu lý thuyết chính mặc dù. Ralph Boland
Ralph Boland

Tôi sẽ hỏi lại: Thuật toán có hằng số hợp lý không?
1271772

29

Các thuật toán Risch để tính nguyên hàm tiểu học. Theo Wikipedia, không có gói phần mềm nào được biết là thực hiện thuật toán đầy đủ do tính phức tạp của nó.


3
Wikipedia cũng chỉ ra rằng đây không phải là một thuật toán mà là một thuật toán bán vì nó đòi hỏi các phương pháp phỏng đoán để giải bài toán không đổi.
sclv

Heuristic là gì? Bạn có thể cho một số liên kết để đọc thêm về nó?
zygimantus

22

Bất kỳ thuật toán nào sử dụng kết quả Robertson-Seymour để suy ra thuật toán "đa thời gian" cho những thứ liên quan đến đồ thị loại trừ một lỗi nhỏ cố định sẽ yêu cầu sự cố. Hằng số ẩn trong kết quả của họ là "thiên hà".


3
Điều này cũng khó thực hiện hay chỉ có một hằng số rất lớn?
Lev Reyzin

5
Vâng, đây không giống như một ví dụ tốt. Nếu tôi hiểu chính xác, câu hỏi là về các thuật toán có thể thực tế (do đó có thể là các hằng số 'nhỏ') nhưng quá phức tạp để thực hiện. Tất nhiên, toàn bộ câu hỏi được mở cho các cách hiểu khác nhau :-)
Aryabhata

5
Vấn đề là hằng số xuất phát từ danh sách rất lớn những người vị thành niên mà người ta cần loại trừ cho một tài sản cụ thể. Tôi không biết cách nào để tạo danh sách các vị thành niên bị loại trừ mong muốn cho một tài sản nhất định, vì vậy đó không chỉ là vấn đề quy mô.
Suresh Venkat

2
Chẳng hạn, chúng ta thậm chí không biết danh sách các vị thành niên bị loại trừ cho các biểu đồ có thể nhúng trong hình xuyến.
Derrick Stolee

17
Vấn đề ở đây có vẻ sâu hơn: không cách nào hiệu quả để tạo danh sách các vị thành niên, vì vậy điều này thực sự không mang lại một thuật toán nào cả. Hầu hết các thuộc tính đóng nhỏ mang lại một danh sách vô hạn các vị thành niên bị loại trừ, nếu người ta dịch trực tiếp biểu thức logic. Định lý Robertson-Seymour (Phỏng đoán của Wagner) cho chúng ta biết rằng một danh sách hữu hạn của những trẻ vị thành niên bị loại trừ đang ẩn giấu trong danh sách vô hạn đó, nhưng định lý hoàn toàn không giúp ích gì trong việc tìm ra chúng. Vì vậy, Robertson-Seymour thường dẫn đến một bằng chứng tồn tại thuần túy.
András Salamon

16

O(n)O(log2nB)B

Bài viết dài 55 trang và kết luận của nó ghi nhận một số cải tiến cho các hằng số mà tác giả không mô tả vì lý do không gian. Điều này khiến tôi nghi ngờ rằng có lẽ các hằng số không quá thiên hà và cấu trúc dữ liệu này sẽ là "tiện ích hợp pháp", đặc biệt là vì nó đã được trích dẫn nhiều lần.


12

Thuật toán hợp nhất mẫu bậc cao theo thời gian tuyến tính của Qian chưa bao giờ được thực hiện do tính phức tạp của AFAIK.


May mắn thay, có những thuật toán thực tế cho nó vẫn còn. Cuốn cẩm nang về lý luận tự động nói rằng nó có thể được thực hiện trong nhiều thời gian (ngay bên cạnh nơi nó trích dẫn thuật toán của Qian) vì vậy điều đó thật tuyệt vời.
Jake

11

Thuật toán thời gian tuyến tính để kiểm tra xem đồ thị có thể được nhúng trong một bề mặt cố định hay không.

Ken-ichi Kawarabayashi, Bojan Mohar, Bruce A. Reed: Thuật toán thời gian tuyến tính đơn giản hơn để nhúng đồ thị vào một bề mặt tùy ý và chi của đồ thị có chiều rộng của cây. FOCS 2008: 771-780.

Bojan Mohar: Thuật toán thời gian tuyến tính để nhúng đồ thị trong một bề mặt tùy ý. SIAM J. Toán rời rạc. 12 (1): 6-26 (1999)


1
Điều này dường như không có giá trị thực tế ngay cả khi được thực hiện, do sự phụ thuộc theo cấp số nhân (sic) lớn vào chi.
Jeffε

8

Tôi không chắc nó có ích như thế nào trong thực tế (mặc dù tôi đang nghĩ về việc gấp và so sánh protein, cũng như dự đoán cấu trúc thứ cấp của RNA), nhưng Wolfgang Haken đã đưa ra thuật toán đa thức thời gian đầu tiên để quyết định xem một nút có phải là một nút không vòng lặp đơn giản ( Theorie der Normalflächen. Acta Math. 105, 1961, trang 245--375). Như tôi nhớ lại, nó vẫn còn quá phức tạp để thực hiện tất cả những thập kỷ sau đó.

Nếu Wikipedia được tin tưởng, một số thuật toán khác sau đó đã được đưa ra và "Hiểu được sự phức tạp của các thuật toán này là một lĩnh vực nghiên cứu tích cực."


4
Haken đã đưa ra thuật toán đầu tiên, nhưng nó không chạy trong thời gian đa thức; trong thực tế, không có thuật toán đa thời gian (hoặc kết quả độ cứng NP) được biết đến. Công việc gần đây đã giảm tầm thường của nút (thông qua công thức bề mặt thông thường của Haken) sang lập trình số nguyên, thường nhanh chóng giải quyết trong thực tế.
Jeffε

3

Cây phân hủy , và có lẽ là đống Fibonacci .


14
Các đống Fibonacci chắc chắn không quá phức tạp để thực hiện; họ đã được thực hiện, và thử nghiệm. Vấn đề với họ là hiệu suất thực tế của họ không tốt như một số đống khác do các yếu tố liên tục lớn trong thời gian hoạt động của họ.
David Eppstein

1
Tôi đã viết một gói để tìm phân rã cây và tôi không nghĩ rằng thật khó để thực hiện yaroslavvb.blogspot.com/2011/01/building-jeft-trees.html
Yaroslav Bulatov

2
Mã của tôi chỉ là một phân rã cây heuristic, không tối ưu như các phương pháp lập trình động và liên kết theo nhánh và ... Tôi đoán bạn có nghĩa là "Thuật toán thời gian tuyến tính ..." của Bodlaender? Tôi chưa thấy bất kỳ sự triển khai nào về điều đó
Yaroslav Bulatov

4
2O(k3)O(n)

3
Tôi nghĩ rằng đây là nỗ lực triển khai tốt nhất: hein.roehrig.name/dipl
Diego de Estrada

1

Cấu trúc băm hoàn hảo ( https://en.wikipedia.org/wiki/Perinf_hash_feft#Con Construction ) sẽ áp dụng cho mọi trường hợp sử dụng với các khóa thay đổi tĩnh hoặc không thường xuyên (ví dụ: tên miền cấp cao nhất trên bộ định tuyến, từ khóa trong trình biên dịch hoặc tên hàm trong các thư viện chuẩn) nhưng lần cuối cùng tôi nhìn tôi không thể tìm thấy bất kỳ triển khai nào.

Tìm kiếm tham số có thể giải quyết nhiều vấn đề tối ưu hóa khó khăn, bao gồm một số vấn đề có thể trông giống như NP-hard, trong thời gian đa thức. Tìm kiếm tham số giấy được đặt tên tốt đã thực hiện thực tế một biến thể của tìm kiếm tham số, nhưng tôi vẫn không nghĩ rằng nó đã được thực hiện trong phần mềm thực tế.

knO(nlogn+k)O((n+k)logn)


1
Tôi từ chối tin rằng việc xây dựng FKS quá phức tạp để thực hiện. Nó thực sự khá đơn giản. Có thể không thực tế, nhưng chắc chắn không quá phức tạp để thực hiện.
Sasho Nikolov
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.