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

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

» Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 A procura/pesquisa de informação.

Apresentações semelhantes


Apresentação em tema: "» Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 A procura/pesquisa de informação."— Transcrição da apresentação:

1 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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 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

2 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 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 Sequencial de Informação 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

3 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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; 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; Considere para os exemplos que se vão seguir, que as variáveis e tipos foram definidos da seguinte forma: Pesquisa Sequencial de Informação 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

4 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 a) sem a utilização de sentinelas Function procura (chave:repnome; var nomes:tabnomes; var telefones:tabtelefones):integer; var i : integer; begin i:=1; while (nomes[i]<>chave) and (ichave) and (i

5 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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 (ichave) - ver se já se chegou ao fim da tabela: (i

6 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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: 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; 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. Colocação do valor Sentinela. Pesquisa Sequencial de Informação 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

7 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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: 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; 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; Pesquisa Sequencial de Informação 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

8 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 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 Binária de Informação 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

9 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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 chaveLimSup); if chave=Nomes[Meio] then procura:=telefones[Meio]; else procura:=-1 end; 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 chaveLimSup); if chave=Nomes[Meio] then procura:=telefones[Meio]; else procura:=-1 end; Pesquisa Binária de Informação 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

10 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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: a)os de ordenação interna – que ordenam os elementos que estão simultaneamente armazenados em memória, ex: tabela; b)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. Ordenação Bolha (Bubble 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

11 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 É 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. Ordenação por Borbulhamento (Bubble 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

12 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 Ordenação por Borbulhamento (Bubble 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. 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. 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

13 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 Ordenação por Borbulhamento (Bubble Sort) 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 begin repeat nenhumatroca:=true; for i:=1 to tamanho-1 do if numeros[i]>numeros[i+1] then begin troca(numeros[i],numeros[i+1]); nenhumatroca:=false; end until nenhumatroca:=true End; 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 begin repeat nenhumatroca:=true; for i:=1 to tamanho-1 do if numeros[i]>numeros[i+1] then begin troca(numeros[i],numeros[i+1]); nenhumatroca:=false; end until nenhumatroca:=true End; Exemplo 2: 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

14 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 Ordenação Shell 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. 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

15 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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 begin troca(numeros[i],numeros[i+intervalo]); nenhumatroca:=false; end until nenhumatroca:=true intervalo := intervalo div 2 until intervalo:=0 End; 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 begin troca(numeros[i],numeros[i+intervalo]); nenhumatroca:=false; end 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

16 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 Ordenação por Selecçã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... 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

17 » Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 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 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 begin posmenor:=i; for j:=i+1 to tamanho do if numeros[j]


Carregar ppt "» Algoritmos: Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 A procura/pesquisa de informação."

Apresentações semelhantes


Anúncios Google