Algoritmos de Ordenação Aplicação a Listas de Registos

Slides:



Advertisements
Apresentações semelhantes
Programação Funcional
Advertisements

Celso C. Ribeiro Caroline T. Rocha
Linguagem de Programação IX Métodos de Ordenação
Base de Dados para a Gestão de Informação de Natureza Pedagógica
Pesquisa de Informação
UNIVERSIDADE LUTERANA DO BRASIL COMUNIDADE EVANGÉLICA LUTERANA SÃO PAULO Reconhecida pela Portaria Ministerial nº 681 de 07/12/89 – DOU de 11/12/89 Campus.
Algoritmos de Ordenação
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Cadeias e ficheiros.
29 Outubro 2005Funções: Zeros, Máximos e Mínimos1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Variáveis, matrizes e séries 2.1 Octave Variáveis, Matrizes e Séries.
9 de Março de 2006Trajectória de um Projéctil1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Funções, Condições e Ciclos.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 3.
Vectores (e Listas) : Pesquisa e Ordenação
6 Outubro de 2005Trajectória de um Projéctil1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006.
2 Dezembro de 2005Simulação com Modelos Diferenciais1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
17 Novembro 2006Algoritmos de Ordenação e Pesquisa Aplicação a Listas de Registos 1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º
Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.1 Octave Ficheiros.
1 Funções Trajectória de Projéctil DI/FCT/UNL 1º Semestre 2004/2005.
Funções, Execução Condicional, Recursividade e Iteração
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Vectores, Gráficos e Funções Trajectória de um Projéctil
17 Novembro 2005Leitura, Escrita e Processamento de Registos - Estruturas e Listas 1 Leitura, Escrita e Processamento de Registos Estruturas e Listas Jorge.
30 Novembro 2005Folha da Cálculo1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Strings 4.1 Octave Strings.
1 Processamento de Registos Listas e Estruturas DI/FCT/UNL 1º Semestre 2004/2005.
9 Março 2007Matrizes e Gráficos - Trajectória de um Projéctil1 Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores.
10 Novembro 2006Leitura, Escrita e Processamento de Registos - Estruturas e Listas 1 Leitura, Escrita e Processamento de Registos Estruturas e Listas Jorge.
Funções, Condições e Ciclos 3.1Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Octave Funções, Condições e Ciclos.
Introdução aos Computadores e à Programação
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
Pesquisa e Ordenação de Vectores
Introdução aos Computadores e Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Ficheiros (matrizes e registos)
16 Dezembro 2005Folha de Cálculo - Conclusão1 Folha da Cálculo - Conclusão Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre.
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2007/2008.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Octave Variáveis, Matrizes e Séries
Principais famílias de algoritmos
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Estatística Básica Utilizando o Excel
BCC101 – Matemática Discreta
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Classificação e Pesquisa de Dados
Algoritmos Escher.
Instrutor: Nilo Menezes
Listas e algoritmos (em Scratch)
Algoritmos de Ordenação
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Algoritmos de Ordenação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Grafos Árvores Geradoras.
Pesquisa em memória primária: hashing
Conversão de um NFA para um DFA com um exemplo
Ordenação por inserção
Introdução e Busca Cega
Algoritmos de Ordenação
Construção e Análise de Algoritmos
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Estrutura de dados kelvin Santiago
Complexidade em Tempo de um Algoritmo
Como analisar um algoritmo
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004

CLASSIFICAÇÃO DE DADOS
Escola Secundária da Boa Nova 2013 Aplicações informáticas – Ensino da programação.
Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville
USP – ICMC – SSC SSC0300 2º Semestre 2015
Transcrição da apresentação:

