Computação e Programação

Documentos relacionados
Computação e Programação

Computação e Programação. MEMec - LEAN 1º Semestre

Estruturas de dados complexas: cell arrays e structures

1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível?

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

Linguagem C vetores multidimensionais

Manipulação de strings e conversão entre tipos de dados

Universidade Veiga de Almeida Algoritmos e Linguagem I

ORDENAÇÃO EXTERNA DE ARQUIVOS: GERAÇÃO DE PARTIÇÕES CLASSIFICADAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

Ordenação e Pesquisa

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

Planificação Anual da disciplina de Programação e Sistemas de Informação 10º 1PI

ESTRUTURA DE DADOS ORDENANDO LISTAS

MÓDULO 3: Programação Estruturada

Projeto e Análise de Algoritmos

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados

Ordenação de Vectores

ESTRUTURA DE DADOS ORDENANDO LISTAS

ALGORITMOS DE ORDENAÇÃO

Limite assintótico para a ordenação, Ordenação em tempo linear

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

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

Manipulação de strings e conversão entre tipos de dados

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

COMPUTAÇÃO E PROGRAMAÇÃO 1º Semestre 2010/2011 MEMec, LEAN

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

6. Pesquisa e Ordenação

Bubble Sort. Tempo total O(n 2 )

Informática para Ciências e Engenharias 2014/15. Teórica 4

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

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

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

Computação e Programação

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

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

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

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Método de ordenação - objetivos:

CURSO PROFISSIONAL Técnico de Gestão e Programação de Sistemas Informáticos

Algoritmia e Programação APROG. Vetores. Algoritmia e Java. Nelson Freire (ISEP DEI-APROG 2012/13) 1/32

Transcrição:

Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teorica 18 Algoritmos de ordenação Função sort D.E.M. Área Científica de Controlo Automação e Informática Industrial Wrap Up da última aula Algoritmos de pesquisa A pesquisa é a operaçãode tentardetectaruma oumaisocorrênciasde um determinadovalor dentrode umalista ouvector Devolve normalmente o índice da ocorrência Pesquisa sequencial Utiliza-se em vectores ou listas desordenadas Pode ter que percorrer todo o vector se o valor procurado não fizer parte do mesmo Pesquisa binária Assume que o vector ou lista estão previamente ordenados Em geral é mais eficiente que a pesquisa sequencial Computação e Programação 2015 / 2016 2 1

Wrap Up da última aula Vectorização Nome que se dá à forma de codificar operações que envolvam vectores ou matrizes tirando partido da especialização da linguagem MATLAB neste tipo de estruturas >> mat = [4 5 6; 3 2 1]; >> for l = 1:size(mat,1) for c = 1:size(mat,2) mat(l,c)= mat(l,c) * 2; No MATLAB pode escrever-se apenas >> mat = [4 5 6; 3 2 1]; >> mat = mat * 2 Computação e Programação 2015 / 2016 3 Alinhamento da AT 18 Algoritmos de ordenação Função sort Computação e Programação 2015 / 2016 4 2

Ordenação A ordenação é oprocesso de pôr os elementos de uma lista por uma determinada ordem, ascente ou descente (existem muitos algoritmos de ordenação: Quick sort, Bubble sort, Shell sort, etc.) valor 85 70 100 95 80 91 Ascente valor 70 80 85 91 95 100 Computação e Programação 2015 / 2016 5 Ordenação por selecção (selection sort) Descrição (ascente/descente): 1. Encontrar o elemento menor/maiordo vector e trocá-lo com o da 1ª posição 2. Encontrar o elemento menor/maiordo resto do vector (da 2ª posição em diante) e trocá-lo com o elemento da 2ª posição 3. Repetir o procedimento 2.para as posições seguintes (3ª, 4ª,, etc.) até trocar o penúltimo elemento Computação e Programação 2015 / 2016 6 3

