Để làm sáng tỏ cuộc thảo luận trong các bình luận, vấn đề là bạn đang đo lường sự tăng trưởng liên quan đến vấn đề gì.
Như được đề cập bởi @Kaveh, không phải là tuyến tính trong cả hai cùng một lúc, nhưng là tuyến tính nếu một là hằng số và một số khác phát triển.O(mn)
Mặt khác, có thể sẽ được coi là tuyến tính. Theo trực giác, nếu m nhân đôi, hoặc nếu n nhân đôi, hoặc thậm chí nếu cả m và n nhân đôi, m + n không thể nhiều hơn gấp đôi. Điều này không đúng với m n ; nếu m và n cả hai m m n tăng lên 4. Đây là lý do tại sao trong nhiều bối cảnh, thời gian chạy này sẽ được coi là bậc hai. Tôi đưa ra một ví dụ về điều này với kết hợp chuỗi trong một vài đoạn.O(m+n)mnmnm+nmnmnmn
Nhưng thông thường khi bạn đang sử dụng ký hiệu Big- , bạn đang sử dụng nó để tham khảo một cái gì đó cụ thể. Vì chúng tôi chủ yếu là các nhà lý thuyết, nên nhìn chung kích thước của vấn đề.O
Hãy lấy Ma trận bổ sung, ví dụ. Thêm hai ma trận mất thời gian O ( m n ) . Nhưng mỗi yếu tố đầu vào của chúng tôi chỉ được chạm một lần, vì vậy điều này thường được gọi là tuyến tính. Nói cách khác, đầu vào của chúng tôi có kích thước O ( m n ) , vì vậy thời gian chạy của O ( m n ) là tuyến tính theo kích thước của đầu vào.m×nO(mn)O(mn)O(mn)
Bây giờ chúng ta hãy xem kết hợp chuỗi - cụ thể là, chúng ta được cung cấp một chuỗi có kích thước và một chuỗi có kích thước n và chúng ta muốn xem liệu có sự xuất hiện của chuỗi nhỏ hơn trong chuỗi lớn hơn không. Chúng ta có thể kiểm tra điều này một cách ngây thơ trong thời gian O ( m n ) ; điều này thường được coi là bậc hai. Tại sao? Nếu m và n có thể là bất cứ thứ gì, đặt m = n . Sau đó, thời gian chạy của chúng tôi là O ( m 2 ) và đầu vào của chúng tôi có kích thước 2 m .mnO(mn)mnm=nO(m2)2m
Mặt khác, nếu chúng ta sử dụng thuật toán Rabin-Karp , chúng ta sẽ có (trung bình ) thời gian . Đầu vào của chúng tôi bao gồm cả hai chuỗi, vì vậy đầu vào của chúng tôi cũng có kích thước O ( m + n ) . Do đó, điều này thường được gọi là tuyến tính.O(m+n)O(m+n)
Tóm lại: thường được gọi là tuyến tính cho những thứ như nhân ma trận vì nó tuyến tính theo kích thước của đầu vào, nhưng nó thường được gọi là bậc hai cho những thứ như khớp chuỗi vì đầu vào nhỏ hơn. Thuật ngữ nào phù hợp tùy thuộc vào ngữ cảnh bạn đang sử dụng.O(mn)