Algoritmos de Ordenação Aplicação a Listas de Registos Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação Aplicação a Listas de Registos Ordenação de Registos Um problema importante é o da apresentação dos registos de acordo com uma determinada ordem. Por exemplo: Apresentar uma listagem dos empregados por ordem alfabética; Apresentar uma listagem dos empregados ordenados por antiguidade; Complementarmente, podem-se adicionar restrições: Apresentar uma listagem, ordenada por ordem alfabética, dos empregados que tenham um vencimento superior a 1000 €; Apresentar uma listagem, ordenada por antiguidade, dos empregados que tenham um vencimento superior a 1000 €; Em qualquer dos casos é importante saber ordenar os registos de acordo com um determinado critério. Vamos então descrever dois algoritmos simples de ordenação (insert sort e bubble sort) e depois mostrar como podem ser aplicados na ordenação de registos (guardados em listas). 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação: insert sort Suponhamos que queríamos ordenar o seguinte vector: v0 = [12, 2, 9, 15, 10] Talvez a maneira mais intuitiva de o fazer seja através do algoritmo insert sort: Começa-se por criar um vector v1 apenas com o primeiro elemento de v0: v1 = [12] Acrescentam-se o restantes elementos, um a um, de modo a manter v1 sempre ordenado: v1 = [2, 12] v1 = [2, 9, 12] v1 = [2, 9, 12, 15] v1 = [2, 9, 10, 12, 15] O problema fundamental deste algoritmo é como é que se faz para inserir um elemento numa lista ordenada. 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação: insert sort Para inserir um elemento numa lista ordenada podemos percorrer a lista do fim para o principio até se descobrir a posição que o elemento deve ocupar na ordenação. Ao percorrer a lista podemos ir chegando uma posição à direita todos os elementos maiores do que o novo elemento de modo a arranjar espaço para ele: function L = insert(L0,x) L=L0; n=length(L); for i=n:-1:1 if (L(i)<x) L(i+1)=x; return; else L(i+1)=L(i); if (i==1) L(i)=x; return; endif endif endfor endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação: insert sort A seguinte função insert_sort começa por criar um vector inicial apenas com o primeiro elemento da lista para ordenar e vai acrescentando todos os outros elementos, um a um, recorrendo à função insert: function L = insert_sort(L0) n=length(L0); L=[L0(1)]; for i=2:n L=insert(L,L0(i)); endfor endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação: bubble sort Um outro algoritmo de ordenação, um pouco mais sofisticado, é o bubble sort. Suponhamos que queremos ordenar o vector: v0 = [12, 2, 9, 15, 10] Começa-se por percorrer o vector inicial (até ao penúltimo elemento) e trocar dois elementos sempre estiverem na ordem errada: v1 = [2, 12, 9, 15, 10] [2, 9, 12, 15, 10] [2, 9, 12, 10, 15] Agora, que garantidamente o último elemento do vector é o maior, repete-se o processo (para os elementos ainda não garantidamente ordenados) : v1 = [2, 9, 12, 10, 15] [2, 9, 10, 12, 15] v1 = [2, 9, 10, 12, 15] [2, 9, 10, 12, 15] v1 = [2, 9, 10, 12, 15] 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação: bubble sort O código Octave do algoritmo de ordenação bubble sort será então: function L = bubble_sort(L0) n=length(L0); L=L0; for k=n-1:-1:1 for i=1:k if L(i+1)<L(i) temp=L(i); L(i)=L(i+1); L(i+1)=temp; endif; endfor; endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Os algoritmos de ordenação como o bubble sort e o insert sort podem ser utilizados para ordenar uma lista de registos se considerarmos vectores de índices. Por exemplo: o vector [1, 2, 3, 4, 5] pode representar os cinco primeiros elementos de uma lista na sequência: 1º, 2º, 3º, 4º e 5º. o vector [5, 4, 3, 2, 1] pode representar os mesmos cinco elementos mas por ordem inversa. Se t é uma lista de registos, nth(t,i) é o elemento de índice i No exemplo da lista de empregados, o código, nome, vencimento e data do empregado de índice i são respectivamente: nth(t,i).cod nth(t,i).nome nth(t,i).venc nth(t,i).data 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Deste modo, a função listagem_nome_venc apresenta o nome e vencimento dos empregados de acordo com a ordenação dos índices representada no vector L: function listagem_nome_venc(t,L) n=length(L); for i=1:n printf("Nome: %-25s Vencimento: %7.2f \n“ ,nth(t,L(i)).nome, nth(t,L(i)).venc); endfor; endfunction Assim, para obtermos uma listagem ordenada basta ordenar os índices e chamar a função listagem_nome_venc. 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Para ordenar os índices pode-se usar um algoritmo de ordenação tendo o cuidado de “redefinir” a comparação entre dois elementos de acordo com o critério de ordenação que se pretende. Por exemplo, a função bubble_sort_list_cod usa o bubble sort para ordenar os índices existentes no vector L0 por ordem crescente do código do empregado: function L = bubble_sort_list_cod(t,L0) L=L0; n=length(L0); for k=n-1:-1:1 for i=1:k if nth(t,L(i+1)).cod < nth(t,L(i)).cod temp=L(i); L(i)=L(i+1); L(i+1)=temp; endif; endfor; endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Para ordenar os índices pode-se usar um algoritmo de ordenação tendo o cuidado de “redefinir” a comparação entre dois elementos de acordo com o critério de ordenação que se pretende. A função bubble_sort_list_venc é idêntica à anterior mas ordena os índices existentes no vector L0 por ordem crescente do vencimento do empregado: function L = bubble_sort_list_venc(t,L0) L=L0; n=length(L0); for k=n-1:-1:1 for i=1:k if nth(t,L(i+1)).venc < nth(t,L(i)).venc temp=L(i); L(i)=L(i+1); L(i+1)=temp; endif; endfor; endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Para ordenar os índices pode-se usar um algoritmo de ordenação tendo o cuidado de “redefinir” a comparação entre dois elementos de acordo com o critério de ordenação que se pretende. A função bubble_sort_list_data ordena os índices existentes no vector L0 por ordem crescente de antiguidade do empregado, e usa a função anterior para comparar duas datas: function L = bubble_sort_list_data(t,L0) L=L0; n=length(L0); for k=n-1:-1:1 for i=1:k if anterior(nth(t,L(i+1)).data,nth(t,L(i)).data)==1 temp=L(i); L(i)=L(i+1); L(i+1)=temp; endif; endfor; endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Para ordenar os índices pode-se usar um algoritmo de ordenação tendo o cuidado de “redefinir” a comparação entre dois elementos de acordo com o critério de ordenação que se pretende. A função bubble_sort_list_nome ordena os índices existentes no vector L0 por ordem alfabética dos nomes dos empregados, e usa a função my_str_norm_before para comparar dois nomes: function L = bubble_sort_list_nome(t,L0) L=L0; n=length(L0); for k=n-1:-1:1 for i=1:k if my_str_norm_before (nth(t,L(i+1)).nome,nth(t,L(i)).nome)==1 temp=L(i); L(i)=L(i+1); L(i+1)=temp; endif; endfor; endfunction 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Se além da ordenação estivermos também interessados em seleccionar apenas alguns registos, podemos previamente construir um vector apenas com os índices dos registos seleccionados. Por exemplo, a função select_venc cria um vector apenas com os índices de L0 cujos empregados tenham um vencimento superior a 1000 €: function L = select_venc(t,L0) L=[]; j=0; n=length(L0); for i = 1:n if nth(t,L0(i)).venc > 1000 j=j+1; L(j)=L0(i); endif; endfor; endfunction Assim para obter apenas estes índices ordenados pelo nome do empregado bastaria: L=select_venc(t,L0); L=bubble_sort_list_nome(t,L) 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos

Algoritmos de Ordenação e Listas Podemos agora dar resposta a cada uma das perguntas anteriores. Primeiro lê-se o ficheiro de texto para uma tabela: [t,n] = ler_tabela("empresa_aux_var.txt"); Para apresentar uma listagem dos empregados por ordem alfabética de nomes ou por antiguidade, teríamos que considerar todos os índices, ordená-los de acordo com o critério e apresentar os campos que queremos visualizar dos respectivos registos: L=[1:n]; L1=bubble_sort_list_nome(t,L);listagem_nome_venc(t,L1); L2=bubble_sort_list_data(t,L);listagem_nome_venc(t,L2); Se além disto estivermos apenas interessados nos empregados com um salário superior a 1000 €, temos que previamente seleccionar apenas os índices dos registos que satisfazem o critério: L=[1:n]; L=select_venc(t,L); L1=bubble_sort_list_nome(t,L);listagem_nome_venc(t,L1); L2=bubble_sort_list_data(t,L);listagem_nome_venc(t,L2); 24 Novembro 2005 Algoritmos de Ordenação Aplicação a Listas de Registos