Có thuật toán nào khác mà thời gian chạy trong trường hợp xấu nhất là theo cấp số nhân trong khi nó hoạt động rất tốt trong thực tế ngoài Thuật toán Simplex không?


9

Chúng tôi thường gọi một thuật toán là "thuật toán tốt" nếu thời gian chạy của nó là đa thức trong trường hợp xấu nhất. Nhưng trong một số trường hợp (ví dụ thuật toán Simplex), mặc dù trường hợp xấu nhất của thuật toán là theo cấp số nhân, nó có thể hoạt động rất tốt trong thực tế.

Có bất kỳ ví dụ (xác định) nào cho tình huống này ngoài thuật toán Simplex không?


1
Bạn có thể quan tâm đến một câu hỏi liên quan: cstheory.stackexchange.com/questions/305/ mẹo
Radu GRIGore

Câu trả lời:


13

Các thuật toán giải SAT hiện đại có thể giải quyết hầu hết các trường hợp khá nhanh, mặc dù thời gian chạy trường hợp xấu nhất dĩ nhiên là theo cấp số nhân. Tuy nhiên, trong trường hợp này, tốc độ thực tế là kết quả của nhiều năm kỹ thuật thuật toán, hơn là một thuật toán tao nhã duy nhất. Mặc dù tôi đã hiểu rằng việc học theo mệnh đề do xung đột gây ra bước nhảy lớn trong hiệu suất của bộ giải SAT, nhưng những cải tiến sau này thường đạt được bằng cách sử dụng thông minh các phương pháp phỏng đoán khác nhau trong các thuật toán.


13

Các -means thuật toán cho clustering được provably mũ thậm chí trong mặt phẳng, nhưng nó hoạt động rất tốt trong thực tế.k


13

Suy luận kiểu Hindley-Milner là hoàn thành EXPTIME, nhưng trên các chương trình mọi người thường viết nó khá gần với tuyến tính.


1
Đây không phải là một chút khác nhau mặc dù? Hồi ức của tôi là chúng ta có thể mô tả một điều kiện cần thiết để Hindley-Milner hoạt động kém (cho phép lồng nhau sâu sắc) và vì vậy, lý do của HM là tốt trong thực tế là việc làm tổ này, trong thực tế, bị ràng buộc khá thấp (thường là chúng ta thụt vào nhiều hơn khi chúng ta đi sâu hơn để cho các ràng buộc và trở nên lo lắng khi chúng ta tiến về phía rìa ngoài cùng bên phải của màn hình ...) Được cấp, tôi đã đưa ra yêu cầu này từ bộ nhớ trước đây và gần đây tôi không thể khôi phục tham chiếu cho nó.
Rob Simmons

2
Không, đó không phải là điều kiện cần thiết. Bạn có thể đưa ra một chuỗi các liên kết cho phép (không có lồng nhau!) Để nó bình phương kích thước của loại được suy ra với mỗi mục nhập bổ sung trong chuỗi. Xem cstheory.stackexchange.com/questions/2428/ Khăn để biết ví dụ.
Neel Krishnaswami

Ví dụ là trong SML và tôi quen thuộc hơn với cách làm của OCaml, nhưng nếu chuỗi ràng buộc đó là "hãy", thì tôi nghĩ chúng sẽ được lồng vào nhau. Chỉ bởi vì họ định nghĩa các hàm toàn cầu mà chúng không phải, nhưng có một sự lồng ghép ngầm đang diễn ra ở đây: Một định nghĩa nhất định có quyền truy cập vào tất cả các định nghĩa ở trên và không có định nghĩa nào dưới đây.
amnn

