Thuật toán xác định đơn giản và thực tế, thời gian chạy phức tạp


18

Rất thường xuyên, nếu thời gian chạy của một thuật toán là một biểu thức phức tạp, bản thân thuật toán cũng phức tạp và không thực tế. Mỗi gốc khối và các yếu tố trong thời gian chạy tiệm cận có xu hướng tăng thêm độ phức tạp cho thuật toán và cũng ẩn các yếu tố không đổi trong thời gian chạy.loglogn

Chúng ta có những ví dụ nổi bật trong đó quy tắc này không?

Tất nhiên rất dễ tìm thấy các ví dụ về các thuật toán rất khó thực hiện mặc dù chúng có thời gian chạy trường hợp xấu nhất rất đơn giản. Nhưng những gì về converse?

Chúng ta có các ví dụ về các thuật toán xác định rất đơn giản và thực tế , dễ thực hiện nhưng tình cờ có một biểu thức rất phức tạp như thời gian chạy tiệm cận tồi tệ nhất của nó không?

Xin lưu ý các từ khóa "xác định" và "trường hợp xấu nhất"; việc phân tích các thuật toán ngẫu nhiên đơn giản khá dễ dẫn đến các biểu thức phức tạp.

Tất nhiên những gì "phức tạp" là một vấn đề của hương vị. Dù sao, tôi muốn thấy một biểu thức quá xấu để đặt tiêu đề của bài báo của bạn. Và tôi thích một hàm phức tạp của một tham số tự nhiên (kích thước đầu vào, số lượng nút, v.v.).


Tái bút Tôi nghĩ rằng tôi sẽ không biến đây thành một "câu hỏi lớn", và không phải CW. Tôi muốn tìm một ví dụ tuyệt vời duy nhất (nếu nó tồn tại). Do đó, vui lòng chỉ đăng một câu trả lời khác nếu bạn nghĩ rằng nó "tốt" hơn bất kỳ câu trả lời nào cho đến nay.


2
Thuật toán kiểm tra tính nguyên thủy của AKS có đủ điều kiện để trả lời không? Tôi đang do dự bởi vì "sự phức tạp" của thời gian hoạt động của nó, theo một cách nào đó, là kết quả của sự giả tạo trong việc phân phối các số nguyên tố ...
arnab

Cảm giác của tôi là trường hợp xấu nhất là trong hầu hết các trường hợp, thứ gì đó gây ra "chạy qua mọi thứ" và mọi thứ là thứ chúng ta đo thời gian chạy. Vì vậy, một cách tự nhiên, các thuật toán dễ dàng có thời gian chạy WC dễ dàng. Thời gian chạy phức tạp xuất hiện nếu chúng ta cố gắng cạo sạch một chút nhỏ bằng một số mẹo. Nhưng câu hỏi của bạn rất thú vị; Tôi chắc chắn tò mò muốn xem cảm giác của tôi là đúng.
Raphael

@arnab: Cảm ơn, AKS là một ý kiến ​​hay. Nhưng tôi không chắc chúng ta có thể gọi nó là "thực tế" không?
Jukka Suomela

Các sơ đồ truyền thông điệp như lan truyền khảo sát, lan truyền ràng buộc hoặc TRW tuần tự được tính là "thuật toán"? Dễ thực hiện, thời gian chạy rất khó dự đoán
Yaroslav Bulatov

Rất tiếc, tôi luôn thích phương pháp rho của Pollard, nó đơn giản và thực tế, và việc phân tích thực sự khó khăn, nhưng tính ngẫu nhiên của thuật toán khiến nó không đủ điều kiện làm câu trả lời cho bài đăng ...
Hsien-Chih Chang 張顯 之

Câu trả lời:


20

Ví dụ tốt nhất tôi có thể nghĩ đến là một thuật toán (được mô tả bên dưới) để tính -level theo cách sắp xếp n dòng trong mặt phẳng, tức là đường đa giác được hình thành bởi các điểm có chính xác k đường thẳng đứng phía trên nó. Đây không phải là thuật toán hiệu quả nhất được biết cho vấn đề. Có các thuật toán hiệu quả hơn với độ phức tạp đơn giản hơn, nhưng tôi tin rằng thuật toán này thực tế hơn hầu hết (nếu không phải là tất cả). Phân tích có lẽ không chặt chẽ, bởi vì nó sử dụng độ phức tạp k -level, đây là một vấn đề mở nổi tiếng (tôi nghĩ tất cả các thuật ngữ khác trong phân tích đều chặt chẽ). Mặc dù vậy, tôi nghi ngờ giới hạn được cải thiện cho k -level sẽ làm cho thời gian chạy đơn giản hơn nhiều. Tôi sẽ giả sử k =knkkk để viết độ phức tạp như là một hàm của n một mình.k=n/2n