Ordenação por selecção (ascente) 1º passo valor 85 70 100 95 80 91 2º passo valor 70 85 100 95 80 91 3º passo valor 70 80 100 95 85 91 Computação e Programação 2015 / 2016 7 Ordenação por selecção (ascente) 4º passo valor 70 80 85 95 100 91 5º passo valor 70 80 85 91 100 95 valor 70 80 85 91 95 100 Computação e Programação 2015 / 2016 8 4

Ordenação por selecção (ascente) 1º passo 1 2 3 4 5 6 vec 85 70 100 95 80 91 indice_do_minimo = 1; %assume-se % procurar valor menor que o 1º for j = 2:length(vec) if vec(j) < vec(indice_do_minimo) indice_do_minimo = j; temp = vec(1); % salvaguardar valor a trocar vec(1) = vec(indice_do_minimo); % guardar o minimo na 1ª posição vec(indice_de_minimo) = temp; % completar a troca Computação e Programação 2015 / 2016 9 Ordenação por selecção (ascente) 2º passo 1 2 3 4 5 6 vec 70 85 100 95 80 91 indice_do_minimo = 2; %assume-se % procurar valor menor que o 2º for j = 3:length(vec) if vec(j) < vec(indice_do_minimo) indice_do_minimo = j; temp = vec(2); % salvaguardar valor a trocar vec(2) = vec(indice_do_minimo); % guardar o minimo na 2ª posição vec(indice_de_minimo) = temp; % completar a troca Computação e Programação 2015 / 2016 10 5

Ordenação por selecção (ascente) 3º passo 1 2 3 4 5 6 vec 70 80 100 95 85 91 indice_do_minimo = 3; %assume-se % procurar valor menor que o 3º for j = 4:length(vec) if vec(j) < vec(indice_do_minimo) indice_do_minimo = j; temp = vec(3); % salvaguardar valor a trocar vec(3) = vec(indice_do_minimo); % guardar o minimo na 3ª posição vec(indice_de_minimo) = temp; % completar a troca Computação e Programação 2015 / 2016 11 Ordenação por selecção (ascente) ( ) último passo 1 2 3 4 5 6 vec 70 80 85 91 100 95 Penúltimo elemento indice_do_minimo = 5; %assume-se % procurar valor menor que o 5º for j = 6:length(vec) if vec(j) < vec(indice_do_minimo) indice_do_minimo = j; temp = vec(5); % salvaguardar valor a trocar vec(5) = vec(indice_do_minimo); % guardar o minimo na 5ª posição vec(indice_de_minimo) = temp; % completar a troca Computação e Programação 2015 / 2016 12 6

Ordenação por selecção (ascente) % Repetir até ao penúltimo elemento do vector for i = 1:length(vec)-1 indice_do_minimo = i; %assume-se % procurar valor menor for j = i+1:length(vec) if vec(j) < vec(indice_do_minimo) indice_do_minimo = j; temp = vec(i); % salvaguardar valor a trocar vec(i) = vec(indice_do_minimo); % guardar o minimo vec(indice_de_minimo) = temp; % completar a troca Computação e Programação 2015 / 2016 13 Ordenação por selecção (ascente) Encontrar o mínimo no sub-vector Trocar o mínimo com o primeiro elemento do sub-vector Computação e Programação 2015 / 2016 14 7

Ordenação por selecção (ascente) >> vec = [85 70 100 95 80 91]; >> vec = ordenacaoporseleccao(vec) vec = 70 80 85 91 95 100 Computação e Programação 2015 / 2016 15 Ordenação de um vector de estruturas Ao ordenar um vector de estruturas, é comum fazer a ordenação apenas por um dos campos Turma AM21T Número da ficha Nome Numero Nota 1 João Silva 42331 14 2 Paulo Almeida 98734 17 3 Judite Antão 36331 15 Computação e Programação 2015 / 2016 16 8

Função do exemplo gerir alunos Função que apresenta a turma Computação e Programação 2015 / 2016 17 Ordenação de um vector de estruturas Apenas o campo relativo ao número de aluno é comparado Toda a estrutura é trocada de posição Computação e Programação 2015 / 2016 18 9

