Nó sẽ phụ thuộc vào ngữ cảnh.
"Sửa lỗi hiệu năng thời gian chạy bậc hai" thường là những gì tôi thấy. Tuy nhiên, việc đó có đáng sửa hay không (thay đổi mã) là tùy thuộc vào ngữ cảnh.
Hãy nhớ rằng cơ sở dữ liệu cung cấp rất nhiều công cụ để cải thiện độ phức tạp thời gian. Ví dụ, để có được kết quả N hàng đầu từ cơ sở dữ liệu, chỉ cần nói như vậy. Khi chuyển đổi bùn không hiệu quả thành cuộc gọi được tối ưu hóa tích hợp, giải thích có vẻ không cần thiết.
Lý do tôi coi một thuật toán với thời gian chạy bậc hai để xứng đáng được xem xét mã (thảo luận) là không nhiều vì nó chậm (chậm là tương đối; bậc hai là nhanh khi so sánh theo cấp số nhân), nhưng vì trực giác của con người (như khách hàng của bạn, hoặc lập trình viên đồng nghiệp) vô cùng khó chịu với chức năng phần mềm đi quá xa so với thời gian chạy tuyến tính, do sự pha trộn của những kỳ vọng từ cuộc sống hàng ngày.
Rất nhiều phàn nàn của khách hàng về hiệu suất phần mềm thuộc hai loại sau:
Toàn bộ hệ thống (phần mềm và phần cứng) được chỉ định dựa trên mức sử dụng ước tính. Tuần trước, mọi thứ đều chạy tốt, một chức năng nhất định chỉ mất chưa đến 5 giây. Tuần này, sau khi cài đặt bản cập nhật, chức năng tương tự mất hơn 1 phút.
- Đây là một so sánh với một hiệu suất chuẩn trước đó. Khách hàng giữ hiệu suất trong tương lai đến một thước đo tuyệt đối theo thang thời gian của con người (từ giây đến phút).
Tôi đã gửi 100 việc làm cho hệ thống. Tại sao phải mất 400 lần thời gian để xử lý, so với thời gian cần thiết cho một công việc?
- Khách hàng mong đợi thời gian xử lý là tuyến tính. Trong thực tế, khách hàng không thể hiểu hoặc chấp nhận rằng có tồn tại các nhiệm vụ chậm hơn tuyến tính.
Vì lý do này, một khách hàng sẽ coi thời gian thực hiện là một lỗi nếu cả hai đều đúng:
- Chậm hơn tuyến tính
- Đáng chú ý (nghĩa là nằm trong phạm vi thời gian của con người (dài hơn giây hoặc phút) với các kích thước tác vụ thông thường)
Các đối số hợp pháp giải thích rằng thuật toán thời gian chạy bậc hai không gây ra vấn đề (nghĩa là không xứng đáng thay đổi mã):
- Kích thước của tác vụ thường được xử lý bởi hàm thời gian chạy bậc hai này có phần bị giới hạn
- Với phạm vi kích thước điển hình, thời gian thực hiện (tuyệt đối) vẫn đủ nhỏ để loại bỏ
- Nếu người dùng thực sự cố gắng gửi một tác vụ đủ lớn để có thể nhận thấy, người dùng sẽ nhận được một thông báo cảnh báo về thời gian chạy dài
- Những người sử dụng hệ thống đều là chuyên gia, do đó họ biết họ đang làm gì. Ví dụ: người dùng API nên đọc bản in đẹp trên tài liệu API.
Rất nhiều thuật toán hữu ích cho phát triển ứng dụng điển hình trên thực tế chậm hơn tuyến tính (chủ yếu là O (N log N), như trong cách sắp xếp), do đó, phần mềm quy mô lớn trên thực tế sẽ cố gắng giải quyết rằng, bằng cách chỉ sắp xếp phần có liên quan của dữ liệu hoặc sử dụng các kỹ thuật lọc biểu đồ (thống kê) đạt được hiệu quả tương tự.
Điều này áp dụng cho khách hàng phần mềm, nhưng nếu bạn coi người dùng của thư viện phần mềm hoặc hàm API là "khách hàng" thì câu trả lời vẫn sẽ được áp dụng.