Thuật toán dựa trên mô hình quét dòng và sử dụng hai giải đấu động học -ary làm hàng đợi ưu tiên động học. Việc chèn và xóa được thực hiện khi một dòng vượt lên trên hoặc dưới k -level, di chuyển một dòng từ giải đấu động này sang giải đấu khác. Do đó, có O ( n 4 / 3 ) chèn và xóa bỏ (sử dụng ràng buộc cho Dey của k phức tạp -level). Mỗi sự kiện được xử lý trong O ( log n ) thời gian và có O ( n 4 / 3 α ( n(logn)kO(n4/3)kO(logn) sự kiện (các α ( n ) xuất phát từ sự phức tạp của phong bì trên các thỏa thuận của đoạn thẳng, trong khi log n / log log n đến từ chiều cao của một ( log n ) cây -ary ). Tổng thời gian chạy làO(n4/3α(n)logn/loglogn)α(n)logn/loglogn(logn)

O(n4/3α(n)log2n/loglogn).

Vui lòng kiểm tra bản thảo của Timothy Chan http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz để biết thêm chi tiết và tham khảo. Các yếu tố có thể được loại bỏ bằng cách sử dụng một số nhị phân (intead của ( log n ) -ary) giải động học, nhưng nó thực sự tăng tốc hàng đợi ưu tiên động trong các bài kiểm tra mà tôi thực hiện. Sự phức tạp sẽ trở nên xấu hơn và tồi tệ hơn một chút (trong khi thuật toán vẫn sẽ thực tế) nếu một đống động học được sử dụng thay vì một giải đấu động học (một bản ghi bên trong một căn bậc hai sẽ xuất hiện).1/loglogn(logn)log


Ví dụ tuyệt vời, cảm ơn! Điều này sẽ không dễ dàng để đánh bại. :)
Jukka Suomela

1
Thuật toán này thực tế chậm hơn so với các thuật toán ngẫu nhiên, khá dễ thực hiện (vì ai đó đã thực hiện một trong các thuật toán này (xem bài viết của tôi "Đi bộ trong một sắp xếp phẳng".)
Sariel Har-Peled

Tôi đã chấp nhận câu trả lời này vì nó dường như gần nhất với những gì tôi đã nghĩ. Nhưng nếu bất cứ ai có bất kỳ ý tưởng mới, tôi sẽ rất vui khi nghe!
Jukka Suomela

24

Các hoạt động cấu trúc dữ liệu tìm liên kết dường như đáp ứng các tiêu chí của bạn:

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
Thật vậy, tôi đã đăng câu trả lời tương tự nhưng đã xóa nó sau khi tôi nhận thấy bạn đánh tôi với nó. :) Thuật toán đơn giản và thanh lịch mà một người không theo lý thuyết thậm chí có thể khám phá, nhưng độ phức tạp được khấu hao của Ackermann.
Warren Schudy

Vâng, thời gian không nhìn thấy "phức tạp" nếu bạn so sánh nó với O ( n 4 / 3 α ( n ) log 2 n / log log n ) trong câu trả lời của Guilherme. :)O(α(n))O(n4/3α(n)log2n/loglogn)
Jukka Suomela

Tỷ lệ độ dài thuật toán so với độ phức tạp chứng minh cho liên kết tìm kiếm có lẽ là không thể đánh bại - cả ba thao tác là gì, chín dòng mã?
Neel Krishnaswami

1
Tôi không nghĩ câu hỏi là về một thuật toán đơn giản và thực tế với phân tích phức tạp . Tôi nghĩ rằng câu hỏi là về một thuật toán đơn giản và thực tế với thời gian chạy phức tạp , đó là biểu thức thực tế thu được cho giới hạn trên.
Guilherme D. da Fonseca

6

Thuật toán đơn giản. Dễ dàng thực hiện và làm việc tuyệt vời trong thực tế nhưng là một mớ hỗn độn để phân tích về mặt lý thuyết.


n

Trên thực tế, Simplex được biết là mất thời gian theo cấp số nhân trong trường hợp xấu nhất thông qua việc xây dựng Klee-Minty. Tôi nghĩ không phải vậy, một ví dụ về những gì Jukka đang hỏi về
Suresh Venkat

1
Có lẽ tôi nên nói phương thức đơn giản hơn là thuật toán đơn giản. Khối lập phương Klee-Minty và các biến thể của nó hoạt động cho một số quy tắc xoay vòng vanilla. Nhưng, ví dụ, quy tắc xoay vòng ngẫu nhiên có một giới hạn trên và (gần đây) điên rồ. Gil Kalai đã có một mục blog tốt đẹp về kết quả gần đây. gilkalai.wordpress.com/2010/11/09/iêu
Mohit Singh

điểm tốt, Mohit. Tôi cũng bối rối.
Suresh Venkat

2

Tôi không chắc nếu bạn xem đây là "thực tế" nhưng nó là một vấn đề mở nổi tiếng. Paul Erdos đã nói về phỏng đoán của Collatz: Toán học chưa sẵn sàng cho những vấn đề như vậy

x=1


Và vấn đề được giải quyết bằng thuật toán này là gì ...?
Jukka Suomela

Nó gợi ý tìm kiếm các kỹ thuật phân tích thời gian chạy mới lạ.
Mohammad Al-Turkistany

2
sau đó bạn có thể nói rằng một cuộc tìm kiếm vũ phu cho một bằng chứng về phỏng đoán Collatz cũng thúc đẩy "các kỹ thuật phân tích thời gian chạy mới lạ"; trong cả hai trường hợp, thuật toán chỉ đơn giản là khám phá một sơ đồ. Giả thuyết Collatz rất thú vị, nhưng tôi không nghĩ đây là một ví dụ thú vị về "một thuật toán".
Niel de Beaudrap

2

Ví dụ này, trong khi không đáp ứng thư yêu cầu của bạn có thể được quan tâm vì nó mang một số mối quan hệ tâm linh. Cụ thể, câu hỏi sắp xếp các ngăn xếp của bánh kếp và bánh kếp bị cháy bằng cách đảo ngược.

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

Một lĩnh vực của ứng dụng là sinh học tính toán (di truyền học) trong đó các câu hỏi về sắp xếp lại bộ gen có thể được đặt ra theo khoảng cách giữa các hoán vị bằng cách sử dụng sự đảo ngược của các hoán vị theo các quy tắc khác nhau.

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.