Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Documentos relacionados
ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Algoritmos de Ordenação

Classificação Externa: Geração de Partições Classificadas

ALGORITMOS DE ORDENAÇÃO

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

Algoritmos de Ordenação

Bubble Sort. Tempo total O(n 2 )

Métodos de Ordenação Parte 3

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - I

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Projeto e Análise de Algoritmos

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

Carlos Eduardo Batista. Centro de Informática - UFPB

Classificação de Dados

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

Estruturas de Dados Algoritmos de Ordenação

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo

Métodos de Ordenação

BCC202 - Estrutura de Dados I

Pesquisa e Ordenação

Algoritmos de Ordenação em LISP

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Ordenação e Pesquisa

Algoritmos de Ordenação

Aula 18 Algoritmos básicos de busca e classificação

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Carlos Eduardo Batista. Centro de Informática - UFPB

Análise e Complexidade de Algoritmos

ESTRUTURA DE DADOS (TCC )

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

O Problema da Ordenação Métodos de Ordenação Parte 1

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

Algoritmos de Ordenação

Estrutura de Dados. ! Listas lineares. ! Como manipulá-las: ! estática. ! dinâmicas. ! pilhas. ! filas

BCC202 - Estrutura de Dados I

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

Pesquisa: operação elementar

Algoritmos de Ordenação: QuickSort

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

BCC202 - Estrutura de Dados I

TCC 00308: Programação de Computadores I Introdução

INF111 Programação II Aulas 11, 12, 13 Ordenação

Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

Algoritmia e Programação

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Análise e Complexidade de Algoritmos

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:

Paradigmas de programação

Ordenação de Dados. Ordenação de Dados

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Algoritmos e Estruturas de Dados. Décima sexta aula: Quicksort

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Capítulo V : A Linguagem Pascal Um Tipo Estruturado de Dados: o array 18. Para limite de n até 2 (* passagens de 1 até (n-1) *)

Classificação Externa: Geração de Partições Classificadas

Classificação por Seleção - selection sort

Métodos de ordenação. Bubble sort:

Introdução à Programação. Vanessa Braganholo

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO

Listas Lineares. continuando...

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Análise e Complexidade de Algoritmos

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Pesquisa e Ordenação. SCE121- Introdução a Programação. ICMC - USP - São Carlos 2009

Introdução à Programação

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia

Algoritmos de Busca em Vetores

Capítulo 14. Ordenação e pesquisa. Bubblesort. Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

AULA 03 ESTRUTURA DE DADOS

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Algoritmos e Estruturas de Dados: Ordenação

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

Transcrição:

Arquivos Sequenciais Estruturas de Dados II Vanessa Braganholo

Arquivos Sequenciais } Pq arquivos sequenciais?

Relembrando } Relembrando: uma tabela ou arquivo é um conjunto de registros que possuem a mesma estrutura

Relembrando: operações usuais } Criação: alocação e inicialização da área de dados, assim como de seus descritores } Destruição: liberação da área de dados e descritores usados na representação da tabela } Inserção: inclusão de novo registro na tabela } Exclusão: remoção de um registro da tabela } Alteração: modificação dos valores de um ou mais atributos/campos da tabela } Consulta: obtenção dos valores de todos os campos de um registro, dada uma chave de entrada

Consulta } Dada uma tabela com 10 registros e o valor de uma chave, como encontrar o registro correspondente na tabela?

Consulta } Dada uma tabela com 10 registros e o valor de uma chave, como encontrar o registro correspondente na tabela? } Solução: busca sequencial dentro do arquivo } Recuperar o primeiro registro, testar a chave. } Caso não seja a chave pesquisada, recuperar o segundo registro, testar, e assim por diante, até encontrar o registro ou chegar ao final do arquivo

Algoritmo Busca Sequencial proc sequencial (tab: tabela; ch: chave; e: int) {ENTRADA: tab: tabela onde será feita a pesquisa ch: chave que está sendo procurada SAÍDA: e: endereço do registro procurado se e=0 não existe registro com a chave ch }

