Sì, naturalmente. Questo va bene e perfettamente accettabile. È comune e standard vedere algoritmi il cui tempo di esecuzione dipende da due parametri.
Ad esempio, vedrai spesso il tempo di esecuzione della ricerca per profondità espressa in , dove n è il numero di vertici e m è il numero di spigoli nel grafico. Questo è perfettamente valido. Il significato di questo è che esiste una costante c e numeri n 0 , m 0 tali che il tempo di esecuzione dell'algoritmo è al massimo c ⋅ ( n + m ) , per tutti n > n 0 , m > m 0O(n+m)nmcn0,m0c⋅(n+m)n>n0,m>m0. In altre parole, se il tempo di esecuzione esatto è , diciamo che f ( n , m ) = O ( n + m ) se esiste c , n 0 , m 0 tale che n > n 0 e m > m 0 implica 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).
Sì, è perfettamente appropriato e accettabile affermare che il primo stadio richiede tempo e il secondo stadio richiede tempo O ( m ) .O(n)O(m)
Importante: assicurati di definire cosa sono e m . Non puoi dire "questo è un algoritmo O ( n ) time" senza specificare cosa sia n . Se n non è specificato nell'istruzione del problema, è necessario specificarlo. Ad esempio, vedi algoritmi grafici, in cui normalmente definiamo n = # di vertici e m = # di bordi.nmO(n)nnn=m=
O(n)m=O(n)m=O(n)m+n=O(n)O(m+n)O(n)m=O(n)O(n)
Questa è roba di base. Lo troverai su tutti i manuali di algoritmi.