Ký hiệu Big O là một đơn vị trung bình miễn phí để đo lường sự thay đổi hiệu suất, do đó không phụ thuộc vào chi phí tương đối của các nguyên thủy tính toán.
Tóm lại:
Ký hiệu Big O là loại đơn vị đo lường tương đối, không có đơn vị (trái ngược với phép đo tuyệt đối). Nó chỉ có thể đo lường sự thay đổi hiệu suất, không phải hiệu suất tuyệt đối, mà hằng số là vấn đề rất nhiều. Ưu điểm là điều này làm cho nó thực hiện phần lớn độc lập, bằng cách cho phép phân tích đơn giản hơn có thể bỏ qua chi phí tương đối của các hoạt động cơ bản, miễn là các chi phí này có giới hạn trên và dưới cố định dương. Nhưng hậu quả là các yếu tố không đổi là vô nghĩa . Tuy nhiên, ngay cả đối với mục đích dự định của nó, phân tích độ phức tạp tiệm cận có thể được đặt câu hỏi trên các căn cứ khác , và phải được xem xét cẩn thận. Ví dụ, kích thước đầu vào thô có thể không phải là tham số phù hợp để xem xét.
Một nhận xét đầu tiên là câu hỏi của bạn không được nêu chính xác. Khi bạn bỏ qua hằng số trong 3 n , thực sự có "thay đổi ba lần", nhưng cả hai đều thay đổi theo cùng một tỷ lệ và bạn không thể khẳng định rằng "[một] thứ thay đổi nhanh gấp 3 lần so với thứ khác".33n
Một lý do tốt để bỏ qua sự liên tục trong ký hiệu Landau là chúng tôi không có đơn vị nào chúng tôi có thể dựa vào. Khi ai đó nói rằng A sống xa bạn gấp đôi so với B, điều này có ý nghĩa độc lập với bất kỳ đơn vị nào. Chúng tôi có thể đồng ý về điều đó mặc dù bạn đo khoảng cách bằng inch trong khi tôi làm điều đó trong những năm ánh sáng. Nhưng đo khoảng cách tuyệt đối đòi hỏi phải xác định đơn vị và công thức số của nó phụ thuộc vào đơn vị được chọn.
Thời gian thực tế được thực hiện bởi một thuật toán phụ thuộc vào thời gian thực hiện các hoạt động cơ bản, phụ thuộc rất nhiều vào máy. Bạn có thể đếm số lượng các hoạt động cơ bản, nhưng không có lý do gì để tin rằng tất cả chúng đều mất cùng một thời gian và luôn có thể gộp nhiều hoạt động thành một hoạt động, hoặc ngược lại, phân tách một hoạt động thành các hoạt động nhỏ hơn, sao cho số đó các hoạt động không thực sự có ý nghĩa, trừ khi bạn đồng ý trên một máy ảo tham chiếu. Được tham chiếu độc lập là một lợi thế.
Một quan điểm khác về lợi thế của phương pháp này là tất cả những gì bạn quan tâm trong phân tích là đếm số lượng các hoạt động cơ bản, miễn là chi phí của chúng có giới hạn trên và giới hạn dưới dương. Bạn không phải lo lắng về chi phí cá nhân.
Tuy nhiên, cái giá phải trả cho lợi thế đó là đánh giá chi phí tính toán được đưa ra với đơn vị không xác định và ví dụ, thời gian tính toán có thể là nano giây hoặc milimet - chúng tôi thậm chí không thử biết. Nói cách khác, các yếu tố không đổi là vô nghĩa, vì các đơn vị thay đổi không thể tách rời với việc thay đổi hệ số không đổi và không có đơn vị tham chiếu nào được sử dụng.
Như Patrick87 đã lưu ý , điều này đủ để hiểu cách thuật toán chia tỷ lệ theo kích thước đầu vào, nhưng nó sẽ không đưa ra một thước đo tuyệt đối về hiệu suất, thiếu dựa vào một đơn vị tham chiếu. Việc hủy một máy trừu tượng tham chiếu chung có thể được thực hiện khi người ta thực sự muốn so sánh hiệu suất của các thuật toán riêng biệt, nhưng khó hơn để đảm bảo rằng so sánh không bị sai lệch bởi các chi tiết thực hiện. Trong độ phức tạp tiệm cận, rủi ro này được tránh vì bạn so sánh thuật toán với chính nó.
Dù sao, chỉ có một lập trình viên ngây thơ sẽ chỉ dựa vào độ phức tạp tiệm cận để chọn một thuật toán. Có nhiều tiêu chí khác, bao gồm hằng số chưa được tiết lộ và chi phí thực tế của các hoạt động cơ bản. Hơn nữa, độ phức tạp của trường hợp xấu nhất có thể là một chỉ báo kém, bởi vì nguồn gốc của độ phức tạp trong trường hợp xấu nhất có thể hiếm khi xảy ra, và trên các mảnh của đầu vào đủ nhỏ để nó không bị giới hạn. Ví dụ, các trình phân tích cú pháp chung cho Ngữ pháp liền kề cây có độ phức tạp về lý thuyết và khá hữu dụng trong thực tế. Trường hợp xấu nhất mà tôi biết là
kiểu suy luận đa hình Damas-Hindley-MilnerO(n6)thuật toán được sử dụng cho ML, có độ phức tạp trường hợp xấu nhất theo cấp số nhân. Nhưng điều đó dường như không làm phiền người dùng ML, hoặc để ngăn việc viết các chương trình rất lớn trong ML. Có nhiều hơn các hằng số quan trọng. Trên thực tế, phân tích tiệm cận liên quan đến một thước đo chi phí tính toán với một số đo lường về độ phức tạp của đầu vào. Nhưng kích thước thô có thể không phải là biện pháp đúng.
Sự phức tạp giống như tính quyết định, nó có thể xấu về mặt lý thuyết, nhưng điều đó có thể không liên quan đến hầu hết không gian dữ liệu ... đôi khi. Phân tích độ phức tạp tiệm cận là một công cụ tốt và được thiết kế tốt, với những ưu điểm và hạn chế của nó, giống như tất cả các công cụ. Có hoặc không khám phá hằng số, có thể là vô nghĩa, sử dụng phán đoán là cần thiết.