Sự khác biệt giữa độ phức tạp thời gian và độ phức tạp tính toán


14

Để đo độ phức tạp của một thuật toán, đó là độ phức tạp thời gian, hay độ phức tạp tính toán? sự khác biệt giữa chúng là gì?

Tôi đã sử dụng để tính số lượng tối đa (tệ nhất) của hoạt động cơ bản (tốn kém nhất) trong thuật toán.


2
Không phải là một câu trả lời cho câu hỏi của bạn, nhưng với sự quan tâm của bạn về loại điều này, bạn cũng có thể quan tâm đến cs.stackexchange.com/q/13669/755
DW

1
"Độ phức tạp của một thuật toán" khi đề cập đến thời gian chạy không có triệu chứng là một cách hiểu sai (thường được sử dụng). Bạn muốn nói "thời gian chạy tiệm cận".
Raphael

Câu trả lời:


9

Độ phức tạp tính toán chỉ là một thuật ngữ tổng quát hơn, vì thời gian không phải là tài nguyên duy nhất chúng ta có thể muốn xem xét. Rõ ràng nhất tiếp theo là không gian mà thuật toán sử dụng, và do đó chúng ta có thể nói về độ phức tạp không gian , cũng là một phần của độ phức tạp tính toán. Thật vậy, chúng tôi có thể làm điều này cho bất kỳ biện pháp nào bạn quan tâm bạn sử dụng, tất nhiên một số biện pháp hữu ích hơn các biện pháp khác.

Vì vậy, việc đếm số bước mà thuật toán thực hiện trong trường hợp xấu nhất sẽ tạo ra độ phức tạp thời gian bị ràng buộc cho vấn đề mà nó giải quyết, đếm bao nhiêu bộ nhớ / bao nhiêu ô băng mà nó sử dụng mang lại độ phức tạp không gian, v.v.

Cũng cần nhớ rằng nếu bạn muốn nghiêm ngặt, độ phức tạp đề cập đến vấn đề chứ không phải thuật toán, do đó, một vấn đề có giới hạn phức tạp, thuật toán có giới hạn tài nguyên (thời gian chạy, sử dụng không gian ...). Đó chỉ là vấn đề về hình thức xác định, lý thuyết phức tạp liên quan đến các vấn đề. Đúng, thuật toán là một công cụ chính để phân tích các vấn đề và độ phức tạp và thuật toán được liên kết chặt chẽ với nhau, nhưng về mặt chính thức, chúng tôi sẽ không nói Merge-Sort (một thuật toán) là trong , vấn đềP mà là ở P . Hợp nhất-Sắp xếp sử dụng các tài nguyên nhất định ( O ( n log n )SortTôingPÔi(nđăng nhậpn)các bước chẳng hạn). Tài nguyên bị ràng buộc và tính chính xác của thuật toán ngụ ý độ phức tạp (phía trên) bị ràng buộc cho vấn đề, nhưng chúng là những thứ khác nhau. cũng là T C 0 -complete theo A C 0 -reductions, giới hạn phức tạp này chỉ có thể thực sự được nêu cho một vấn đề (nhưng có ý nghĩa thuật toán).SortTôingTC0MộtC0


@shekharsuman Theo vấn đề, ý tôi là khái niệm chính thức của một vấn đề tính toán (ví dụ: k-Vertex Cover), không phải là ý nghĩa chung. Độ phức tạp tính toán là sự phân loại các vấn đề tính toán, vì vậy theo nghĩa chính thức, độ phức tạp đề cập đến những gì chúng ta có thể nói về vấn đề. Các kết quả về thuật toán cho chúng ta biết những điều về sự phức tạp của các vấn đề, nhưng bản thân chúng không phải là kết quả phức tạp (nhưng về mặt chính thức chúng ta nói về sự phức tạp của một thuật toán).
Luke Mathieson

1
@shekharsuman đoạn mở đầu của trang wikipedia là một bản tóm tắt khá hay.
Luke Mathieson

@Luke Cảm ơn, điều này làm cho mọi thứ rõ ràng. Tuy nhiên, nếu tôi có thể sử dụng thành ngữ "loại phức tạp được sử dụng nhiều nhất để đánh giá chính thức các thuật toán" (Mặc dù tôi biết điều này không chính xác). Điều gì sẽ là thời gian so với tính toán? Những gì tôi nghĩ là, nói chung, điều quan trọng nhất là thời gian, vì tài nguyên có thể mở rộng hơn trong một số ý nghĩa!
Median Hilal

1
@MedianHilal time thực sự là thước đo được xem xét phổ biến nhất cho sự phức tạp của một vấn đề. Không gian không quá xa phía sau (ít nhất là bởi các nhà lý thuyết phức tạp và những người xử lý các bộ dữ liệu rất lớn, ít hơn từng ngày).
Luke Mathieson

-2

Độ phức tạp theo chu kỳ thường được sử dụng làm thước đo độ phức tạp tính toán, một ví dụ hữu ích được cung cấp trong /programming/9097987/calculation-of-cyclomatic-complexity

Có thể có nhiều đường dẫn khác nhau (có thể được lồng vào nhau) thông qua một thuật toán tạo cho nó độ phức tạp chu kỳ cao, nhưng không có vòng lặp nào tạo cho nó độ phức tạp thời gian thấp. Một chương trình với một vòng lặp sẽ có độ phức tạp chu kỳ thấp nhưng có thể có độ phức tạp thời gian cao.

Độ phức tạp theo chu kỳ thường được sử dụng như một biện pháp bảo trì cần thiết cho mã. Một cuộc thảo luận chi tiết hơn được cung cấp trong http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Điều này khác với độ phức tạp thời gian là chạy đo thời gian của mã và có thể được sử dụng để đánh giá nhận thức của người dùng về hiệu quả của hệ thống.


Câu hỏi là về độ phức tạp tính toán, không phải về độ phức tạp chu kỳ!
Am_I_Hỗ trợ

Bạn có thể muốn đọc OP - anh ấy hỏi về độ phức tạp của thuật toán - Độ phức tạp theo chu kỳ đưa ra thước đo tĩnh về độ phức tạp tính toán của thuật toán - hãy thử thêm phản hồi tích cực vào lần tới
velvetytoast

2
Độ phức tạp theo chu kỳ không đo được độ phức tạp tính toán. Độ phức tạp tính toán đề cập đến thời gian chạy, chứ không phải cấu trúc mã nguồn phức tạp như thế nào.
DW

@DW Chính xác hơn, độ phức tạp tính toán đề cập đến các tài nguyên cần thiết để giải quyết vấn đề (có thể bao gồm không gian, xen kẽ, các cuộc gọi tiên tri, v.v., cũng như thời gian).
David Richerby

@DavidR Richby Tôi không phải là chuyên gia về vấn đề này, vì vậy hãy sửa nếu sai. Các biện pháp phức tạp tĩnh, chẳng hạn như kích thước chương trình có vai trò trong một số tình huống. Tôi có đúng rằng nó liên quan nhiều hơn đến độ phức tạp Kolmogorov. Đó cũng sẽ là trường hợp phức tạp Cyclomatic? Một loại phức tạp để viết chương trình hoặc vấn đề, và loại khác để giải quyết hoặc chạy chúng ... có thể là một xấp xỉ ngắn gọn về tình huống. Tôi không chắc chắn tôi sẽ viết một câu hỏi hợp lý về điều này.
babou
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.