Ir ao conteúdo

Posts recomendados

Postado

Gostaria de saber como fazer Busca Binária, sendo a busca uma string dentro de um vetor de registro(struct).

 

Se possível mostrar em forma de codigo.

 

  • Obrigado 1
Postado

@Lukas22D    geralmente a busca binária é com números , pois ela se baseia em um modo de procura  mais rápida ,  testando apenas a metade da qtd de elementos no vetor  já ordenado , tanto decrescente ou crescente ,  e em string não tem números para serem ordenados ,  então o que você pode fazer é ordenar as string's pelo tamanho  e então buscar por um números que representa o tamanho da string ,  e você pode ver um exemplo nesse link :

https://pt.wikipedia.org/wiki/Pesquisa_binária

  • Curtir 1
Postado
7 horas atrás, devair1010 disse:

 geralmente a busca binária é com números 

 

Não, não é o caso. A busca binária não é "com números". É com posições em um conjunto ordenado. Um conjunto de qualquer coisa que tenha noção de ordem.

 

7 horas atrás, devair1010 disse:

ela se baseia em um modo de procura  mais rápida ,  testando apenas a metade da qtd de elementos no vetor  já ordenado , tanto decrescente ou crescente

 

Não é o caso também. A busca binária não testa "metade da qtd de elementos". No pior caso testa log2 n do tamanho do vetor.

Ou seja, para um milhão de registros a busca binária faz no máximo 20 buscas e não 500.000

 

7 horas atrás, devair1010 disse:

então o que você pode fazer é ordenar as string's pelo tamanho  e então buscar por um números que representa o tamanho da string

 

Não. Apenas use strcmp() que compara as strings, supondo claro que tenham sido colocadas no vetor pela mesma ordem usada por strcmp().

 

A busca binária só faz sentido em um conjunto ordenado.

 

Exemplo

 

Busca binária em  int x[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18 } por 13

 

São 9 elementos: 0+8/2 = 4

  • x[4] = 10
    • 10<13 procura na segunda metade
  • (8-4)/2 = 2, 2+4 =6, x[6] = 14
    • 14>13 procura na primeira metade
  • (8-6)/2 = 1 + 6 = 7, x[7] = 16
    • 16>13 procura na primeira metade
  • (8-7)/2 = 0: fim da linha. Não tem 13....

 

Em casos de busca em um vetor simples como esse de inteiros se para a divisão quando o intervalo fica pequeno, algo como algumas centenas de itens, porque aí é melhor olhar um por um para aproveitar o chache do processador.

 

 

 

Em 08/11/2021 às 23:55, Lukas22D disse:

Gostaria de saber como fazer Busca Binária, sendo a busca uma string dentro de um vetor de registro(struct)

 

Veja o exemplo acima. É a mesma coisa. A busca é por posição num conjunto ordenado, como uma struct que tenha um vetor de strings

  • Obrigado 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!