O que segue é o meu algoritmo para fazer isso no que acredito ser tempo e minha prova disso. Meu professor discorda que seja executado em e, em vez disso, pensa que é executado em Tempo. Quaisquer comentários sobre a prova em si ou o estilo (ou seja, minhas idéias podem ser claras, mas a apresentação não).
A pergunta original:
Dado números, encontre o maior entre eles a tempo . Você não pode assumir mais nada sobre.
Minha resposta:
- Classifique o primeiro elementos da matriz. Isso leva tempo, pois isso depende totalmente da , não .
- Armazene-os em uma lista vinculada (mantendo a ordem classificada). Isso também leva pelo mesmo motivo acima.
- Para todos os outros elementos da matriz, teste se é maior que o menor elemento da lista vinculada. Isso leva tempo como comparações devem ser feitas.
- Se o número for realmente maior, exclua o primeiro elemento da lista vinculada (a mais baixa) e insira o novo número no local que manteria a lista na ordem classificada. Isso leva tempo porque é limitado por uma constante () acima, pois a lista não cresce.
- Portanto, a complexidade total do algoritmo é .
Estou ciente de que o uso de uma árvore vermelho-preta em oposição à lista vinculada é mais eficiente em termos constantes (como o limite superior constante é em oposição a e o problema de manter um ponteiro para o elemento mais baixo da árvore (para facilitar as comparações) é eminentemente possível, simplesmente não me ocorreu na época.
Qual é a minha prova que está faltando? Existe uma maneira mais padrão de apresentá-lo (mesmo que esteja incorreto)?