1
@amnn: Việc lồng được gọi là lồng cho phép ở dạng bị ràng buộc - tức let z = (let y = e in e') in e''là trái ngược với hơn let y = e in let z = e' in e''.
Neel Krishnaswami

9

Chương trình nauty của Brendan McKay (Không tự động, Có?) Giải quyết vấn đề ghi nhãn chính tắc của đồ thị (giải quyết đồng thời các vấn đề về Đồng phân biểu đồ và Tự động hóa đồ thị) và có hiệu suất trường hợp xấu nhất theo cấp số nhân (Miyazaki, 1996). Tuy nhiên, nó hoạt động rất nhanh đối với hầu hết các biểu đồ, đặc biệt là những biểu đồ có một vài biến dạng.

Cụ thể, thuật toán bắt đầu bằng cách phân vùng các đỉnh theo độ, sau đó theo độ giữa mỗi phần. Khi quá trình này ổn định, một lựa chọn phải được thực hiện để phân biệt một đỉnh trong một phần không tầm thường, và điều này dẫn đến hành vi theo cấp số nhân. Trong hầu hết các đồ thị, độ sâu của thủ tục phân nhánh này là nhỏ.


Tôi nghĩ rằng nauty cũng sử dụng một số ngẫu nhiên để giúp sàng lọc? Trong trường hợp đó, điều này có thể rất giống với thuật toán đơn giản (mặc dù rõ ràng không có khái niệm phân tích trơn tru cho đẳng cấu đồ thị).
Joshua Grochow

1
Nó không sử dụng tính ngẫu nhiên, vì nó cần phải tạo nhãn chính tắc phù hợp. Tuy nhiên, nó có thể sử dụng thủ tục bất biến đỉnh được xây dựng tùy chỉnh để giúp phân vùng các đỉnh. Đôi khi, bất biến này trông ngẫu nhiên khi nó được tạo ra (thường là chức năng phức tạp trên các chuỗi mức độ khoảng cách), nhưng đó chỉ là để giảm va chạm.
Derrick Stolee

1
Bất biến đỉnh này có thể được so sánh với các quy tắc chống chu kỳ của thuật toán đơn giản.
Derrick Stolee

4

Một số thuật toán cho các trò chơi ngẫu nhiên đơn giản hoạt động tốt trong thực tế, mặc dù chúng có thời gian chạy trường hợp xấu nhất theo cấp số nhân. Tất nhiên, vấn đề này trong một số ý nghĩa liên quan đến lập trình tuyến tính, mặc dù nó không được biết là trong thời gian đa thức.


1

Có một thuật toán để tìm các cân bằng Nash hỗn hợp tương tự như thuật toán đơn giản cho LP. (Tôi quên tên.) Nó có độ phức tạp trong trường hợp xấu nhất theo cấp số nhân, nhưng tôi có một trí nhớ mơ hồ rằng nó thường cư xử tốt trong thực tế.


Ý bạn là thuật toán Lemke-Howson?
Rahul Savani

1

Đóng gói thùng (nhiều biến thể) là một vấn đề có độ phức tạp được gọi là NP-hard:

http://en.wikipedia.org/wiki/Bin_packing_propet

Tuy nhiên, nhiều heuristic khi áp dụng cho các phiên bản "thực tế" làm rất tốt. Đối với thùng 1 chiều đóng gói một số các heuristic này, như phù hợp đầu tiên; giảm phù hợp đầu tiên; phù hợp nhất; giảm phù hợp nhất là rất hấp dẫn như các chủ đề để hiển thị sinh viên. Học sinh thường có thể khám phá một số heuristic cơ bản cho mình.


Có rất nhiều ví dụ cho dù vấn đề là NP-đầy đủ, các thuật toán đơn giản có thể giải quyết nó. Đặc biệt với các thuật toán gần đúng. Nhưng tôi thực sự đang tìm kiếm các thuật toán theo thời gian theo cấp số nhân, ví dụ của bạn có liên quan đến một vấn đề khó giải quyết dễ dàng với các thuật toán đơn giản. Có thể có một thuật toán thời gian theo cấp số nhân để giải quyết chính xác việc đóng gói Bin (hoặc một vấn đề khác); và trong thực tế cần có thời gian đa thức.
Arman

0

Thuật toán bền bỉ (nguồn gốc từ Edelsbrunner-Letscher-Zomorodian, với rất nhiều biến thể kể từ đó) là trường hợp xấu nhất, nhưng dường như từ thử nghiệm thường chạy trong thời gian tuyến tính.

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.