Phải, tất nhiên. Điều này là tốt và hoàn toàn chấp nhận được. Thông thường và tiêu chuẩn để xem các thuật toán có thời gian chạy phụ thuộc vào hai tham số.
Chẳng hạn, bạn sẽ thường thấy thời gian chạy của tìm kiếm theo chiều sâu được biểu thị là , trong đó n là số đỉnh và m là số cạnh trong biểu đồ. Điều này là hoàn toàn hợp lệ. Ý nghĩa của điều này là tồn tại hằng số c và các số n 0 , m 0 sao cho thời gian chạy của thuật toán nhiều nhất là c ⋅ ( n + m ) , với mọi n > n 0 , m > m 0O ( n + m )nmcn0, m0c ⋅ ( n + m )n > n0, m > m0. Nói cách khác, nếu thời gian chạy chính xác là , chúng ta nói rằng f ( n , m ) = O ( n + m ) nếu tồn tại c , n 0 , m 0 sao cho n > n 0 và m > m 0 ngụ ý f ( n , m ) ≤ c ⋅ ( n + m )f( n , m )f( n , m ) = O ( n + m )c , n0, m0n > n0m > m0f( n , m ) ≤ c ⋅ ( n + m ).
Đúng, hoàn toàn phù hợp và chấp nhận được khi nói rằng giai đoạn đầu tiên mất thời gian và giai đoạn thứ hai mất thời gian O ( m ) .Ô ( n )Ô ( m )
Quan trọng: đảm bảo bạn xác định và m là gì. Bạn không thể nói "đây là thuật toán thời gian O ( n ) " mà không chỉ định n là gì . Nếu n không được chỉ định trong báo cáo vấn đề, bạn cần chỉ định nó. Chẳng hạn, xem các thuật toán đồ thị, trong đó chúng ta thường xác định n = # các đỉnh và m = # của các cạnh.nmÔ ( n )nnn =m =
Theo như bạn có thể gọi chúng là thời gian, không, tất nhiên là không - trừ khi bạn bằng cách nào đó biết rằng m = O ( n ) . Tất nhiên, nếu bạn biết rằng m = O ( n ) , thì nó tuân theo m + n = O ( n ) , do đó thuật toán thời gian O ( m + n ) cũng là thuật toán thời gian O ( n ) . Nhưng nếu không có gì đảm bảo rằng m = O (Ôi( n )m = O (n )m = O ( n )m + n = O ( n )O ( m + n )Ô ( n ) , sau đó bạn không thể gọi nó làthuật toán thời gian O ( n ) .m = O ( n )Ô ( n )
Đây là công cụ cơ bản. Bạn sẽ tìm thấy nó trên tất cả các sách giáo khoa thuật toán.