Ordenação de um vector de estruturas >> turma(1) = struct('nome','joão Silva','Numero',... 42331,'Nota',14); >> turma(2) = struct('nome','paulo Almeida',... 'Numero', 98734,'Nota',17); >> turma(3) = struct('nome','judite Antão',... 'Numero', 36331,'Nota',15); >> apresentaturma(turma) Numero Nome Nota 42331 João Silva 14 98734 Paulo Almeida 17 36331 Judite Antão 15 Computação e Programação 2015 / 2016 19 Ordenação de um vector de estruturas >> turma_ord = ordenacaovectorestruturas(turma); >> apresentaturma(turma_ord) Numero Nome Nota 36331 Judite Antão 15 42331 João Silva 14 98734 Paulo Almeida 17 Computação e Programação 2015 / 2016 20 10

Ordenação através de indexação Na ordenação através de indexação é criado um vector de índices que representa a ordenação da lista, mas a lista original não é modificada Estes índices aplicados ao vector original formam o vector ordenado valor 85 70 100 95 80 91 Ascente valor 85 70 100 95 80 91 índices ordem 2 5 1 6 4 3 Computação e Programação 2015 / 2016 21 Ordenação através de indexação Descrição: 1. Inicializar elementos do vector de índices com os valores entre 1 e o comprimento da lista 2. Utilizar qualquer algoritmo de ordenação, mas usando como índices no algoritmo os elementos do vector de índices criado 3. Quando o algoritmo de ordenação fizer a troca, trocam-se os elementos do vector de índices em vez dos elementos do vector de dados original Computação e Programação 2015 / 2016 22 11

Ordenação através de indexação 1º passo valor 85 70 100 95 80 91 índices ordem 1 2 3 4 5 6 2º passo valor 85 70 100 95 80 91 índices ordem 2 1 3 4 5 6 Computação e Programação 2015 / 2016 23 Ordenação através de indexação 3º passo valor 85 70 100 95 80 91 índices ordem 2 5 3 4 1 6 4º passo valor 85 70 100 95 80 91 índices ordem 2 5 1 4 3 6 Computação e Programação 2015 / 2016 24 12

Ordenação através de indexação 5º passo valor 85 70 100 95 80 91 índices ordem 2 5 1 6 3 4 O vector orginal não foi modificado A ordenação está representada por índices dos elementos do vector original valor 85 70 100 95 80 91 índices ordem 2 5 1 6 4 3 Computação e Programação 2015 / 2016 25 Ordenação através de indexação 1º passo 1 2 3 4 5 6 vec 85 70 100 95 80 91 indvec 1 2 3 4 5 6 posicao_indice_do_minimo = 1; %assume-se % procurar valor menor que o apontado pelo indice em 1 for j = 2:length(vec) if vec(indvec(j)) < vec(indvec(posicao_indice_do_minimo)) posicao_indice_do_minimo = j; temp = indvec(1); indvec(1) = indvec(posicao_indice_do_minimo); indvec(posicao_indice_do_minimo) = temp; Computação e Programação 2015 / 2016 26 13

Ordenação através de indexação 2º passo 1 2 3 4 5 6 vec 85 70 100 95 80 91 indvec 2 1 3 4 5 6 posicao_indice_do_minimo = 2; %assume-se % procurar valor menor que o apontado pelo indice em 2 for j = 3:length(vec) if vec(indvec(j)) < vec(indvec(posicao_indice_do_minimo)) posicao_indice_do_minimo = j; temp = indvec(2); indvec(2) = indvec(posicao_indice_do_minimo); indvec(posicao_indice_do_minimo) = temp; Computação e Programação 2015 / 2016 27 Ordenação através de indexação Cria vector de índices inicial Compara utilizando índices guardados no vector de índices Troca elementos do vector de índices Computação e Programação 2015 / 2016 28 14

