Correção, invariantes e complexidade
Provar o que um algoritmo calcula e contar tempo e memória em função da entrada.
Prova em quatro passos
- Contrato: pré-condição do chamador e pós-condição do algoritmo, com empates e vazio decididos.
- Invariante vale à entrada de cada iteração. Mostra início, manutenção e implicação à saída.
- Junta quantidade inteira não negativa que diminui para garantir paragem. Sem ela, tens correção parcial.
Primeira posição do máximo em vetor não vazio:
melhor = 0
para i = 1, ..., n-1:
se v[i] > v[melhor]: melhor = i
devolver melhor
Invariante: melhor é a primeira posição do máximo em [0,i). Fecha com i=n. Usa > para conservar o primeiro; >= daria o último. São n-1 comparações.
Contar sem adivinhar
| Padrão | Total | Ordem |
|---|---|---|
Seguidos de n | 2n | |
Encaixados de n, n interiores por exterior | ||
1+…+n | ||
Duplicar de i=1 enquanto i<n, n>=1 | iterações | |
Duplicar com interior i |
Ciclos seguidos somam os custos; ciclos encaixados com interior independente multiplicam as contagens, e o caso triangular soma 1+…+n. Copiar n posições custa . Percorrer uma string de comprimento L custa por passagem; juntar com += repetido recopia o acumulado em cada passo, por isso fixa a operação antes de contar.
Limites e recorrências
- limita por cima, por baixo, pede os dois. Indica sempre o caso: não significa pior caso.
- cabe entre e para : .
- Ordem usual: .
| Recorrência | Resultado |
|---|---|
Pilha recursiva ocupa . Média exige distribuição; amortizado limita sequências sem sorteio. Vetor que duplica dá amortizado por inserção.
Somas rápidas
Prefixos , dão soma de [l,r) como . Construção , consulta .
- Vetor[1,3) soma -2 e 7.
4-271 - Prefixos5 vem de 9 menos 4.
042910
- Janela fixa
K: desliza a soma em . «Metade ou mais» testa2*dentro>=K. - Kadane para intervalo não vazio:
atual=max(x,atual+x),melhor=max(melhor,atual). Tempo . Só negativos devolvem o maior elemento.