CodeGym /Cursos /Python SELF PT /Comparação de Busca Linear e Binária

Comparação de Busca Linear e Binária

Python SELF PT
Nível 53 , Lição 3
Disponível

4.1 Comparação de Complexidade Temporal entre Busca Linear e Binária

Vamos comparar a complexidade temporal entre a busca linear e a busca binária.

Comparação de complexidade temporal entre busca linear e binária

Busca Linear:

  • Complexidade Temporal: O(n), onde n é o número de elementos no array ou lista.
  • Melhor caso: O(1) — elemento encontrado na primeira posição.
  • Caso médio: O(n/2) = O(n) — elemento encontrado em média na metade.
  • Pior caso: O(n) — elemento encontrado na última posição ou ausente.

Busca Binária:

  • Complexidade Temporal: O(log n), onde n é o número de elementos no array ou lista.
  • Melhor caso: O(1) — elemento encontrado no primeiro passo (elemento médio).
  • Caso médio: O(log n) — busca em array ordenado.
  • Pior caso: O(log n) — elemento encontrado no último passo ou ausente.

Exemplo de Análise de Complexidade Temporal

Busca Linear:

  • Array [1, 3, 5, 7, 9, 11, 13], elemento procurado 7.
  • Verificando cada elemento até encontrar 7 no índice 3.
  • Foram necessárias 4 verificações, correspondendo a O(n).

Busca Binária:

  • Array [1, 3, 5, 7, 9, 11, 13], elemento procurado 7.
  • Elemento médio (7) encontrado no primeiro passo.
  • Foi necessária 1 verificação, correspondendo a O(log n).

4.2 Vantagens e Desvantagens de Cada Método

Vamos ver as vantagens e desvantagens de cada tipo de busca.

Busca Linear:

Vantagens:

  • Simplicidade de implementação: Busca linear é muito fácil de implementar e entender.
  • Sem requisitos de dados: Busca linear pode ser aplicada a dados não ordenados.
  • Adequado para pequenos arrays: Busca linear é eficiente para arrays de tamanho pequeno.

Desvantagens:

  • Baixa eficiência para grandes arrays: A complexidade temporal O(n) a torna ineficiente para grandes arrays.
  • Tempo de execução prolongado: Para grandes arrays, a busca linear pode demorar, especialmente se o elemento procurado estiver próximo ao final do array ou ausente.

Busca Binária:

Vantagens:

  • Alta eficiência para grandes arrays: A complexidade temporal O(log n) a torna muito eficiente para grandes arrays.
  • Execução rápida: Busca binária é significativamente mais rápida que a busca linear ao lidar com grandes arrays ordenados.

Desvantagens:

  • Requer dados ordenados: A busca binária só funciona com arrays ordenados, o que pode exigir tempo extra para ordenação prévia.
  • Complexidade de implementação: Implementar a busca binária é mais complicado comparado à busca linear.

4.3 Quando Usar Cada Tipo de Busca

Vamos ver quando usar a busca linear e quando usar a busca binária.

Busca Linear.

Use busca linear quando:

  • O array ou lista não estão ordenados.
  • O tamanho do array ou lista é pequeno.
  • É necessária simplicidade e uma solução rápida sem custos adicionais para ordenação.
  • Precisa encontrar a primeira ocorrência ou todas as ocorrências de um elemento.
  • Os dados chegam em tempo real, e a ordenação prévia não é possível ou não é prática.

Busca Binária.

Use busca binária se:

  • O array ou lista estão ordenados.
  • O tamanho do array ou lista é grande.
  • Busca frequente de elementos no mesmo conjunto de dados (pode-se ordenar dados previamente uma vez).
  • Alta velocidade de busca é importante.
  • É aceitável gastar tempo na ordenação prévia dos dados.

4.4 Exemplos de Tarefas para Busca Linear

1. Busca em Lista Não Ordenada

É necessário encontrar o índice de um número específico em uma lista de números não ordenada.

Exemplo:


def linear_search(arr, target):
    for index, element in enumerate(arr):
        if element == target:
            return index
    return -1

arr = [4, 2, 7, 1, 9, 3]
target = 7
print(linear_search(arr, target))  # Saída: 2

2. Busca da Primeira Ocorrência no Array

É necessário encontrar a primeira ocorrência de um elemento específico em uma lista de strings.

Exemplo:


def linear_search(arr, target):
    for index, element in enumerate(arr):
        if element == target:
            return index
    return -1

words = ["apple", "banana", "cherry", "date", "banana"]
target = "banana"
print(linear_search(words, target))  # Saída: 1

3. Busca em Dados em Tempo Real

Encontrar um elemento em um fluxo de dados recebidos em tempo real.

Exemplo:


import random

def find_in_stream(stream, target):
    for index, element in enumerate(stream):
        if element == target:
            return index
    return -1

stream = [random.randint(1, 100) for _ in range(100)]
target = 50
print(find_in_stream(stream, target))

4.5 Exemplos de Tarefas para Busca Binária

1. Busca em Array Ordenado

É necessário encontrar o índice de um número específico em um array de números ordenado.

Exemplo:


def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

sorted_array = [1, 3, 5, 7, 9, 11, 13]
target = 7
print(binary_search(sorted_array, target))  # Saída: 3

2. Busca Frequente em Grande Conjunto de Dados

Buscar frequentemente elementos em um grande array de números ordenado.

Exemplo:


import random

sorted_large_array = sorted([random.randint(1, 1000000) for _ in range(1000000)])
target = random.choice(sorted_large_array)
print(binary_search(sorted_large_array, target))

3. Busca de Elemento em Base de Dados Ordenada

Encontrar um registro em uma base de dados ordenada por um campo chave.

Exemplo:


database = sorted([{"id": i, "value": f"record_{i}"} for i in range(100000)])
def binary_search_db(db, target_id):
    left, right = 0, len(db) - 1
    while left <= right:
        mid = (left + right) // 2
        if db[mid]["id"] == target_id:
            return db[mid]
        elif db[mid]["id"] < target_id:
            left = mid + 1
        else:
            right = mid - 1
    return None

target_id = 54321
print(binary_search_db(database, target_id))
1
Pesquisa/teste
Algoritmos de Busca, nível 53, lição 3
Indisponível
Algoritmos de Busca
Algoritmos de Busca
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION