A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Pesquisa de Informação

Apresentações semelhantes


Apresentação em tema: "Pesquisa de Informação"— Transcrição da apresentação:

1 Pesquisa de Informação
GSI - 1º ano - Aula Teórica Estrutura e Organização de Dados Pesquisa de Informação A procura/pesquisa de informação é uma das actividades quotidianas mais frequentes; E consequentemente, uma das actividades preponderantes num sistema informático; Embora a pesquisa de informação (procurar um elemento entre um conjunto deles) pareça uma operação simples, criar programas eficientes em termos de procura levanta vários problemas; A pesquisa de informação é muitas vezes efectuada recorrendo a tabelas. Assim, vamos analisar dois métodos de pesquisa de informação em tabelas: 1. Procura sequencial ou linear 2. Procura binária Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

2 Pesquisa Sequencial de Informação
GSI - 1º ano - Aula Teórica Estrutura e Organização de Dados Pesquisa Sequencial de Informação Procura sequencial ou linear – é uma das formas mais simples de procurar dados numa tabela. O que se faz é percorrer a tabela: começa-se no 1º elemento e compara-se esse elemento com o valor dado, depois passa-se para o 2º elemento e compara-se com o valor dado, e assim sucessivamente até que o valor seja encontrado ou cheguemos ao fim da tabela. Podemos fazer este tipo de procura de 2 formas: a) sem a utilização de sentinelas b) com a utilização de sentinelas Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

3 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Sequencial de Informação Considere para os exemplos que se vão seguir, que as variáveis e tipos foram definidos da seguinte forma: Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” Program procuratel (input, output); Const maxpessoas = 1000; Type repnome = array [1..25] of char; tabnomes = array [1..maxpessoas] of repnome; tabtelefones = array [1..maxpessoas] of integer; Var nomes : tabnomes; telefones : tabtelefones; nomedes : repnome; i, telefone : integer; ESCE/IPS

4 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Sequencial de Informação a) sem a utilização de sentinelas Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” Function procura (chave:repnome; var nomes:tabnomes; var telefones:tabtelefones):integer; var i : integer; begin i:=1; while (nomes[i]<>chave) and (i<maxpessoas) do i:=i+1 if nomes[i]=chave then procura:=telefones[i]; else procura:=-1 end; Esta função efectua uma procura Sequencial na tabela Nomes tentando Encontrar a palavra Correspondente à Variável chave ! ESCE/IPS

5 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Sequencial de Informação O problema da solução anterior é que a parte do programa que diz respeito à procura propriamente dita, ou seja, a instrução: while (nomes[i]<>chave) and (i<maxpessoas) do i:=i+1; Tem de efectuar continuamente 2 testes, o que torna a operação de pesquisa menos eficiente: - ver se o nome que se procura foi encontrado: (nomes[i]<>chave) - ver se já se chegou ao fim da tabela: (i<maxpessoas) Note-se que o 1º teste é necessário mas o 2º só faz falta porque não podemos garantir que o nome que procuramos existe de facto na tabela. Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

6 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Sequencial de Informação b) Uma forma de prescindir do 2º teste é através da utilização do que se designa por valor sentinela, ou seja, um valor que é inserido na tabela para garantir que a procura tem sucesso: Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” Function procura (chave:repnome; var nomes:tabnomes; var telefones:tabtelefones):integer; var i : integer; Begin nomes[maxpessoascsent] := chave; i:=1; while (nomes[i]<>chave)do i:=i+1 if i<>maxpessoascsent then procura:=telefones[i]; else procura:=-1 end; Colocação do valor Sentinela. ESCE/IPS

7 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Sequencial de Informação Para se poder utilizar um valor sentinela é preciso que existe uma Posição adicional na tabela, ou seja, se a tabela tem n elementos terá de ter n+1 posições; Nessa posição adicional da tabela (n+1) coloca-se o valor sentinela; A seguir efectua-se a pesquisa normalmente; A última operação tem de ser verificar se o valor encontrado corresponde ao valor sentinela. O exemplo do slide anterior pressupõe que a definição inicial do programa principal passe a ser: Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” Program procuratel (input, output); Const maxpessoas = 1000; maxpessoascsent = 1001; Type repnome = array [1..25] of char; tabnomes = array [1..maxpessoascsent] of repnome; tabtelefones = array [1..maxpessoas] of integer; ESCE/IPS

8 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Binária de Informação 2. Procura binária – é uma alternativa à procura sequencial e é mais eficiente só que exige que os elementos que estão a ser pesquisados se encontrem ordenados. Este tipo de procura reduz o nrº de elementos a pesquisar para metade pois processa-se da seguinte forma: a) começa-se por se considerar o elemento que está no meio da tabela; b) se esse valor for maior (ou seja, aparecer depois) que o elemento que estamos a procurar então a procura será feita apenas na primeira metade da tabela; c) se esse valor for menor (ou seja, aparecer antes) que o elemento que estamos a procurar então a procura será feita apenas na segunda metade da tabela; Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

9 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Pesquisa Binária de Informação Function procura (chave:repnome; var nomes:tabnomes; var telefones:tabtelefones):integer; var LimInf, LimSup, Meio : integer; begin LimInf:=1; LimSup:=Maxpessoas; repeat meio:=(LimInf+LimSup) div 2; if chave<Nomes[Meio]then LimSup:=Meio-1; else LimInf:=Meio+1; until (chave=Nomes[Meio]) or (LimInf>LimSup); if chave=Nomes[Meio] then procura:=telefones[Meio]; procura:=-1 end; Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

