Como O e Ω se relacionam com o pior e o melhor caso?


33

Hoje discutimos em uma palestra um algoritmo muito simples para encontrar um elemento em uma matriz classificada usando pesquisa binária . Nos pediram para determinar sua complexidade assintótica para uma matriz de n elementos.

Minha idéia era que, obviamente, é ou seja mais específico porque é o número de operações no pior caso. Mas posso fazer melhor, por exemplo, se eu acertar o elemento pesquisado pela primeira vez - o limite inferior será .O(logn)O(log2n)log2nΩ(1)

O palestrante apresentou a solução como pois geralmente consideramos apenas as entradas dos piores casos para os algoritmos.Θ(logn)

Mas, ao considerar apenas os piores casos, qual é o objetivo de obter a notação e quando todos os piores casos do problema em questão têm a mesma complexidade ( seria tudo o que precisamos, certo?).OΩΘ

O que estou perdendo aqui?


@Smaji: O que você quer dizer com "Mas, considerando apenas os piores casos, qual é o objetivo de ter grande notação O e grande Omega quando todos os piores casos têm + - a mesma complexidade (Theta seria tudo o que precisamos, certo?)". por favor, esclareça.
tanmoy

@Smajl: Acho que sua pergunta é: qual é a necessidade da notação Big O e Big Omega na análise de algoritmos? estou correcto?
tanmoy

5
O(log2n) não é mais específico queO(logn) , eles denotam a mesma classe de funções.
Raphael

é o mesmo que L o g ( b ) / l o g ( 2 ) × l o g b ( n ) , por conseguinte, o 2 apenas indica um factor, que pode ser de remoção (como outros factores em grande -O.euog2(n)euog(b)/euog(2)×euogb(n)
ctrl-alt-delor

Respostas:


39

A notação Landau denota limites assintóticos nas funções . Veja aqui uma explicação das diferenças entre , Ω e Θ .OΩΘ

O pior, o melhor, o médio ou o nome do caso descrevem funções distintas do tempo de execução: uma para a sequência do tempo de execução mais alto de qualquer , uma para a do menor, e assim por diante.n

Por si só, os dois não têm nada a ver um com o outro. As definições são independentes. Agora podemos avançar e formular limites assintóticos nas funções de tempo de execução: superior ( ), inferior ( Ω ) ou ambos ( Θ ). Podemos fazer o pior, o melhor ou qualquer outro caso.OΩΘ

Por exemplo, na pesquisa binária, obtemos um melhor tempo de execução assintótico de e um pior caso de assintótico de Θ ( log n ) .Θ(1)Θ(registron)


O principal argumento para mim é que, podemos fazer uma análise do pior, do melhor caso, sobre qualquer das funções limitadas assintóticas. Para mim, isso mostra a independência de Big O vs. análise de pior caso. Obrigado!
21416 Patrick Patrick

1
@ Patrick Não é bem assim. Primeiro, você decide se deseja analisar o pior, o médio ou o melhor caso. Então você cria a função de custo (ou a melhor aproximação possível). Só então você toma assintóticos, se houver.
Raphael

17

Considere o seguinte algoritmo (ou procedimento, parte do código ou qualquer outra coisa):

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

Qual é o comportamento assintótico dessa função?

No melhor dos casos (onde é par), o tempo de execução é Ω ( n ) e O ( n 2 ) , mas não Θ de nada.nΩ(n)O(n2)Θ

No pior caso (onde é ímpar), o tempo de execução é Ω ( n 4 ) e O ( n 5 ) , mas não Θ de nada.nΩ(n4)O(n5)Θ

No caso , o tempo de execução é Θ ( n 3 ) .n=0Θ(n3)

Este é um exemplo um pouco artificial, mas apenas com o objetivo de demonstrar claramente as diferenças entre o limite e o caso. Você poderia ter a distinção tornar-se significativa com procedimentos totalmente deterministas, se as atividades que você está executando não tem nenhum conhecidos limites.Θ


1
Para tornar isso determinístico, divida ao longo de casos. nmod4
precisa saber é o seguinte

4

Não necessariamente. Nesse caso, ou seja, pesquisa binária em uma matriz classificada, você pode ver que: (a) a pesquisa binária leva no máximo etapas; (b) existem insumos que realmente forçam tantos passos. Portanto, se T ( n ) é o tempo de execução em uma entrada de pior caso para pesquisa binária, você pode dizer que T ( n ) = Θ ( log n ) .[logn+1]T(n)T(n)=Θ(logn)

Por outro lado, para outros algoritmos, talvez você não consiga calcular exatamente; nesse caso, poderá haver um espaço entre os limites superior e inferior para o tempo de execução na entrada do pior caso.T(n)

Agora, para pesquisar uma matriz classificada, algo mais é verdadeiro: qualquer algoritmo para pesquisar uma matriz classificada precisa inspecionar . Para esse tipo de limite inferior, você precisa analisar o problema em si. (Aqui está a idéia: a qualquer momento, um algoritmo de pesquisa não descartou algumas posições S [ n ] definidas de posições onde o elemento que ele está procurando pode estar. Uma entrada cuidadosamente criada pode garantir que | S | seja reduzido por no máximo um fator de 2. )[logn+1]S[n]|S|2


1

Você está certo, muitas pessoas desleixadamente usam O quando devem usar Θ . Por exemplo, um analista de algoritmos pode terminar com uma função de tempo T(n)=n2+n+2 e concluir imediatamente que T(n)=O(n2) , o que é tecnicamente correto, mas uma afirmação mais precisa seriaT(n)=Θ(n2) . Atribuo esse comportamento inconsciente a duas razões. Primeiro, muitos vêemOser mais popular e aceitável, possivelmente por causa de sua longa história. Lembre-se de que foi introduzido há mais de um século, enquanto Θ (e Ω ) foram introduzidos apenas em 1976 (por Donald Knuth). Segundo, pode ser porque O está prontamente disponível no teclado, enquanto Θ não está!

Do ponto de vista técnico, no entanto, a principal razão pela qual analistas cuidadosos preferem usar O mais Θ é que o primeiro cobre "um território maior" do que o segundo. Se tomarmos o exemplo de busca binária e quer usar Θ , vamos ter que fazer duas afirmações: \ um para o melhor caso, ou seja, Θ(1) , e outra para o pior caso, ou seja, Θ(logn) . Com O , fazemos apenas uma afirmação, a saber O(logn) . Matematicamente, as funções cobertas por Θ também são cobertas por O, enquanto o inverso não é necessariamente verdadeiro.


Bem-vindo e obrigado por reservar um tempo para postar uma resposta! No entanto, não sei dizer qual é o seu ponto aqui. No primeiro parágrafo, você oferece alguma especulação. No segundo, você propõe um ponto de vista que é "desleixado": dizer "é caso médio" não diz nada sobre o melhor caso, exceto que está na mesma classe. Dizer "é Θ ( log n ) caso médio" implica o mesmo limite superior! Se você deseja transmitir informações adicionais sobre o melhor caso, precisará explicitamente de qualquer maneira. Portanto, não vejo como você está fazendo questão de usar O sobre Θ.O(logn)Θ(logn)

@ Raphael Refiro-lhe as definições das duas notações. Além disso, saiba que eles são usados ​​para classificar a "taxa de crescimento" assintótica do tempo de execução, não o tempo de execução propriamente dito, conforme propagado por suas várias respostas e comentários.
Hamed Nassar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.