Ordenação através de indexação >> x = [85 70 100 95 80 91]; >> index = criarindicesordenacao(x) index = 2 5 1 6 4 3 >> x(index) ans = 70 80 85 91 95 100 >> x x = 85 70 100 95 80 91 A ordenação através de indexação permite tratar os dados como se estivessem ordenados, mas sem ordenar realmente um vector! Computação e Programação 2015 / 2016 29 Alinhamento da AT 18 Algoritmos de ordenação Função sort Computação e Programação 2015 / 2016 30 15

Função pré-definida sort Descrição: ordena um vector, uma matriz, ou um cell array Sintaxe: [Y,I] = sort(x,dimensao,modo) >> vec = [85 70 100 95 80 91]; >> vec = sort(vec) vec = 70 80 85 91 95 100 >> sort(vec,2,'desc') ans = 100 95 91 85 80 70 Computação e Programação 2015 / 2016 31 Função de pré-definida sort >> mat = [4 6 2;8 3 7;9 7 1] mat = 4 6 2 8 3 7 9 7 1 >> sort(mat) % ou sort(mat,1) ans = 4 3 1 8 6 2 9 7 7 Ordena todas as colunas (ascente) Computação e Programação 2015 / 2016 32 16

Função de pré-definida sort >> mat = [4 6 2;8 3 7;9 7 1] mat = 4 6 2 8 3 7 9 7 1 >> mat = sort(mat,2,'desc') mat = 6 4 2 8 7 3 9 7 1 Ordena todas as linhas (descente) Computação e Programação 2015 / 2016 33 Função de pré-definida sort >> nomes = {'Rita';'Vitor';'Alzira';'Pedro';'Célia'} nomes = 'Rita' 'Vitor' 'Alzira' 'Pedro' 'Célia' >> sort(nomes) ans = 'Alzira' 'Célia' 'Pedro' 'Rita' 'Vitor' Ordena facilmente stringsarmazenadas em cell arrays Computação e Programação 2015 / 2016 34 17

Função de pré-definida sort >> [vec_ordenado,indices] = sort(vec) vec_ordenado = 70 80 85 91 95 100 indices = 2 5 1 6 4 3 >> vec(indices) ans = 70 80 85 91 95 100 Facilita bastante a ordenação por indexação Computação e Programação 2015 / 2016 35 Função de pré-definida sort Ordenar um vector de estruturas por campo numérico >> turma(1) = struct('nome','joão Silva','Numero',... 42331,'Nota',14); >> turma(2) = struct('nome','paulo Almeida',... 'Numero', 98734,'Nota',17); >> turma(3) = struct('nome','judite Antão',... 'Numero', 36331,'Nota',15); >> apresentaturma(turma) Numero Nome Nota 42331 João Silva 14 98734 Paulo Almeida 17 36331 Judite Antão 15 Computação e Programação 2015 / 2016 36 18

Função de pré-definida sort >> [num_ord index] = sort([turma.numero]) num_ord = index = 36331 42331 98734 3 1 2 >> turma = turma(index); >> apresentaturma(turma) Numero Nome Nota 36331 Judite Antão 15 42331 João Silva 14 98734 Paulo Almeida 17 É necessário construir um vector O vector de estruturas só é realmente ordenado quando se faz esta atribuição Computação e Programação 2015 / 2016 37 Função de pré-definida sort Ordenar um vector de estruturas por campo string >> [ca_nomes_ord index] = sort({turma.nome}) ca_nomes_ord = index = 'João Silva' 'Judite Antão' 'Paulo Almeida' 1 3 2 >> turma = turma(index); >> apresentaturma(turma) Numero Nome Nota 42331 João Silva 14 36331 Judite Antão 15 98734 Paulo Almeida 17 É necessário construir um cell array Computação e Programação 2015 / 2016 38 19

Referências Capítulo 13 de Stormy Attaway (2012), Matlab: A Practical Introduction to Programming and Problem Solving, Elsevier. As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva Computação e Programação 2015 / 2016 39 20