Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Métodos de Busca em Estruturas de Dados, Notas de estudo de Direito

Este documento aborda diferentes métodos de busca em estruturas de dados, como busca sequencial e busca binária. Além disso, são apresentados algoritmos para busca em vetores, listas encadeadas e árvores de busca binária. A complexidade de cada método é discutida e exercícios em c são fornecidos para aplicação prática.

O que você vai aprender

  • Como funciona a busca sequencial em um vetor?
  • Qual é a diferença entre busca sequencial e busca binária?
  • Como implementar uma busca binária em um arranjo ordenado?
  • Como é a complexidade de cada método de busca?
  • Como buscar um elemento em uma lista encadeada?

Tipologia: Notas de estudo

2022

Compartilhado em 07/11/2022

Abelardo15
Abelardo15 🇧🇷

4.6

(58)

229 documentos

1 / 17

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
Método de Busca
O problema da busca (ou pesquisa) - Dado um
conjunto de elementos, onde cada um é identificado
por uma chave, o objetivo da busca é localizar, nesse
conjunto, o elemento que corresponde a uma chave
específica.
Vários métodos e estruturas de dados podem ser
empregados para se fazer busca.
Certos métodos de organização/ordenação de
dados podem tornar o processo de busca mais
eficiente
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe Métodos de Busca em Estruturas de Dados e outras Notas de estudo em PDF para Direito, somente na Docsity!

Método de Busca

  • O problema da busca (ou pesquisa) - Dado um

conjunto de elementos, onde cada um é identificado

por uma chave, o objetivo da busca é localizar, nesse

conjunto, o elemento que corresponde a uma chave

específica.

  • Vários métodos e estruturas de dados podem ser

empregados para se fazer busca.

  • Certos métodos de organização/ordenação de

dados podem tornar o processo de busca mais

eficiente

O conjunto de registros pode ser:

  • Um vetor de registros
  • Uma lista encadeada
  • Uma árvore
  • Etc.

O conjunto de registros pode ficar:

  • Totalmente na memória (busca interna)
  • Totalmente no armazenamento auxiliar (busca externa)
  • Dividida entre ambos

TIPO DE BUSCA

  1. Busca Seqüencial
  2. Busca Binária
  3. Arvore de Busca Binária
  4. Hash

TIPO DE BUSCA

BUSCA SEQUENCIAL

Outra maneira de implementar o algoritmo é usar um sentinela

  • Sentinela: consiste em adicionar um elemento de valor x no final da tabela
  • O sentinela garante que o elemento procurado será encontrado, o que elimina uma expressão condicional, melhorando a performance do algoritmo

A[N]=x; for(i=0; x!=A[i]; i++); if (i<n) return(i); /chave encontrada/ else return(-1); /sentinela encontrado/**

BUSCA SEQUENCIAL

  • Limitações do vetor - Tamanho fixo - Pode desperdiçar ou faltar espaço
  • Alternativa - Lista encadeada O que muda na busca seqüencial?

Exercício

Escrever em C a sub-rotina de busca de um elemento em uma lista encadeada

BUSCA SEQUENCIAL

Complexidade

  • Se o registro for o primeiro: 1 comparação
  • Se o registro procurado for o último: N comparações
  • Se for igualmente provável que o argumento

apareça em qualquer posição da tabela, em média: (n+1)/2 comparações

  • Se a busca for mal sucedida: N comparações
  • Logo, a busca seqüencial, no pior caso, é O(n)

BUSCA SEQUENCIAL

Para aumentar a eficiência

  • Reordenar continuamente a lista de modo que os

registros mais acessados sejam deslocados para o início

BUSCA BINÁRIA

Busca-se por 25

Em cada passo, o tamanho do arranjo em que se busca é dividido por 2

low mid high

low mid high

key < item[mid]

key > item[mid]

low high mid

low mid high

key = item[mid]

N itens

~N/2 itens

~N/4 itens

BUSCA BINÁRIA

Exercício

Escrever em C uma sub-rotina de busca binária por um elemento em um arranjo ordenado

Bin-Search(collection c , low , high , k )

int mid ;

if low > high

then return NIL;

mid = ( high + low )/2;

if k = key [ mid ]

then return key [ mid ]; else if k < key [ mid ] then return Bin_search( c , low , mid -1, k ); else return Bin_search( c , mid +1, high , k );

BUSCA BINÁRIA

PROPRIEDADE :

Suponho que x é um nó da arvore de busca binária, para qualquer nó y ,

se y está na sub-arvore esquerda do x , então key [ y ] ≤ key [ x ].

Se y está na sub-arvore direita do x , então key [ x ] ≤ key [ y ].

Para encontrar a chave 13 na arvore, seguimos o caminho 15 → 6 → 7 → 13

Algoritmo de Busca Geral

Tree-Search( x , k ) if x = NIL or k = key[ x ] then return x if k < key [ x ] then return Tree-Search( left [ x ], k ) else return Tree-Search( right [ x ], k )

Iterative-Tree-Search( x , k ) while x ≠ NIL and k ≠ key[ x ] do if k < key [ x ] then xleft [ x ] else xright [ x ] return x

Algoritmo Recursivo

Algoritmo Iterativo

Algoritmo de Busca do Valor Mínimo

Tree-Minimum( x ) while left [ x ] ≠ NIL do xleft [ x ] return x

Algoritmo de Busca do Valor Maximo

Tree-Maximum( x ) while right [ x ] ≠ NIL do xright [ x ] return x

Algoritmo de Busca do Valor Sucessor

Tree-Successor( x ) if right [ x ] ≠ NIL then return Tree-Minimum( right [ x ]) yp [ x ] while y ≠ NIL and x = right [ p [ x ]] do xy yp [ y ] return y

Exercício :

Escreva o algoritmo de busca do valor predecessor de um nó x em uma arvore de busca binária.

Algoritmo de Inserção

Tree-Insert( T , z ) y ← NIL xroot [ T ] while x ≠ NIL do yx if key [ z ] < key [ x ] then xleft [ x ] else xright [ x ] p [ z ] ← y if y = NIL then root [ T ] ← z else if key [ z ] < key [ x ] then left [ y ] ← z else right [ y ] ← z

Inserir um nó com chave 13.

Caso 2: deletar o nó com chave 16.

z (^) 5

Caso 3: deletar o nó com chave 5.

z

y

y

z

Caso 3: deletar o nó com chave 5.