·
Matemática Aplicada a Negócios ·
Introdução à Computação 2
Envie sua pergunta para a IA e receba a resposta na hora

Prefere sua atividade resolvida por um tutor especialista?
- Receba resolvida até o seu prazo
- Converse com o tutor pelo chat
- Garantia de 7 dias contra erros
Recomendado para você
113
Slide - Método da Bolha - Bubblesort e Sharkesort - 2023-2
Introdução à Computação 2
USP
54
Slide - Ordenação Por Fusão - Bubblesort e Sharkesort - 2023-2
Introdução à Computação 2
USP
25
Slide - Ordenação por Seleção - 2023-2
Introdução à Computação 2
USP
4
Prática 4 - Recursão - Introdução à Computação 2 - 2023-2
Introdução à Computação 2
USP
48
Slide - Estruturas e Ponteiros em C e C - Introdução à Computação 2 - 2023-2
Introdução à Computação 2
USP
54
Slide - Ordenação Por Fusão - Bubblesort e Sharkesort - 2023-2
Introdução à Computação 2
USP
61
Slide - Subalgoritmos em C e C - Introdução à Computação 2 - 2023-2
Introdução à Computação 2
USP
39
Slide - Algoritmos em Busca de Vetores - 2023-2
Introdução à Computação 2
USP
9
Lista 2 - Algoritmos Recursivos
Introdução à Computação 2
USP
5
Normas Sobre Programação 2022-2
Introdução à Computação 2
USP
Texto de pré-visualização
1 Introdução à Computação II – 5954006 Introdução à Computação II 5954006 4. Algoritmos de Busca em Vetores Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 2 Introdução à Computação II – 5954006 4.1. Introdução 4.2. Busca Linear 4.2.1. Busca Linear Padrão 4.2.2. Busca Linear com Sentinela 4.3. Busca Binária 4.3.1. Busca Binária Padrão 4.3.2. Busca Binária Rápida Principais Tópicos 3 Introdução à Computação II – 5954006 • Existem diversas aplicações computacionais que devem lidar com uma grande quantidade de dados Exemplo: processamento de dados provenientes de transações bancárias • Busca (ou pesquisa) visa Recuperar informação a partir de uma massa de informações previamente armazenada Encontrar uma ou mais ocorrências de registros com chaves iguais às chaves de busca 4.1. Introdução 4 Introdução à Computação II – 5954006 • O conjunto de registros é normalmente chamado de Tabela Termo geralmente associado a entidades de vida curta – Exemplo: dados na memória principal durante a execução de um problema Arquivo Termo geralmente associado a entidades de vida longa – Exemplo: dados armazenados na memória secundária 4.1. Introdução 5 Introdução à Computação II – 5954006 • Nos processos de busca tratados neste curso, deve-se buscar um registro (estrutura em C) composto de Dados Informações Chave 4.1. Introdução ... typedef struct { tipo chave; // chave de busca ... // demais informações } item ; ... item a[N]; ... 6 Introdução à Computação II – 5954006 4.1. Introdução • No processo de busca, o conjunto de dados, entre os quais o registro que deve ser procurado, possui tamanho fixo Exemplo item a[N]; • Objetivo da busca Encontrar o item com a chave igual à chave de busca dada Exemplo – a[i].chave == chave_de_busca 7 Introdução à Computação II – 5954006 • Por simplicidade, considere que o tipo item é um vetor de inteiros no qual os elementos são as chaves a chave de busca é um inteiro N é uma constante que indica o número de elementos do vetor • Assim, objetivo da busca se resume a encontrar o índice i do elemento vetor[i] que é igual à chave de busca chave_de_busca 4.1. Introdução 8 Introdução à Computação II – 5954006 Exemplo 4.1. Dado um vetor a, buscar o índice do elemento igual à chave x Busca de x = 19, retorna i = 5 Busca de x = 45, retorna i = 0 Busca de x = 8, retorna i = 6 Busca de x = 43, retorna i = 3 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a 4.1. Introdução 9 Introdução à Computação II – 5954006 Exemplo 4.1. Dado um vetor a, buscar o índice do elemento igual à chave x Busca de x = 81? Depende da implementação Pode, por exemplo, retornar i = -1 se a busca não teve êxito 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a 4.1. Introdução 10 Introdução à Computação II – 5954006 4.2.1. Busca Linear Padrão • Busca Linear ou Busca Seqüencial Utilizada quando não há informações adicionais sobre os dados a serem pesquisados A busca linear termina quando for satisfeita uma das seguintes condições 1. O elemento é encontrado 2. Todo o vetor foi analisado Exemplo de algoritmo de busca linear ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 11 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 4.2.1. Busca Linear Padrão 12 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... V V 4.2.1. Busca Linear Padrão 13 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 1 i ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 4.2.1. Busca Linear Padrão 14 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... V V 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 1 i 4.2.1. Busca Linear Padrão 15 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 2 i 4.2.1. Busca Linear Padrão 16 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 • Término do laço: Se i ≠ N então x foi encontrado na posição i do vetor ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 2 i V F 4.2.1. Busca Linear Padrão 17 Introdução à Computação II – 5954006 • Análise do algoritmo Em média são efetuadas N/2 comparações de chaves – quando a chave existe na tabela e chaves podem ocorrer com mesma probabilidade Melhor caso 1 comparação, i.e., O(1) Pior caso requer N comparações de chaves A complexidade de tempo é O(N) 4.2.1. Busca Linear Padrão 18 Introdução à Computação II – 5954006 4.2.2. Busca Linear com Sentinela • Simplificação da expressão Booleana Introdução de um elemento adicional no final do vetor Um elemento é sempre retornado Retira necessidade de verificar se chegou no fim do vetor 19 Introdução à Computação II – 5954006 • Exemplo de algoritmo de busca linear com sentinela Ao final do laço, i = N implica que o elemento com chave x não foi encontrado 4.2.2. Busca Linear com Sentinela ... declare a[N+1] ... i 0 a[N] x enquanto ( a[i] ≠ x ) i i + 1 fim enquanto ... 20 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 4.2.2. Busca Linear com Sentinela 21 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela 22 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela V 23 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 1 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela 24 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 1 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela F 25 Introdução à Computação II – 5954006 4.2.2. Busca Linear com Sentinela • Análise do algoritmo Em média são efetuadas (N+1)/2 comparações de chaves – quando a chave existe na tabela e chaves podem ocorrer com mesma probabilidade Melhor caso 1 comparação, i.e., O(1) Pior caso requer N+1 comparações de chaves A complexidade de tempo é O(N) – Entretanto, o número de operações primitivas para a versão com Sentinela é menor que a versão padrão para N acima de uma determinada constante 27 Introdução à Computação II – 5954006 4.3. Busca Binária • Não é possível acelerar a busca sem que se disponha de maiores informações sobre a organização do vetor Para o caso geral, o problema de busca tem complexidade de tempo O(N) • No entanto, é possível alcançar uma eficiência maior se informações adicionais sobre o vetor estiverem disponíveis • Por exemplo, considere que os as chaves estejam ordenadas Exemplo: de forma crescente, ou seja a[0] ≤ a[1] ≤ … ≤ a[N-1] 28 Introdução à Computação II – 5954006 • Neste caso, pode se implementar a busca binária • A idéia principal é comparar a chave de um registro qualquer da seqüência (por exemplo, um registro no meio da seqüência) com a chave de busca x • Se chave de busca for igual à chave do registro a busca termina maior que a chave do registro, conclui-se que todos os elementos com índices menores ou iguais ao índice do registro podem ser eliminados nos próximos passos menor que a chave do registro, todos aqueles elementos com índices maiores ou iguais ao índice do registro podem ser eliminados nos próximos passos 4.3. Busca Binária 29 Introdução à Computação II – 5954006 • Embora a escolha do ponto do início da busca (m no algoritmo exemplificado) possa ser arbitrária, já que o algoritmo funciona independentemente dele, o valor desta variável influencia diretamente a eficiência do algoritmo • Para a solução ótima, deve-se eliminar o maior número possível de elementos em futuras buscas Assim, a solução ótima é escolher um elemento no meio (ou mais próximo possível do meio) da seqüência 4.3.1. Busca Binária Padrão 30 Introdução à Computação II – 5954006 Exemplo 4.4. Simule o processo de busca binária para x = 78 4.3.1. Busca Binária Padrão 0 1 2 3 4 5 6 7 5 6 12 23 45 59 78 97 a 31 Introdução à Computação II – 5954006 4.3.1. Busca Binária Padrão • Exemplo de algoritmo de busca binária ... L 0 R N - 1 sucesso 0 enquanto ( ( L ≤ R ) e ( sucesso = 0 ) ) m floor( (R+L)/2 ) se ( a[m] = x ) sucesso 1 senão se ( a[m] < x ) L m + 1 senão R m – 1 fim se fim se fim enquanto ... 32 Introdução à Computação II – 5954006 Exemplo 4.5. Simule o processo de busca binária para x = 7 4.3.1. Busca Binária Padrão 0 1 2 3 4 5 6 7 5 6 12 23 45 59 78 97 a 33 Introdução à Computação II – 5954006 • A eficiência pode ser ligeiramente melhorada se o sucesso (término) da busca não for testado em todo loop Lembre-se que sucesso ocorre apenas uma vez em todo o processo • Além disso, pode-se abandonar a meta de terminar a busca no instante exato em que for encontrado o elemento pesquisado Isso parece pouco inteligente à primeira vista, mas observando-se mais a fundo, pode-se constatar que o ganho em eficiência em cada passo será maior do que a perda ocasionada pela comparação de alguns poucos elementos adicionais 4.3.2. Busca Binária Rápida 34 Introdução à Computação II – 5954006 • Exemplo de algoritmo de busca binária rápida Se ao término do loop, a condição a[R] = x for satisfeita, então o elemento procurado foi encontrado na posição R Caso contrário, o elemento não foi encontrado 4.3.2. Busca Binária Rápida ... L 0 R N - 1 enquanto ( L < R ) m floor( (R+L)/2 ) se ( a[m] < x ) L m + 1 senão R m fim se fim enquanto ... 35 Introdução à Computação II – 5954006 Exemplo 4.6. Simule o processo de busca binária rápida para x = 78 0 1 2 3 4 5 6 7 5 6 12 23 45 59 78 97 a 4.3.2. Busca Binária Rápida 36 Introdução à Computação II – 5954006 • Análise do número de comparações entre chaves No início, o número de elementos a ser examinado é N . Dividindo por dois até que reste apenas um elemento, teremos 1=N/2p sendo p o número de divisões O número de comparações de chaves em um conjunto com N registros é aproximadamente log2(N) 4.3.2. Busca Binária Rápida 37 Introdução à Computação II – 5954006 • Análise O pior caso requer log2 N comparações Portanto a complexidade de tempo é O(log2 N) N Nº Comparações (pior caso) 8 3 128 7 1.024 10 32.768 15 1.048.576 20 1080 266 4.3.2. Busca Binária Rápida 38 Introdução à Computação II – 5954006 • Análise Considerando os algoritmos de busca vistos, a tabela seguinte mostra a ordem de grandeza dos números mínimo (Cmín), médio (Cméd) e máximo (Cmáx) de comparações de chaves Algoritmo Cmín Cméd Cmáx Busca Linear O (1) O (N) O (N) Busca Linear com Sentinela O (1) O (N) O (N) Busca Binária O (1) O (log2N) O (log2N) Busca Binária Rápida O (log2N) O (log2N) O (log2N) 4.3.2. Busca Binária Rápida 39 Introdução à Computação II – 5954006 Busca Binária Busca Linear Número de elementos (N) Número de comparações 4.3.2. Busca Binária Rápida
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
113
Slide - Método da Bolha - Bubblesort e Sharkesort - 2023-2
Introdução à Computação 2
USP
54
Slide - Ordenação Por Fusão - Bubblesort e Sharkesort - 2023-2
Introdução à Computação 2
USP
25
Slide - Ordenação por Seleção - 2023-2
Introdução à Computação 2
USP
4
Prática 4 - Recursão - Introdução à Computação 2 - 2023-2
Introdução à Computação 2
USP
48
Slide - Estruturas e Ponteiros em C e C - Introdução à Computação 2 - 2023-2
Introdução à Computação 2
USP
54
Slide - Ordenação Por Fusão - Bubblesort e Sharkesort - 2023-2
Introdução à Computação 2
USP
61
Slide - Subalgoritmos em C e C - Introdução à Computação 2 - 2023-2
Introdução à Computação 2
USP
39
Slide - Algoritmos em Busca de Vetores - 2023-2
Introdução à Computação 2
USP
9
Lista 2 - Algoritmos Recursivos
Introdução à Computação 2
USP
5
Normas Sobre Programação 2022-2
Introdução à Computação 2
USP
Texto de pré-visualização
1 Introdução à Computação II – 5954006 Introdução à Computação II 5954006 4. Algoritmos de Busca em Vetores Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 2 Introdução à Computação II – 5954006 4.1. Introdução 4.2. Busca Linear 4.2.1. Busca Linear Padrão 4.2.2. Busca Linear com Sentinela 4.3. Busca Binária 4.3.1. Busca Binária Padrão 4.3.2. Busca Binária Rápida Principais Tópicos 3 Introdução à Computação II – 5954006 • Existem diversas aplicações computacionais que devem lidar com uma grande quantidade de dados Exemplo: processamento de dados provenientes de transações bancárias • Busca (ou pesquisa) visa Recuperar informação a partir de uma massa de informações previamente armazenada Encontrar uma ou mais ocorrências de registros com chaves iguais às chaves de busca 4.1. Introdução 4 Introdução à Computação II – 5954006 • O conjunto de registros é normalmente chamado de Tabela Termo geralmente associado a entidades de vida curta – Exemplo: dados na memória principal durante a execução de um problema Arquivo Termo geralmente associado a entidades de vida longa – Exemplo: dados armazenados na memória secundária 4.1. Introdução 5 Introdução à Computação II – 5954006 • Nos processos de busca tratados neste curso, deve-se buscar um registro (estrutura em C) composto de Dados Informações Chave 4.1. Introdução ... typedef struct { tipo chave; // chave de busca ... // demais informações } item ; ... item a[N]; ... 6 Introdução à Computação II – 5954006 4.1. Introdução • No processo de busca, o conjunto de dados, entre os quais o registro que deve ser procurado, possui tamanho fixo Exemplo item a[N]; • Objetivo da busca Encontrar o item com a chave igual à chave de busca dada Exemplo – a[i].chave == chave_de_busca 7 Introdução à Computação II – 5954006 • Por simplicidade, considere que o tipo item é um vetor de inteiros no qual os elementos são as chaves a chave de busca é um inteiro N é uma constante que indica o número de elementos do vetor • Assim, objetivo da busca se resume a encontrar o índice i do elemento vetor[i] que é igual à chave de busca chave_de_busca 4.1. Introdução 8 Introdução à Computação II – 5954006 Exemplo 4.1. Dado um vetor a, buscar o índice do elemento igual à chave x Busca de x = 19, retorna i = 5 Busca de x = 45, retorna i = 0 Busca de x = 8, retorna i = 6 Busca de x = 43, retorna i = 3 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a 4.1. Introdução 9 Introdução à Computação II – 5954006 Exemplo 4.1. Dado um vetor a, buscar o índice do elemento igual à chave x Busca de x = 81? Depende da implementação Pode, por exemplo, retornar i = -1 se a busca não teve êxito 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a 4.1. Introdução 10 Introdução à Computação II – 5954006 4.2.1. Busca Linear Padrão • Busca Linear ou Busca Seqüencial Utilizada quando não há informações adicionais sobre os dados a serem pesquisados A busca linear termina quando for satisfeita uma das seguintes condições 1. O elemento é encontrado 2. Todo o vetor foi analisado Exemplo de algoritmo de busca linear ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 11 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 4.2.1. Busca Linear Padrão 12 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... V V 4.2.1. Busca Linear Padrão 13 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 1 i ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 4.2.1. Busca Linear Padrão 14 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... V V 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 1 i 4.2.1. Busca Linear Padrão 15 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 2 i 4.2.1. Busca Linear Padrão 16 Introdução à Computação II – 5954006 Exemplo 4.2. Busca de x = 12 • Término do laço: Se i ≠ N então x foi encontrado na posição i do vetor ... i 0 enquanto ( i < N e a[i] ≠ x ) i i + 1 fim enquanto ... 0 1 2 3 4 5 6 7 45 56 12 43 95 19 8 67 a i 8 N 2 i V F 4.2.1. Busca Linear Padrão 17 Introdução à Computação II – 5954006 • Análise do algoritmo Em média são efetuadas N/2 comparações de chaves – quando a chave existe na tabela e chaves podem ocorrer com mesma probabilidade Melhor caso 1 comparação, i.e., O(1) Pior caso requer N comparações de chaves A complexidade de tempo é O(N) 4.2.1. Busca Linear Padrão 18 Introdução à Computação II – 5954006 4.2.2. Busca Linear com Sentinela • Simplificação da expressão Booleana Introdução de um elemento adicional no final do vetor Um elemento é sempre retornado Retira necessidade de verificar se chegou no fim do vetor 19 Introdução à Computação II – 5954006 • Exemplo de algoritmo de busca linear com sentinela Ao final do laço, i = N implica que o elemento com chave x não foi encontrado 4.2.2. Busca Linear com Sentinela ... declare a[N+1] ... i 0 a[N] x enquanto ( a[i] ≠ x ) i i + 1 fim enquanto ... 20 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 4.2.2. Busca Linear com Sentinela 21 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela 22 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 0 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela V 23 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 1 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela 24 Introdução à Computação II – 5954006 0 1 2 3 4 5 6 7 8 45 56 12 43 95 19 8 67 a i 8 N 1 i ... i 0 a[N] x enquanto (a[i] ≠ x ) i i + 1 fim enquanto ... Exemplo 4.3. Busca de x = 56 56 Sentinela 4.2.2. Busca Linear com Sentinela F 25 Introdução à Computação II – 5954006 4.2.2. Busca Linear com Sentinela • Análise do algoritmo Em média são efetuadas (N+1)/2 comparações de chaves – quando a chave existe na tabela e chaves podem ocorrer com mesma probabilidade Melhor caso 1 comparação, i.e., O(1) Pior caso requer N+1 comparações de chaves A complexidade de tempo é O(N) – Entretanto, o número de operações primitivas para a versão com Sentinela é menor que a versão padrão para N acima de uma determinada constante 27 Introdução à Computação II – 5954006 4.3. Busca Binária • Não é possível acelerar a busca sem que se disponha de maiores informações sobre a organização do vetor Para o caso geral, o problema de busca tem complexidade de tempo O(N) • No entanto, é possível alcançar uma eficiência maior se informações adicionais sobre o vetor estiverem disponíveis • Por exemplo, considere que os as chaves estejam ordenadas Exemplo: de forma crescente, ou seja a[0] ≤ a[1] ≤ … ≤ a[N-1] 28 Introdução à Computação II – 5954006 • Neste caso, pode se implementar a busca binária • A idéia principal é comparar a chave de um registro qualquer da seqüência (por exemplo, um registro no meio da seqüência) com a chave de busca x • Se chave de busca for igual à chave do registro a busca termina maior que a chave do registro, conclui-se que todos os elementos com índices menores ou iguais ao índice do registro podem ser eliminados nos próximos passos menor que a chave do registro, todos aqueles elementos com índices maiores ou iguais ao índice do registro podem ser eliminados nos próximos passos 4.3. Busca Binária 29 Introdução à Computação II – 5954006 • Embora a escolha do ponto do início da busca (m no algoritmo exemplificado) possa ser arbitrária, já que o algoritmo funciona independentemente dele, o valor desta variável influencia diretamente a eficiência do algoritmo • Para a solução ótima, deve-se eliminar o maior número possível de elementos em futuras buscas Assim, a solução ótima é escolher um elemento no meio (ou mais próximo possível do meio) da seqüência 4.3.1. Busca Binária Padrão 30 Introdução à Computação II – 5954006 Exemplo 4.4. Simule o processo de busca binária para x = 78 4.3.1. Busca Binária Padrão 0 1 2 3 4 5 6 7 5 6 12 23 45 59 78 97 a 31 Introdução à Computação II – 5954006 4.3.1. Busca Binária Padrão • Exemplo de algoritmo de busca binária ... L 0 R N - 1 sucesso 0 enquanto ( ( L ≤ R ) e ( sucesso = 0 ) ) m floor( (R+L)/2 ) se ( a[m] = x ) sucesso 1 senão se ( a[m] < x ) L m + 1 senão R m – 1 fim se fim se fim enquanto ... 32 Introdução à Computação II – 5954006 Exemplo 4.5. Simule o processo de busca binária para x = 7 4.3.1. Busca Binária Padrão 0 1 2 3 4 5 6 7 5 6 12 23 45 59 78 97 a 33 Introdução à Computação II – 5954006 • A eficiência pode ser ligeiramente melhorada se o sucesso (término) da busca não for testado em todo loop Lembre-se que sucesso ocorre apenas uma vez em todo o processo • Além disso, pode-se abandonar a meta de terminar a busca no instante exato em que for encontrado o elemento pesquisado Isso parece pouco inteligente à primeira vista, mas observando-se mais a fundo, pode-se constatar que o ganho em eficiência em cada passo será maior do que a perda ocasionada pela comparação de alguns poucos elementos adicionais 4.3.2. Busca Binária Rápida 34 Introdução à Computação II – 5954006 • Exemplo de algoritmo de busca binária rápida Se ao término do loop, a condição a[R] = x for satisfeita, então o elemento procurado foi encontrado na posição R Caso contrário, o elemento não foi encontrado 4.3.2. Busca Binária Rápida ... L 0 R N - 1 enquanto ( L < R ) m floor( (R+L)/2 ) se ( a[m] < x ) L m + 1 senão R m fim se fim enquanto ... 35 Introdução à Computação II – 5954006 Exemplo 4.6. Simule o processo de busca binária rápida para x = 78 0 1 2 3 4 5 6 7 5 6 12 23 45 59 78 97 a 4.3.2. Busca Binária Rápida 36 Introdução à Computação II – 5954006 • Análise do número de comparações entre chaves No início, o número de elementos a ser examinado é N . Dividindo por dois até que reste apenas um elemento, teremos 1=N/2p sendo p o número de divisões O número de comparações de chaves em um conjunto com N registros é aproximadamente log2(N) 4.3.2. Busca Binária Rápida 37 Introdução à Computação II – 5954006 • Análise O pior caso requer log2 N comparações Portanto a complexidade de tempo é O(log2 N) N Nº Comparações (pior caso) 8 3 128 7 1.024 10 32.768 15 1.048.576 20 1080 266 4.3.2. Busca Binária Rápida 38 Introdução à Computação II – 5954006 • Análise Considerando os algoritmos de busca vistos, a tabela seguinte mostra a ordem de grandeza dos números mínimo (Cmín), médio (Cméd) e máximo (Cmáx) de comparações de chaves Algoritmo Cmín Cméd Cmáx Busca Linear O (1) O (N) O (N) Busca Linear com Sentinela O (1) O (N) O (N) Busca Binária O (1) O (log2N) O (log2N) Busca Binária Rápida O (log2N) O (log2N) O (log2N) 4.3.2. Busca Binária Rápida 39 Introdução à Computação II – 5954006 Busca Binária Busca Linear Número de elementos (N) Número de comparações 4.3.2. Busca Binária Rápida