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

Algoritmo: Busca Simples, Busca Binária e Notaç...

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

Avatar for 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.