Je passais ce code mais j'ai du mal à comprendre comment c'est O (m + n) au lieu de O (Math.max (m, n)). Ou est O (m + n) sous O (Math.max (m, n)) de toute façon?Comment déterminer si la complexité de temps est O (m + n) ou O (Math.max (m, n))
int i = 0, j = 0, res = 0;
while (i < houses.length) {
while (j < heaters.length - 1
&& Math.abs(heaters[j + 1] - houses[i]) <= Math.abs(heaters[j] - houses[i])) {
j++;
}
res = Math.max(res, Math.abs(heaters[j] - houses[i]));
i++;
}
Il existe un exemple sur CTCI où la fonction renvoie un tableau de taille n. Il dit que la complexité de log (n) due aux appels de pile est réduite lorsque l'on calcule un grand O depuis n> logn, ce qui donne O (n) globalement. O (n + logn) n'est pas mentionné dans cet exemple (4.4 pour les curieux).
Une explication serait appréciée!
En termes plus simples, 'm + n <= Math.Max (m, n) + Math.Max (m, n) = O (Math.Max (m, n))'; d'où le résultat. –