| Padrão | Estrutura Típica | Classe Assintótica |
|---|---|---|
| Sem loop | Sequência simples de operações primitivas | $O(1)$ |
| 1 loop simples | Percorrer vetor de tamanho $n$ uma vez | $O(n)$ |
| Loop com divisão por 2 | Descartar metade do espaço a cada iteração | $O(\log n)$ |
| Dois loops aninhados | Comparar todos os pares possíveis ($n \times n$) | $O(n^2)$ |
| Três loops aninhados | Visitar todas as triplas ($n \times n \times n$) | $O(n^3)$ |
| Loops sequenciais | Somar os custos e tomar o termo dominante | $O(\max(f(n), g(n)))$ |
| Algoritmo | Melhor Caso | Caso Médio | Pior Caso |
|---|---|---|---|
| Selection Sort | $\Theta(n^2)$ | $\Theta(n^2)$ | $\Theta(n^2)$ |
| Bubble Sort Otimizado | $\Theta(n)$ | $\Theta(n^2)$ | $\Theta(n^2)$ |
esq avança para a direita ou dir recua para a esquerda. Como a distância total inicial é $n-1$, o laço executa no máximo $n-1$ passos.
$$\boxed{f(n) \in O(n)}$$
| Padrão | Como Reconhecer no Código | Classe Assintótica |
|---|---|---|
| Selection Sort | Busca repetida de menor: soma triangular constante | $\Theta(n^2)$ |
| Bubble Sort (Pior Caso) | Trocas consecutivas em vetor inverso | $\Theta(n^2)$ |
| Bubble Sort (Melhor Caso) | Flag trocou encerra na 1ª passada |
$\Theta(n)$ |
| Dois Parâmetros | Laços aninhados de dimensões independentes | $O(n \cdot m)$ |
| Raiz Quadrada | Condição de parada do laço com $i^2 \le n$ | $O(\sqrt{n})$ |
| Dois Ponteiros | Dois índices convergindo em passos unitários | $O(n)$ |
| Classe | Custo ($n = 16$) |
|---|
enquanto divide $i$ sucessivamente por $2$, executando $\lfloor\log_2 n\rfloor + 1$ vezes. Em cada rodada, o para executa $n$ operações. Custo total: $n \times \Theta(\log n) = \boxed{\Theta(n \log n)}$.
enquanto dobra $j$, custando $\Theta(\log i)$ iterações. A soma total é $\sum_{i=1}^n \log i = \log(n!) = \boxed{\Theta(n \log n)}$ (pela fórmula de Stirling).
enquanto recua $i$ posições para cada $i$, gerando $\sum_{i=1}^{n-1} i = \boxed{\text{Pior Caso } \Theta(n^2)}$.
enquanto diminui $j$ em passos de tamanho $i$, executando $\approx \frac{n-i}{i} \approx \frac{n}{i} - 1$ vezes. Somando para todos os $i$: $\sum_{i=1}^n \frac{n}{i} = n \sum_{i=1}^n \frac{1}{i} = n H_n \approx n(\ln n + \gamma) = \boxed{\Theta(n \log n)}$.
enquanto divide $i$ por $2$ a cada rodada: $\Theta(\log n)$ iterações.para executa sempre $n$ vezes a cada rodada do while.enquanto dobra $j$ até atingir $i$, com custo $\Theta(\log i)$.enquanto recua $i$ posições a cada $i$, gerando $1 + 2 + \dots + (n-1)$.