Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Algoritmo: Busca Simples, Busca Binária e Notação Big O

Algoritmo: Busca Simples, Busca Binária e Notação Big O

Algoritmo: Busca Simples, Busca Binária e Notação Big O
Escola Padre Constantino de Monte
Jhonathan P. Banczek

Jhonathan P. Banczek

August 27, 2019
Tweet

More Decks by Jhonathan P. Banczek

Other Decks in Education

Transcript

  1. Algoritmo: Busca simples, busca binária e Notação Big O Escola

    Padre Constantino de Monte Jhonathan P. Banczek
  2. Noções iniciais Complexidade de algoritmo: Complexidade de algoritmo é a

    quantidade de trabalho necessário para executar uma tarefa.
  3. Noções iniciais Complexidade de algoritmo: Isto é medido em cima

    das funções fundamentais que o algoritmo é capaz de fazer (acesso, inserção, remoção, são exemplos mais comuns em computação), o volume de dados (quantidade de elementos a processar), e é claro, a maneira como ele chega no resultado.
  4. Noções iniciais A Notação Big O - Notação assintótica Big

    O é uma notação especial que diz o quão rápido é um algoritmo.
  5. Noções iniciais A ideia da notação Big-O é descrever o

    comportamento geral (também chamado de assintótico) do algoritmo em termos do crescimento do número de operações conforme cresce o número de elementos processados (a quantidade de itens é descrita, genericamente, por n).
  6. Noções iniciais A ideia é usar a letra O seguida

    de uma função sobre n que descreva esse crescimento do algoritmo. Quanto mais rapidamente crescer o número de operações para processar os itens, "pior" é o desempenho do algoritmo (pois ele executa mais instruções e, portanto, demora mais - é "mais complexo").
  7. Noções iniciais A Notação Big O Não fornece o tempo

    em segundos! A notação Big O permite que você compare o número de operações.
  8. Noções iniciais A Notação Big O estabelece o tempo de

    execução para a pior hipótese. Avaliamos o algoritmo em relação ao seu Pior Caso.
  9. Noções iniciais: Exemplos comuns de tempo de execução Big O

    O(1) Tempo constante O(log n) tempo logarítmico O(n) Tempo Linear O(n * log n) sub-quadrático ou super-linear O(n^2) quadrático O(2^n) exponencial O(n!) fatorial
  10. Noções iniciais: Exemplos comuns de tempo de execução Big O

    obs.: O logaritmo é na base 2 e não na 10
  11. Algoritmo de Busca Imagine que você tem que procurar um

    número dentro deste vetor abaixo, que vai do 1 até o 16. Como você faria para procurar o número, por exemplo: 6?
  12. Algoritmo de Busca O mais comum seria percorrer cada elemento

    do vetor e verificando se o elemento que você acessou é o mesmo que está procurando 6
  13. Algoritmo de Busca Esse algoritmo é conhecido como busca simples

    ou sequencial: Algoritmo busca-simples: Seja V um vetor Seja E um elemento a ser procurado no vetor para i de 0 até tamanho(V) faça: se V[i] == E então: retorne i retorne -1
  14. Algoritmo de Busca A busca sequencial é o algoritmo mais

    simples de busca: Percorra todo o vetor comparando a chave com o valor do elemento de cada posição. Se a chave for igual a algum valor, então retorne a posição correspondente no vetor. Se o vetor todo foi percorrido e a chave não for encontrada, então retorne o valor −1
  15. Algoritmo de Busca O mais comum seria percorrer cada elemento

    do vetor e verificando se o elemento que você acessou é o mesmo que está procurando É o 6? senão pula para o próximo 6
  16. Algoritmo de Busca O mais comum seria percorrer cada elemento

    do vetor e verificando se o elemento que você acessou é o mesmo que está procurando É o 6? senão pula para o próximo 6
  17. Algoritmo de Busca É o 6? senão pula para o

    próximo 6 O mais comum seria percorrer cada elemento do vetor e verificando se o elemento que você acessou é o mesmo que está procurando
  18. Algoritmo de Busca É o 6? senão pula para o

    próximo 6 O mais comum seria percorrer cada elemento do vetor e verificando se o elemento que você acessou é o mesmo que está procurando
  19. Algoritmo de Busca É o 6? sim. Achou 6 O

    mais comum seria percorrer cada elemento do vetor e verificando se o elemento que você acessou é o mesmo que está procurando
  20. Algoritmo de Busca Essa é uma busca simples. Lembra da

    questão da complexidade? Veja que no Pior Caso, se fosse o número 16 a ser procurado, teríamos que percorrer todo o vetor.
  21. Algoritmo de Busca Isso quer dizer que o algoritmo da

    busca simples é O(n). No pior caso percorre toda a entrada.
  22. Algoritmo de Busca Imagine uma busca simples em um vetor

    com mais de 1 bilhão de elementos?
  23. Algoritmo de Busca Vamos pegar o mesmo vetor de entrada,

    com o número 2 a ser procurado e usar o seguinte algoritmo:
  24. Algoritmo de Busca Algoritmo: busca-binária Seja V um vetor ordenado;

    Seja E um elemento que irá buscar no vetor; Seja B o índice mais baixo do vetor; Seja A o índice mais alto do vetor; enquanto B <= A faça: meio = (B + A) / 2 chute = V[meio] se chute == E então: retorne meio se chute > E então: A = meio - 1 senão: B = meio + 1 retorne -1
  25. Algoritmo de Busca 1. Verifique se a chave de busca

    é igual ao valor da posição do meio do vetor. 2. Caso seja igual, devolva esta posição. 3. Caso o valor desta posição seja maior, então repita o processo mas considere que o vetor tem metade do tamanho, indo até a posição anterior a do meio. 4. Caso o valor desta posição seja menor, então repita o processo mas considere que o vetor tem metade do tamanho e inicia na posição seguinte a do meio.
  26. Algoritmo de Busca Vamos pegar a mesma lista de entrada,

    com o número 2 a ser procurado. Primeiro dou um ‘chute’ no meio do vetor: 9 2
  27. Algoritmo de Busca Como meu chute foi maior, eu elimino

    metade do vetor mudando minha variavel ALTO para MEIO - 1 2
  28. Algoritmo de Busca No próximo passo, eu chuto no meio

    novamente, selecionando o valor 4. Com isso, eu elimino mais uma parte do vetor. Todos os valores maiores que 4. Atualizando meu ALTO = meio - 1 2
  29. Algoritmo de Busca Novamente eu chuto no meio. O que

    dá o valor 2. Com isso o valor procurado e o chute são iguais. O algoritmo encontrou. 2
  30. Algoritmo de Busca A complexidade do algoritmo da busca binária

    é O(log n) Lembre que Log n na computação é na base 2, e não 10. Para calcular na calculadora faça: (Log n / log 2).
  31. Algoritmo de Busca Sendo a busca binária O(log n) e

    a busca simples O(n) como vemos o crescimento desses dois algoritmos? efetue a conta: O(n) O(log n) O(100) -> 100 O(log 100) -> 7 O(4 bilhões) ->(4 bilhões) O(log 4 bilhões) -> 32
  32. Referências Definição da notação “Big O” https://pt.stackoverflow.com/questions/56836/defini%C3%A7%C3%A3o-da-nota%C3%A7%C3 %A3o-big-o Notação assintótica

    - Khan Academy https://pt.khanacademy.org/computing/computer-science/algorithms#asymptotic-notation Algoritmos e Programação de Computadores Instituto de Computação UNICAMP ic.unicamp.br/~zanoni/mc102/2013-1s/aulas/aula15.pdf Entendendo Algoritmos - Um guia ilustrado para programadores e outros curiosos. Aditya Y. Bhargava. Novatec 2017.