Có một phương pháp để phân tích thời gian chạy tự động của các thuật toán?


10

Tôi tự hỏi, có một phương pháp để phân tích thời gian chạy tự động hoạt động ít nhất trên một tập hợp con các thuật toán có liên quan (thuật toán có thể được phân tích)?

Tôi googled "Phân tích thuật toán tự động" đã cho tôi cái này nhưng nó quá toán. Tôi chỉ muốn một ví dụ đơn giản trong psuedocode mà tôi có thể hiểu. Có thể quá cụ thể, nhưng tôi nghĩ rằng nó đáng để thử.


Tôi không thấy mức độ căng thẳng giữa "bất kỳ" và "một" làm rõ những gì bạn thực sự là sau. Nếu một số thủ tục quyết định bị ràng buộc với một thuật toán B cụ thể, thì không có đầu vào thực sự và câu trả lời luôn luôn giống nhau. Tôi nghĩ điều bạn muốn hỏi là liệu 'bất kỳ thuật toán nào trong một số loại thuật toán' trong đó lớp bị ràng buộc / được biết đến. (chỉnh sửa: điều này cũng đã được chỉ ra nhận xét của mẹ tôi).
Nicholas Mancuso

2
Sự mơ hồ trong việc bạn sử dụng "an" và "any" chính xác là lý do tại sao các bộ lượng hóa được phát minh.
Nate Eldredge

2
Tôi chỉnh sửa câu hỏi để tập trung vào các phần có liên quan. Lưu ý cách tôi sử dụng toán học chính xác bằng 0 để diễn đạt vấn đề một cách chính xác (theo như bạn đã chỉ định câu hỏi của mình cho đến bây giờ) và ngắn gọn. Bây giờ, câu hỏi vẫn chưa được đặt ra: tất nhiên có những thuật toán như vậy. Ví dụ: có một thuật toán đơn giản để phân tích tất cả các thuật toán từ lớp thuật toán (rất phù hợp) chạy trong thời gian . Do đó, rõ ràng bạn cần đặt một số hạn chế cho các bộ đầu vào. (Lưu ý rằng có thể không có "một ví dụ đơn giản trong psuedocode mà tôi có thể hiểu".)Θ(nlogn)
Raphael

Câu trả lời:


12

Công cụ COSTA thực hiện điều này, mặc dù nó thất bại trong nhiều trường hợp, như bạn có thể tưởng tượng, do các vấn đề về tính toán . Có nhiều giấy tờ về điều này; Phân tích chi phí của Mã byte Java của E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini là một điểm khởi đầu tốt.

Cách tiếp cận được thực hiện là suy ra sự tái phát trong thời gian chạy từ mã Javabyte, chuyển đổi nó thành dạng đóng. Công cụ này cũng tính toán giới hạn không gian sử dụng.


8
@Nathvi Tôi có thể hiểu bạn bị kích thích bởi một số ý kiến, điều mà tôi đồng ý là không thực sự cần thiết, nhưng bạn cũng nên cẩn thận không sử dụng thuật ngữ "pedantic drivel" cho công việc của các nhà khoa học rất có uy tín (và tình cờ câu trả lời của tôi). Bạn có quyền không thích toán học, nhưng bạn không có khả năng đi rất xa nếu không có nó, và những lời xúc phạm vô cớ giúp đỡ không ai.
babou

12

Không có thuật toán nào có thể quyết định liệu một thuật toán nhất định có dừng lại hay không, do đó, đặc biệt không có thuật toán nào có thể phân tích chặt chẽ độ phức tạp của một thuật toán nhất định.


2
Câu hỏi của tôi không liên quan đến một thuật toán nhập vào tùy ý, mà nếu nó là, thì câu trả lời của bạn sẽ chính xác, do vấn đề tạm dừng. Bạn sẽ đúng nếu câu hỏi của tôi được diễn đạt: "Có thuật toán A nào sử dụng bất kỳ thuật toán B nào không, và sau đó đưa ra độ phức tạp thời gian của thuật toán B?"
Nathvi

6
Nếu thuật toán B được sửa chữa, thì chắc chắn có thuật toán A. Nó đủ để có một thuật toán không có gì ngoài việc in "O (n)" hoặc bất kỳ phép đo độ phức tạp nào tương ứng với B. Nếu chỉ có một đầu vào khả dĩ cho thuật toán A, sau đó chúng ta chỉ cần một đầu ra.
mhum

5
@Nathvi nó cũng không rõ ràng đối với tôi - Tôi cũng hiểu câu hỏi là "có thuật toán nào để tìm độ phức tạp của bất kỳ thuật toán nào khác không" và tôi vẫn không hiểu câu hỏi thực sự của bạn . Nếu bạn đang đếm upvote, rõ ràng> 2 người giải thích theo cách đó. Trong trường hợp nhầm lẫn, thực sự là một ý tưởng tốt để chỉnh sửa câu hỏi của bạn, nếu không, chỉ những người đọc cuộc hội thoại này (chứ không phải tất cả những người đọc câu hỏi) sẽ hiểu những gì bạn đang hỏi và đưa ra câu trả lời tốt. Có vẻ như bạn cảm thấy phản ứng của DW là thù địch - FWIW, tôi không nghĩ rằng nó được dự định là ..
jkff

