Tak oczywiście. To jest w porządku i całkowicie do przyjęcia. Częstym i standardowym jest obserwowanie algorytmów, których czas działania zależy od dwóch parametrów.
Na przykład często widzisz czas wykonywania pierwszego wyszukiwania głębokości wyrażony jako , gdzie n to liczba wierzchołków, a m to liczba krawędzi na wykresie. Jest to całkowicie poprawne. Znaczenie tego jest takie, że istnieje stała c i liczby n 0 , m 0 tak, że czas działania algorytmu wynosi co najwyżej c ⋅ ( n + m ) , dla wszystkich n > n 0 , m > m 0O(n+m)nmcn0,m0c⋅(n+m)n>n0,m>m0. Innymi słowy, jeśli dokładny czas działania wynosi , mówimy, że f ( n , m ) = O ( n + m ), jeśli istnieje c , n 0 , m 0, tak że n > n 0 i m > m 0 implikuje 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).
Tak, całkowicie właściwe i dopuszczalne jest stwierdzenie, że pierwszy etap zajmuje czas a drugi etap zajmuje czas O ( m ) .O(n)O(m)
Ważne: upewnij się zdefiniować, co i m są. Nie można powiedzieć „jest to algorytm czasu O ( n ) ” bez określenia, czym jest n . Jeśli n nie jest określone w opisie problemu, musisz je podać. Na przykład zobacz algorytmy grafowe, w których zwykle definiujemy n = # wierzchołków i m = # krawędzi.nmO(n)nnn=m=
Jeśli chodzi o to, czy możesz nazwać je czasem , nie, oczywiście, że nie - chyba że w jakiś sposób wiesz, że m = O ( n ) . Oczywiście, jeśli wiesz, że m = O ( n ) , oznacza to, że m + n = O ( n ) , więc algorytm czasu O ( m + n ) jest również algorytmem czasu O ( n ) . Ale jeśli nie ma gwarancji, że m = O (O(n)m=O(n)m=O(n)m+n=O(n)O(m+n)O(n) , wtedy nie można nazwać goalgorytmem czasowym O ( n ) .m=O(n)O(n)
To podstawowe rzeczy. Znajdziesz go w podręcznikach algorytmów.