Escriturário Informática Parte 17 Prof. Márcio Hunecke
Informática BUSCA SEQUENCIAL E BUSCA BINÁRIA SOBRE ARRAYS Busca sequencial em vetores não ordenados O termo busca sequencial (ou busca linear) expressa um tipo de pesquisa em vetores ou listas de modo sequencial (elemento por elemento), de modo que a função do tempo em relação ao número de elementos é linear, ou seja, cresce proporcionalmente. No melhor caso, o elemento a ser buscado é encontrado logo na primeira tentativa da busca. No pior caso, o elemento a ser buscado encontra-se na última posição e são feitas N comparações, sendo N o número total de elementos. No caso médio, o elemento é encontrado após (N+1)/2 comparações. Código Java utilizado para fazer buscas sequenciais em vetores não ordenados O programa busca um determinado elemento no arranjo, passando por todas as posições do arranjo e tem duas condições para parar: Elemento encontrado saída é o índice do elemento Busca chegou ao fim índice == tamanho do vetor, então saída é -1 (elemento não encontrado). www.acasadoconcurseiro.com.br 3
Busca sequencial em vetores ordenados A única diferença é que a busca pode ser interrompida quando o valor do elemento do vetor é maior que o valor procurado. Código Java utilizado para fazer buscas sequenciais em vetores ordenados O programa busca um determinado elemento em um arranjo, passando por todas as posições até encontrar um elemento com valor maior. Neste cenário a tendência é de gerar menos comparações. Três condições para parar: Elemento encontrado saída é o índice do elemento Elemento é maior que o buscado saída é -1 (valor não encontrado) Busca chegou ao fim índice == tamanho do vetor, então saída é -1 (elemento não encontrado). Busca binária em vetores ordenados A pesquisa ou busca binária (em inglês binary search algorithm ou binary chop) é um algoritmo de busca em vetores que segue o paradigma de divisão e conquista. Ela parte do pressuposto de que o VETOR ESTÁ ORDENADO e realiza sucessivas divisões do espaço de busca comparando o elemento buscado com o elemento no meio do vetor. Se o elemento do meio do vetor for o elemento buscado, a busca termina com sucesso. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior (ou direita) do vetor. E finalmente, se o elemento do meio vier depois do elemento buscado, a busca continua na metade anterior (ou esquerda) do vetor. A quantidade de comparações e muito menor que na busca sequencial, mas obrigatoriamente o vetor precisa estar ordenado. A quantidade de comparações é o resultado do logaritmo de N na base 2 mais 1, ou seja, log2(n) + 1. Exemplo: Para um vetor com um milhão de elementos, são necessárias 21 comparações, no máximo. Esse modelo de busca é muito utilizado com vetores que sofrem poucas alterações. 4 www.acasadoconcurseiro.com.br
Banco do Brasil - TI (Escriturário) Informática Márcio Henecke Programa genérico utilizado para fazer buscas binárias em vetores ordenados O programa verifica se o elemento procurado é o do meio do arranjo, se não for, verifica se ele é maior. Se for maior, repete a busca na metade direita do arranjo e assim sucessivamente. Senão for maior, repete a busca na metade esquerda do arranjo e assim sucessivamente. O programa é finalizado mostrando o índice do elemento procurado ou mostrando -1, se o elemento não for localizado. www.acasadoconcurseiro.com.br 5
Questões 1. (2015 COMPERVE UFRN Técnico de Tecnologia da Informação) Considere a seguinte função busca escrita em linguagem C: Essa função implementa o algoritmo de busca a) sequencial recursiva. b) binária iterativa. c) binária recursiva. d) sequencial iterativa. www.acasadoconcurseiro.com.br 7
2. (2014 FCC TRT 16ª REGIÃO (MA) Analista Judiciário Tecnologia da Informação) Considere o código-fonte a seguir: É correto afirmar que a classe Java apresentada implementa uma a) pesquisa linear. b) árvore binária. c) pilha. d) fila. e) pesquisa binária. 8 www.acasadoconcurseiro.com.br
Banco do Brasil - TI (Escriturário) Informática Márcio Henecke 3. (2013 FCC TRT 12ª Região (SC) Técnico Judiciário Tecnologia da Informação) O código-fonte apresentado: a) faz uma pesquisa sequencial no vetor. b) está incorreto, pois para retornar o tamanho do vetor utiliza-se vet.size() e não vet.length. c) sempre exibe a mensagem dizendo que o valor lido não foi encontrado no vetor. d) localiza o valor digitado somente se os valores contidos no vetor estiverem em ordem crescente. e) faz uma pesquisa binária no vetor. 4. (2012 CESPE Banco da Amazônia Técnico Científico Administração de Dados) A busca binária é realizada em um grupo de dados previamente ordenado. ( ) Certo ( ) Errado www.acasadoconcurseiro.com.br 9
5. (2010 AOCP Colégio Pedro II Técnico de Tecnologia da Informação) A busca binária é conhecida também como busca logarítmica. Sobre a busca binária, assinale a alternativa INCORRETA. a) Para um conjunto de 15 elementos, ocorreria, no mínimo, 1 comparação e, no máximo, 4 comparações. b) Quando comparada com a busca sequencial, a busca binária, há uma redução logarítmica dos elementos a serem pesquisados. c) Em uma sequência ordenada de forma crescente, caso o elemento procurado seja menor que o elemento do meio, continua-se a busca com o subconjunto da direita. Em caso contrário, com o subconjunto da esquerda. d) Considerando uma sequência qualquer, deve-se dividir o conjunto ao meio e verificar se o elemento procurado é igual ao elemento central. e) Se o elemento procurado estiver entre os últimos ou não estiver no conjunto, a busca linear poderá ser mais lenta do que a busca binária. 6. (2017 FUNDEP (Gestão de Concursos) UFVJM-MG Analista de Tecnologia da Informação) Analise o trecho de código a seguir. Avariável x representa o elemento de referência passado como parâmetro A qual algoritmo esse código pertence? a) Busca binária b) Ordenação heapsort c) Busca sequencial d) Ordenação quicksort 10 www.acasadoconcurseiro.com.br
Banco do Brasil - TI (Escriturário) Informática Márcio Henecke 7. (2017 CESPE TRT 7ª Região (CE) Técnico Judiciário Tecnologia da Informação) Considere que um algoritmo de pesquisa, em um arquivo previamente ordenado, é caracterizado por realizar comparação de chaves e sucessivas divisões no espaço de busca até encontrar o termo pesquisado ou até haver um único registro. Trata-se de um algoritmo de a) pesquisa por interpolação. b) pesquisa binária. c) pesquisa sequencial. d) árvore de busca binária. 8. (2012 FCC TJ-RJ Analista Judiciário Análise de Sistemas) O algoritmo conhecido como busca binária é um algoritmo de desempenho ótimo para encontrar a posição de um item em a) uma árvore B. b) uma lista ligada ordenada. c) uma árvore de busca binária. d) um heap binário. e) um vetor ordenado. 9. (2018 CESGRANRIO Petrobras Engenheiro de Equipamentos Júnior Eletrônica) A função a seguir implementa um algoritmo de busca binária sobre um vetor de inteiros ordenado de modo ascendente. Essa função recebe como parâmetros um vetor (vet), o elemento que se deseja procurar no vetor (elem), o índice do primeiro elemento do vetor (ini) e o índice do último elemento do vetor (fim). O comando System.out.println(vet[m]) exibe no console o valor do elemento de índice m do vetor vet. Seja o seguinte vetor (vt) de inteiros: www.acasadoconcurseiro.com.br 11
Suponha que a função busca seja chamada por meio do seguinte comando: busca(vt, 39, 0, 14); Qual será o 3º valor exibido no console? a) 65 b) 51 c) 57 d) 38 e) 27 10. (2018 FCC DPE-AM Assistente Técnico de Defensoria Programador) Considere que na Defensoria há uma lista ordenada com o nome de 1000 cidadãos amazonenses. Utilizando o método de pesquisa binária para localizar o nome de um destes cidadãos, serão necessárias, no máximo, a) 1.000 comparações. b) 10 comparações. c) 500 comparações. d 200 comparações. e) 5 comparações. 11. (2017 CESPE TRT 7ª Região (CE) Técnico Judiciário Tecnologia da Informação) Considere que um algoritmo de pesquisa, em um arquivo previamente ordenado, é caracterizado por realizar comparação de chaves e sucessivas divisões no espaço de busca até encontrar o termo pesquisado ou até haver um único registro. Trata-se de um algoritmo de a) pesquisa por interpolação. b) pesquisa binária. c) pesquisa sequencial. d) árvore de busca binária. 12 www.acasadoconcurseiro.com.br
Banco do Brasil - TI (Escriturário) Informática Márcio Henecke 12. (2017 FCC DPE-RS Analista Desenvolvimento de Sistemas) Atenção: Os programas abaixo devem ser utilizados para responder a questão, No Programa 1, a busca pelo valor armazenado na variável elemproc a) usa o método bubble sort para efetuar a comparação sucessiva de pares subsequentes de elementos, trocando-os de posição, se estiverem fora de ordem. b) não apresentará resultado, pois a condição estabelecida no comando while sempre será verdadeira, gerando um laço infinito. c) tem como base o método de seleção direta, porém, ocorrerá um erro, já que os elementos do vetor estão ordenados. d) usa o método de pesquisa binária, normalmente mais eficiente do que o método de pesquisa linear. e) não apresentará resultado se o elemento procurado for o 8 elemento do vetor (valor 88), á que a variável ult, que se refere ao último elemento do vetor, contém o valor 7. 13. (2017 FGV IBGE Analista Censitário Análise de Sistemas Desenvolvimento de Aplicações) Para poder ser aplicado, o algoritmo de pesquisa binária exige que os elementos do array: a) sejam números; b) estejam ordenados; c) estejam representados em base múltipla de 2; d) ocupem somente as posições pares; e) não sejam repetidos. www.acasadoconcurseiro.com.br 13
Gabarito: 1. B 2. E 3. A 4. Certo 5. C 6. A 7. B 8. E 9. C 10. B 11. B 12. D 13. B 14 www.acasadoconcurseiro.com.br