6
@ignis Câu trả lời có thể không đầy đủ nhưng câu mà Yuval viết là hoàn toàn chính xác. Và vấn đề tạm dừng không phải là một trường hợp phụ kỳ lạ: đó là bản chất của tính toán.
David Richerby

3
@nikie Điều đó không giúp ích gì cho câu hỏi này; giới hạn thời gian chạy là không thể giải quyết được ngay cả trên tập hợp tất cả các thuật toán luôn luôn kết thúc.
Raphael

9

Tôi biết một cách tiếp cận để phân tích trường hợp trung bình tự động (bán), cụ thể là MaLiJAn . Nó gần giống với loại phân tích mà Knuth sử dụng trong TAoCP. Ý tưởng cốt lõi là

  • mô hình hóa chương trình (dòng chảy) như Chuỗi Markov,
  • huấn luyện xác suất chuyển tiếp của nó cho một số kích thước đầu vào cố định bằng cách đếm một tập hợp các chương trình chạy (mang lại ước tính khả năng tối đa ),n
  • ngoại suy các hàm xác suất trongn
  • sử dụng đại số máy tính để lấy chi phí trung bình (ghi các hàm này).

Lưu ý rằng chỉ các biện pháp chi phí phụ gia (ví dụ so sánh, "thời gian") mới hoạt động và chỉ giá trị mong đợi là chính xác (giả sử các hàm xác suất hoàn hảo), không thể lấy được các khoảnh khắc cao hơn.

Tất cả các bước trừ phép ngoại suy đều nghiêm ngặt [2] và phương pháp đã được chứng minh là tái tạo các kết quả nổi tiếng với độ chính xác cao - tất nhiên là có các đầu vào mẫu ngẫu nhiên phù hợp. Mặc dù không có bằng chứng hoặc thậm chí gần đúng về kết quả (bước ngoại suy là, cho đến nay, hoàn toàn là heuristic), các kết quả thu được với công cụ phục vụ tốt để thử nghiệm các thuật toán khó phân tích và đưa ra các giả thuyết [3,4].


  1. Tiết lộ đầy đủ: Tôi là thành viên của nhóm nghiên cứu này và đã tham gia vào việc phát triển công cụ.
  2. Phân tích khả năng tối đa của các thuật toán và cấu trúc dữ liệu của U. Laube và M. Nebel (2010) [ in sẵn ]
  3. Kỹ thuật Quicksort Pivot kép của Java 7 sử dụng MaLiJAn của S. Wild et al (2012) [ in sẵn ]
  4. Phân tích khả năng tối đa của Phương pháp Fulkerson của Ford trên đồ thị đặc biệt của U. Laube und M. Nebel (2015) [ in sẵn ]

Những kỹ thuật này có đi kèm với ước tính về độ chính xác của phân tích trường hợp trung bình không?
Martin Berger

@MartinBerger Thật không may, không. Chúng tôi có một số ý tưởng về điều đó nhưng không có gì vững chắc chứ chưa nói đến việc thực hiện. Lưu ý rằng thật dễ dàng để đánh lừa bất kỳ phương pháp nào chỉ kiểm tra chính xác nhiều kích cỡ đầu vào, do đó, có rất ít hy vọng nói chung. Với các giả định về các hàm thời gian chạy và / hoặc các tập dữ liệu, có thể có một cái gì đó có thể. Công cụ ít nhất có thể nói "cần thêm dữ liệu".
Raphael

Nó thật thú vị. Tôi hy vọng bạn có được xung quanh làm công việc bổ sung này.
Martin Berger

8

Tất nhiên, như Yuval Filmus đã lưu ý, người ta không nên mong đợi một giải pháp chung cho những vấn đề như vậy. Nhưng như thường lệ, các giải pháp có thể được tìm thấy cho các tập hợp con thú vị của trường hợp chung.

Tôi không phải là chuyên gia, hoặc thậm chí có kiến ​​thức đáng kể trong lĩnh vực này, bởi vì tôi tình cờ biết một số công việc thuộc loại này. Nó liên quan đến phân tích độ phức tạp trung bình tự động, và công việc được thực hiện bởi Philippe Flajolet và các đồng nghiệp của ông.

Từ những gì tôi hiểu khi được giải thích cho tôi, các tác giả đã thiết kế một ngôn ngữ nhỏ (không có gì Turing hoàn thành như bạn mong đợi, nhưng đủ quan trọng) để bất kỳ thuật toán nào được viết trong giới hạn của ngôn ngữ đó có thể tự động phân tích độ phức tạp trung bình. hệ thống được gọi vào thời điểm Lambda-Upsilon-Omega, tức là (tôi không ràng buộc).λυ´ω

Một bài báo tôi tìm thấy trên web là một bài báo năm 1990: Phân tích trường hợp trung bình tự động các thuật toán của Philippe Flajolet, Paul Zimmermann và Bruno Salvy .

Tôi hy vọng rằng các bài báo sau này đã mở rộng công việc này, nhưng tôi không thực sự biết. Công việc được trích dẫn khá nhiều và việc tìm kiếm trên web cho nó sẽ mang lại nhiều công việc gần đây hơn trong cùng một chủ đề.

Bây giờ, tôi sợ rằng công việc của Flajolet và các đồng nghiệp của ông rất toán học, và tôi sẽ không mong đợi việc đọc dễ dàng.

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.