Так, звісно. Це прекрасно і цілком прийнятно. Зазвичай і стандартно бачити алгоритми, час роботи яких залежить від двох параметрів.
Наприклад, ви часто бачите час виконання першого глибинного пошуку, вираженого як , де - кількість вершин, - кількість ребер у графіку. Це цілком справедливо. Сенс цього полягає в тому, що існує константа і числа така, що час роботи алгоритму становить не більше , для всіх . Іншими словами, якщо точний час роботи , ми говоримо, що якщо існують такі, що і мається на увазіn m c n 0 , m 0 c ⋅ ( n + m ) n > n 0 , m > m 0 f ( n , m ) f ( n , m ) = O ( n + m ) c , n 0 , m 0 n > n 0 mO ( n + m )нмcн0, м0c ⋅ ( n + m )n > n0, м > м0f( н , м )f( n , m ) = O ( n + m )c , n0,м0н> n0 f ( n , m ) ≤ c ⋅ ( n + m )м > м0f( n , m ) ≤ c ⋅ ( n + m ) .
Так, цілком доречно і прийнятно сказати, що перша стадія займає час, а друга стадія займає час.O ( м )O ( n )O ( м )
Важливо: обов'язково визначте, що таке та . Ви не можете сказати «це алгоритм часу », не вказуючи, що таке . Якщо не вказано в заяві про проблему, потрібно вказати її. Наприклад, див. Алгоритми графіків, де ми зазвичай визначаємо # вершин і # ребер.m O ( n ) n n n = m =нмO ( n )ннn =m =
Що стосується того, чи можете ви назвати їх час, ні, звичайно, ні, якщо тільки ви якось не знаєте, що . Звичайно, якщо ви знаєте, що , то випливає, що , тому алгоритм часу також є алгоритмом часу . Але якщо немає гарантії, що , то ви не можете назвати це алгоритмом часу .m = O ( n ) m = O ( n ) m + n = O ( n ) O ( m + n ) O ( n ) m = O ( n ) O ( n )O ( n )m = O ( n )m = O ( n )m + n = O ( n )O ( m + n )O(n)m=O(n)O(n)
Це основні речі. Ви знайдете це в усіх підручниках алгоритмів.