Algoritmo Busca Sequencial proc sequencial (tab: tabela; ch: chave; e: int) var n, i: int begin n := #tab e := 0; for i:= 1 to n do if tab[i].chave = ch then begin e := i; escape; end; end; {sequencial}

Simular a execução do algoritmo para procurar a chave 201 CHAVE A B C D 300 A1 B1 C1 D1 200 A2 B2 C2 D2 215 A3 B3 C3 D3 201 A4 B4 C4 D4 230 A5 B5 C5 D5 205 A6 B6 C6 D6 225 A7 B7 C7 D7 280 A8 B8 C8 D8

E para 1 milhão de registros?

Solução de Contorno } As tabelas são mantidas ordenadas pela chave primária. } Deste modo não é necessário ir até o final do arquivo para saber que uma determinada chave não está no arquivo } Assim que uma chave maior do que a chave que está sendo procurada for encontrada, sabe-se que a chave procurada não está lá

Algoritmo Busca Sequencial em Tab. Ordenada proc seq_ordenado (tab: tabela; ch: chave; e: int) {ENTRADA: } tab: tabela onde será feita a pesquisa ch: chave que está sendo procurada SAÍDA: e: endereço do registro procurado se e=0 não existe registro com a chave ch

Algoritmo Busca Sequencial em Tab. Ordenada proc seq_ordenado (tab: tabela; ch: chave; e: int) var n, i: int begin n := #tab e := 0; i := 1; while (tab[i].chave < ch) and (i < n) do i := i + 1; if tab[i].chave = ch then e := i; end; {seq_ordenado}

Simular a execução do algoritmo para procurar a chave 202 CHAVE A B C D 200 A2 B2 C2 D2 201 A4 B4 C4 D4 205 A6 B6 C6 D6 215 A3 B3 C3 D3 225 A7 B7 C7 D7 230 A5 B5 C5 D5 280 A8 B8 C8 D8 300 A1 B1 C1 D1

Métodos de Ordenação } Vários métodos podem ser aplicados } Possível solução: } métodos de ordenação em memória 1. Ler arquivo e armazenar os dados num array em memória 2. Ordenar o array 3. Gravar novo arquivo com os dados ordenados

Convenção } Os algoritmos que veremos assumem que todas as chaves do arquivo estão num vetor A } Na prática isso será algo como A[i].chave

Exercício } Construir um algoritmo para ordenar os seguintes valores 6 8 2 1 7 9 3

Ordenação por Inserção } Insertion Sort } Nome do método se deve ao fato de que no i-ésimo passo ele insere o i-ésimo elemento A[i] na posição correta entre A[1], A[2],, A[i-1] que já foram previamente ordenados

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 300 200 215 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 300 215 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 300 215 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 300 215 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 300 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 215 300 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 215 300 201

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 215 300

Funcionamento 1. Assume que o primeiro valor já está ordenado 2. Pega o próximo valor, compara com os anteriores até descobrir em que posição ele deveria estar 3. Abre espaço no vetor para encaixar o valor na posição correta 4. Encaixa o valor na posição correta 5. Se vetor ainda não terminou, volta para o passo 2 A 200 201 215 300

Ordenação por Inserção (Insertion Sort) proc insertionsort(a: array, size: int) { ENTRADA: A: array com as chaves size: tamanho do array SAÍDA: A: array ordenado } begin for j := 2 to size do begin key := A[j]; i := j 1; while (i > 0) and (A[i] > key) do begin A[i+1] := A[i]; i := i 1; end; A[i+1] := key end; end;

Complexidade: Insertion Sort } Muito custoso: } complexidade pior caso O(n 2 ) } complexidade caso médio O(n 2 ) } complexidade melhor caso O(n)

Bubble Sort } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca

Funcionamento } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca A 300 200 215 201