10 Ordenação Bolha (Bubble Sort)
GSI - 1º ano - Aula Teórica Estrutura e Organização de Dados Ordenação Bolha (Bubble Sort) Já vimos que a ordenação da informação facilita as operações de busca tornando-as mais eficientes; Os algoritmos de ordenação dividem-se em 2 grandes grupos: os de ordenação interna – que ordenam os elementos que estão simultaneamente armazenados em memória, ex: tabela; os de ordenação externa – que ordenam elementos que por serem muitos não podem estar simultaneamente em memória, estando parte desses elementos armazenada no computador em ficheiros; Os algoritmos que vamos ver são apenas de ordenação interna, ou seja, algoritmos para a ordenação de dados armazenados em tabelas . Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

11 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Ordenação por Borbulhamento (“Bubble Sort”) É o mais simples e básico algoritmo de ordenação. A ideia básica é: percorrer todos os elementos a ordenar; comparar elementos adjacentes; trocar os pares de elementos que estejam fora de ordem; De um modo geral uma única passagem por todos os elementos não é suficiente para ordenar a tabela, sendo normal várias passagens pelos elementos. A tabela só estará ordenada quando for efectuada uma passagem por todos os elementos sem que seja efectuada qualquer troca. O único problema deste tipo de ordenação é que não se torna muito eficiente dado que apenas são trocados os valores adjacentes. Assim, se um elemento estiver muito longe da sua posição final ordenada é preciso efectuar muitas passagens até que seja colocado no seu devido lugar. Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

12 Ordenação por Borbulhamento (“Bubble Sort”)
GSI - 1º ano - Aula Teórica Estrutura e Organização de Dados Ordenação por Borbulhamento (“Bubble Sort”) Exemplo 1: Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” Program BSort(input,output); const n=10; var i, j : integer; temp : integer; a : array[1..n] of integer; begin for i:=1 to (n-1) do for j:=i+1 to n do if a[i]>a[j] then begin temp:=a[i]; a[i]:=a[j]; a[j]:=temp; end; end. ESCE/IPS

13 Ordenação por Borbulhamento (“Bubble Sort”)
GSI - 1º ano - Aula Teórica Estrutura e Organização de Dados Ordenação por Borbulhamento (“Bubble Sort”) Exemplo 2: Procedure ordena(.....); Const tamanho=10; var i : integer; nenhumatroca : boolean; numeros:array[1..tamanho]; Procedure troca (var x,y:integer); var temp :integer; begin temp:=x; x:=y; end repeat nenhumatroca:=true; for i:=1 to tamanho-1 do if numeros[i]>numeros[i+1] then troca(numeros[i],numeros[i+1]); nenhumatroca:=false; until nenhumatroca:=true End; Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

14 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Ordenação “Shell Sort” Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” É uma variante da ordenação por borbulhamento; A ideia básica: comparar e trocar por borbulhamento, não os elementos adjacentes mas os elementos separados por um certo intervalo (que é metade do número de elementos a ordenar); depois esse intervalo é dividido ao meio e o processo repete-se até que o intervalo seja 1. Esta ordenação é mais eficiente que a ordenação por borbulhamento dado que as primeiras passagens apenas consideram um subconjunto do total de elementos a ordenar e as últimas passagens, que são as que vão incidir sobre todos os elementos já os vão encontrar parcialmente ordenados. ESCE/IPS

15 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Ordenação “Shell Sort” Procedure ordena(.....); Const tamanho=10; var intervalo, i : integer; nenhumatroca : boolean; numeros:array[1..tamanho]; Procedure troca (var x,y:integer); var temp :integer; begin temp:=x; x:=y; end Begin intervalo:=tamanho div 2; repeat repeat nenhumatroca:=true; for i:=1 to tamanho-intervalo do if numeros[i]>numeros[i+intervalo] then troca(numeros[i],numeros[i+intervalo]); nenhumatroca:=false; until nenhumatroca:=true intervalo := intervalo div 2 until intervalo:=0 End; Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS

16 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Ordenação por Selecção (“Selection Sort”) Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” Consiste em percorrer todos os elementos a ordenar e a cada passagem coloca um elemento na posição correcta, ou seja: na primeira passagem o valor mais pequeno é colocado na posição correcta; na segunda passagem o segundo valor mais pequeno é colocado na posição correcta; e assim sucessivamente... ESCE/IPS

17 GSI - 1º ano - Aula Teórica
Estrutura e Organização de Dados Ordenação por Selecção (“Selection Sort”) Procedure ordena(.....); Const tamanho=10; var posmenor, i, j : integer; nenhumatroca : boolean; numeros:array[1..tamanho]; Procedure troca (var x,y:integer); var temp :integer; begin temp:=x; x:=y; end Begin for i:=1 to tamanho-1 do posmenor:=i; for j:=i+1 to tamanho do if numeros[j]<numeros[posmenor] then posmenor:=j; troca(numeros[i], numeros[posmenor]) End; Pesquisa de Informação: Procura Sequencial ou Linear Procura Binária Ordenação de Informação: Ordenação “Bubble Sort” Ordenação “Shell Sort” Ordenação “Selection Sort” ESCE/IPS


Carregar ppt "Pesquisa de Informação"

Apresentações semelhantes


Anúncios Google