Confuso sobre a complexidade do tempo de loops aninhados e procurando dicas
Digamos que eu tenho dois códigos:
Código A:
for i = 0;
for j = 0;
while(i<n){ // O(n)
while(j<n){ // O(n)
printf("hello");
.....
Tempo de execução = o (n) x O (n) = O (n ^ 2) ..
Código B:
int result = 0;
int i = 0;
while (i < n/2){ //O(n)
result += arr[i];
i += 1;
while(i >= n/2 && i < n){ //O(n)
results += arr[i];
i +=1;
}
Tempo de execução = O (n)
Como para o Código B, NÃO MULTIPLICAMOS os dois O (n) para obter O (n ^ 2) como fizemos no Código A ?? Muito confuso sobre como determinar os tempos de execução.