Funcionamento } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca A 200 300 215 201

Funcionamento } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca A 200 215 300 201

Funcionamento } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca A 200 215 201 300

Funcionamento } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca A 200 215 201 300

Funcionamento } Comparar cada valor com o sucessor } Se valor for menor que o sucessor, troca de posição } Faz várias passadas } Pára quando não houver mais troca A 200 201 215 300

Bubble Sort proc bubblesort(a: registro, size: int) { ENTRADA: A: registro com as chaves size: tamanho do registro SAíDA: A: registro ordenado }

Bubble Sort proc bubblesort(a: registro, size: int) begin houvetroca := true; # uma variável de controle m := size 1; while houvetroca do begin ` houvetroca := falso for i := 1 to m do begin if (A[i] > A[i + 1]) then begin ch := A[i]; A[i] := A[i+1]; A[i+1] := ch; k := i; houvetroca := verdade; end; end; m := k; //local da última troca efetuada end; end;

Complexidade: Bubble Sort } Muito custoso: } complexidade pior caso O(n 2 ) } complexidade caso médio O(n 2 ) } complexidade melhor caso O(n)

Quick Sort } Método dividir para conquistar 1. Escolha um elemento da lista para ser o pivô (escolha o maior elemento entre os dois primeiros elementos mais à esquerda do vetor) 2. Rearranje a lista de forma que todos os elementos anteriores ao pivô sejam menores que ele, e todos os elementos posteriores ao pivô sejam maiores ou iguais a ele. Ao fim do processo o pivô estará em sua posição final e haverá duas sublistas não ordenadas. Essa operação é denominada partição; 3. Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores;

Quick Sort: Funcionamento } pivô: v Fonte: A. Aho, J. Hopcroft, J. Ullman. Data Structures and Algorithms, 1987. pg. 262

Quick Sort function findpivot (i,j: integer): integer {retorna 0 se A[i],, A[j] possuem chaves idênticas caso contrário retorna o índice da maior das duas chaves distintas mais à esquerda } var firstkey: keytype; {valor da primeira chave encontrada} k: integer; begin firstkey := A[i]; for k:= i + 1 to j do {procura uma chave diferente} if A[k] > firstkey then {seleciona a maior chave} return (k) else if A[k] < firstkey then return (i); return (0); {não encontrou chaves diferentes} end; {fim da função}

Quick Sort function partition (i,j: integer; pivot:keytype): integer {particiona A[i],, A[j] tal que as chaves maiores que o pivot são colocadas à esquerda e as maiores ou iguais são colocadas à direita. Retorna o início do grupo da direita } var l,r: integer; {cursores} begin l := i; r := j; repeat swap (A[l],A[r]); {agora começa a fase de busca} while A[l] < pivot do l := l + 1; while A[r] >= pivot r := r 1; until l > r; return (l); end; {fim da função}

Quick Sort function quicksort (i,j: integer): integer { ordena os elementos A[i],, A[j] } var pivot: keytype; {o valor do pivot } pivotindex: integer; {o índice do elemento de A cuja chave é o pivot } k: integer; {início do índice para o grupo de elementos >= pivot } begin pivotindex := findpivot(i,j); if pivotindex <> 0 then begin {não faz nada se todas as chaves são iguais} pivot := A[pivotindex].key; k := partition(i,j,pivot); quicksort(i, k-1); quicksort(k,j); end; {fim da função}

Complexidade: Quick Sort } complexidade pior caso O(n 2 ) } complexidade caso médio O(n log n) } complexidade melhor caso O(n log n)

Exercício } Faça o teste de mesa do algoritmo Quick Sort para a seguinte sequência de números 6 8 2 1 7 9 3

Considerações 1. Todos os casos assumem que o arquivo cabe na memória 2. Se os arquivos são sequenciais, como atualizar o arquivo e mantê-lo ordenado? 1. Executar uma ordenação a cada atualização?