Để đ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.
Để đ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.
Câu trả lời:
Độ 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 đề 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 )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).
Độ 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.