If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Notação Big-θ (Grande-Theta)

Vamos ver uma implementação simples da busca linear:
var doLinearSearch = function(array, targetValue) {
  for (var guess = 0; guess < array.length; guess++) {
    if (array[guess] === targetValue) { 
        return guess;  // Encontrou!
    }
  }
  return -1;  // Não encontrou
};
Vamos indicar o tamanho do array (array.length) como n. O número máximo de vezes que um laço "for" pode ser executado é n, e esse pior caso ocorre quando o valor procurado não está presente no array.
A cada iteração do laço, há diversas coisas a serem feitas:
  • comparar a variável guess com array.length
  • comparar array[guess] com targetValue
  • possivelmente retornar o valor da variável guess
  • incrementar a variável guess.
Cada uma dessas pequenas computações são executadas em um tempo constante a cada iteração. Se o laço "for" se repete n vezes, então o tempo para todos as n iterações é c1n, em que c1 é a soma de vezes para as computações em uma iteração. Agora, não podemos afirmar qual é o valor de c1, porque ele depende da velocidade do computador, da linguagem de programação usada, do compilador ou interpretador que traduz o código fonte em código executável e de outros fatores.
Esse código possui uma pequena sobrecarga extra, para configurar o laço "for" (o que inclui inicializar o valor de guess como 0) e possivelmente retornar -1 no final. Vamos chamar o tempo dessa sobrecarga de c2, que também é uma constante. Portanto, o tempo total para a busca linear no pior caso é c1n+c2.
Como dissemos, o fator constante c1 e o termo de baixa ordem c2 não nos dizem nada sobre a taxa de crescimento do tempo de execução. O importante é que o pior tempo de execução possível da busca linear aumenta de acordo com o tamanho do array n. A notação que usamos para esse tempo de execução é Θ(n). Esta é a letra grega "theta" maiúscula e dizemos "Theta-grande de n" ou apenas "Theta de n."
Quando dizemos que um tempo de execução em particular é Θ(n), estamos dizendo que, quando n fica grande o bastante, o tempo de execução é de pelo menos k1n e, no máximo, de k2n para quaisquer constantes k1 e k2. É assim que devemos pensar no Θ(n):
Para valores pequenos de n, não importa como o tempo de execução se compara com k1n ou k2n. Mas quando n fica grande o bastante — sobre ou à direita da linha pontilhada — o tempo de execução deve ficar entre k1n e k2n. Enquanto essas constantes k1 e k2 existirem, dizemos que o tempo de execução é Θ(n).
Não estamos restritos a apenas n na notação Θ. Podemos usar qualquer função, como n2, nlog2n, ou qualquer outra função de n. Aqui está um exemplo de como pensar em um tempo de execução que é Θ(f(n)) para alguma função f(n):
Uma vez que o n fica grande o suficiente, o tempo de execução fica entre k1f(n) e k2f(n).
Na prática, simplesmente descartamos fatores constantes e termos de ordem inferior. Outra vantagem de usar a notação Θ é que não temos que nos preocupar com quais unidades de tempo estamos usando. Por exemplo, suponha que você tenha calculado que um tempo de execução é de 6n2+100n+300 microssegundos. Ou talvez sejam milissegundos. Quando você usa a notação Θ, você não especifica isso. Você também descarta o fator 6 e os termos de ordem inferior 100n+300, e você simplesmente diz que o tempo de execução é Θ(n2).
Quando usamos a notação big-Θ estamos dizendo que temos um limite assintoticamente restrito no tempo de execução. "Assintoticamente" porque ele importa apenas para valores grandes de n. "Limite restrito" porque definimos o tempo de execução para um fator constante superior e inferior.

Este conteúdo é uma colaboração entre os professores de ciência da computação da Universidade de Dartmouth, Thomas Cormen e Devin Balkcom, juntamente com a equipe do currículo de computação da Khan Academy. O conteúdo é licenciado CC-BY-NC-SA.

Quer participar da conversa?

Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.