USP – ICMC – SSC SSC0300 2º Semestre 2015

Slides:



Advertisements
Apresentações semelhantes
UFSC-CTC-INE INE Estruturas de Dados
Advertisements

Ordenação de Dados em Memória
Estruturas de Dados Marcio Gonçalves.
Linguagem de Programação IX Métodos de Ordenação
05/08/2011 Professor Leomir J. Borba- –
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Recursividade Prof. Rosana Palazon.
Algoritmos de Ordenação
Classificação de Dados
Algoritmos de Ordenação Aplicação a Listas de Registos
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
FACENS – Engenharia da Computação Lógica Computacional II
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
Classificação (Ordenação) de dados
Algoritmos Escher.
Método de Ordenação: InsertionSort
Métodos de Classificação por Seleção
Ordenação de Dados.
Algoritmos e Estrutura de Dados: Uma pequena motivação
Algoritmos de Ordenação
Algoritmos de Ordenação
Insertion Sort.
O Portal do Estudante de Computação
Algoritmos de ordenação
Pesquisa em Memória Primária
INTELIGÊNCIA ARTIFICIAL
Algoritmo de Ordenação
Ordenação em memória primária
Complexidade de algoritmos e Classificação (Ordenação) de dados
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Ordenação por inserção
Ceça Moraes – Introdução à Programação SI1
Procedimentos e Funções
Algoritmos de Ordenação
Módulo I Capítulo 5: Vetores
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações.
Como analisar um algoritmo
DCC 001 Programação de Computadores 2º Semestre de 2011
Métodos de Ordenação.
CLASSIFICAÇÃO DE DADOS
Algoritmos e Programação MC102
Prof. Alessandro Gonçalves
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Escola Secundária da Boa Nova 2013 Aplicações informáticas – Ensino da programação.
Classificação Ordenação de Dados
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Funcionamento Bucket sort funciona do seguinte modo: Inicialize um vetor de "baldes", inicialmente vazios. Vá para o vetor original, incluindo cada.
Classificação (Ordenação) de dados. Roteiro Contextualização e definições sobre Classificação Métodos de Classificação de Dados.
Curso Programadores de Informática
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos
Algoritmos com matrizes e vetores
Algoritmos de ordenação Estruturas avançadas de dados I
Transcrição da apresentação:

USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] Prof. Dr. Daniel Rodrigo Ferraz Bonetti LCR – Laboratório de Computação Reconfigurável Sala: 4-104 - ICMC E-mail: dbonetti@icmc.usp.br ou daniel.bonetti@gmail.com Página da disciplina: http://lcrserver.icmc.usp.br/~daniel/ssc0300/index

Métodos de Ordenação Simples Avançados Exercícios Bubble Sort (Bolha) Agenda: Simples Bubble Sort (Bolha) Selection Sort Insertion Sort Avançados Merge Sort Quick SortExercícios Exercícios

Ordenação de Dados: Vetor ou Lista de Dados (encadeada) Ordenar é o processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. A ordenação visa facilitar a recuperação e/ou uso posterior de itens do conjunto ordenado. Por exemplo: Dificuldade de se utilizar um catálogo telefônico se os nomes das pessoas não estivessem listados em ordem alfabética. 03 11 23 38 45 67 68 74 A C D L P R X Z

Ordenação de dados Métodos simples (+ Lentos) Bubble Sort Selection Sort Insertion Sort Método Otimizados (+ Rápidos) Merge Sort Quick Sort E muitos outros... E muitos outros...

Bubble Sort Exemplo: Suponha que se deseja classificar em ordem crescente o seguinte vetor de valores: Primeira Varredura: 28 26 30 24 25 28 26 30 24 25 Compara par (28, 26): troca 26 28 30 24 25 Compara par (28, 30): não troca 26 28 30 24 25 Compara par (30, 24): troca 26 28 24 30 25 Compara par (30, 25): troca Fim da primeira varredura Valor ordenado: 30 26 28 24 25 30

Bubble Sort Exemplo: Suponha que se deseja classificar em ordem crescente o seguinte vetor de valores: Segunda Varredura: 28 26 30 24 25 26 28 24 25 30 Compara par (26, 28): não troca 26 28 24 25 30 26 28 24 25 30 Compara par (28, 24): troca 26 24 28 25 30 Compara par (28, 25): troca Fim da segunda varredura Valores ordenados: 28, 30 26 24 25 28 30

Bubble Sort Exemplo: Suponha que se deseja classificar em ordem crescente o seguinte vetor de valores: Terceira Varredura: 28 26 30 24 25 26 24 25 28 30 26 24 25 28 30 Compara par (26, 24): troca 24 26 25 30 Compara par (26, 25): troca Fim da terceira varredura Valores ordenados: 26, 28, 30 24 25 26 28 30

Bubble Sort Exemplo: Suponha que se deseja classificar em ordem crescente o seguinte vetor de valores: Quarta Varredura: 28 26 30 24 25 24 25 26 28 30 24 25 26 28 30 Compara par (24, 25): não troca Fim da quarta e última varredura Valores ordenados: 24, 25, 26, 28, 30 24 25 26 28 30

Bubble Sort Código fonte: void bubbleSort(int a[], int n) { for (int i = n-1; i>0; i--) { // nro de varreduras (n-1) for (int j = 0; j<i; j++) { // percorre vetor if (a[j] > a[j+1]) { // troca par de posição int T = a[j]; a[j] = a[j+1]; a[j+1] = T; } // if } // for }

Bubble Sort - Comentários Método muito simples de implementar Método muito lento de executar Melhorias: Se não ocorreram trocas em uma passagem, já está ordenado Shaker Sort: Bubble Sort que vai-e-volta deslocando dados Complexidade: O(N*N) ou O(N2)

Selection Sort Princípio de classificação A seleção do menor dado é feita por pesquisa sequencial; O menor dado encontrado é permutado com a que ocupa a posição inicial do vetor, que fica reduzido de um elemento; O processo de seleção é repetido para a parte restante do vetor, até que todos os dados tenham sido selecionados e colocados em suas posições definitivas

Selection Sort Exemplo Suponha que se deseja classificar o seguinte vetor: Simulação das iterações necessárias para a classificação… 9 25 10 18 5 7 15 3

Selection Sort Iteração Menor dado (selecionado) Vetor ordenado até a posição Troca Vetor 1 9 25 10 18 5 7 15 3 3 9 e 3 2 3 25 10 18 5 7 15 9 5 25 e 5 3 3 5 10 18 25 7 15 9 7 10 e 7 1 4 3 5 7 28 25 10 15 9 9 18 e 9 2 5 3 5 7 9 25 10 15 18 10 25 e 10 3 6 3 5 7 9 10 25 15 18 15 25 e 15 4 7 3 5 7 9 10 15 25 18 18 25 e 18 5 8 3 5 7 9 10 15 18 25 6

Selection Sort Código fonte: void selectionSort (int a[], int n) { int min=0, ch; for (int i=0; i<n; i++) { min = i; // mínimo inicial for (int j = i + 1; j<n; j++) if (a [ j ] < a [ min ]) min = j; // acha o novo mínimo ch = a [ i ]; a [ i ] = a [ min ] ; // coloca o novo mínimo (min) a [ min ] = ch; // na posição correta (i) }

Selection Sort - Comentários Método muito simples de implementar Método muito lento de executar Complexidade: O(N*N) ou O(N2)

Insertion Sort Inicialmente Funcionamento Divide o vetor em 2 segmentos: o primeiro contendo os elementos já ordenados o segundo contendo os elementos ainda não ordenados No início: o 1º segmento terá apenas 1 elemento Funcionamento Pega o primeiro elemento do segmento não ordenado e procura seu lugar no segmento ordenado.

Insertion Sort Vetor original Divisão inicial 18 15 7 9 23 16 14 18 15 Não ordenado 18 15 7 9 23 16 14 Ordenado Primeira iteração 15 18 7 9 23 16 14 Segunda iteração 7 15 18 9 23 16 14

Insertion Sort Não ordenado 18 15 7 9 23 16 14 Ordenado 15 18 7 9 23 16 14 Após 1ª iteração 7 15 18 9 23 16 14 Após 2ª iteração 7 9 15 18 23 16 14 Após 3ª iteração 7 9 15 18 23 16 14 Após 4ª iteração 7 9 15 16 18 23 14 Após 5ª iteração 7 9 14 15 16 18 23 Após 6ª iteração

Insert Sort Código fonte: void insertionSort (int a[]) { for (int i = 1; i < a.length; i++) { int j = i; // pos do 1º elemento no seg. não ord. int B = a[i]; // 1º elemento no seg. não ord. while ((j > 0) && (a[j-1] > B)) { a[j] = a[j-1]; j--; } a[j] = B; buscando a posição do 1º elemento do segmento não ordenado no segmento ordenado

Insert Sort - Comentários Método bastante simples de implementar Método bastante lento de executar A inserção com poucos elementos é interessante de ser usada, mas a medida que vamos aumentando o número de dados o algoritmo pode ficar bastante lento Complexidade: O(N*N) ou O(N2)

Merge Sort Funcionamento Possivelmente você já fez isto na prática... “Dividir para conquistar” Divide os dados até que tenha blocos pequenos (2 dados), ordena estes blocos individualmente e depois junta os bloco Juntar dois blocos ordenados é mais fácil que ordenar eles completamente! Possivelmente você já fez isto na prática... Professores quando ordenam as provas em ordem alfabética, usualmente dividem em pilhas menores, ordenam estas pilhas individualmente (conjuntos menores), e depois juntam as pilhas mantendo a ordenação.

Merge Sort Exemplo 25 57 48 37 12 92 86 33 25 57 37 48 12 92 33 86 25 37 48 57 12 33 86 92 12 25 33 37 48 57 86 92

Merge Sort - Comentários Método mais complexo de implementar (algoritmo recursivo) Método mais rápido de executar Juntar dois blocos ordenados, mantendo a ordenação, é bem mais rápido e eficiente que ordenar tudo junto. Complexidade: O(N*LogN)

Quick Sort Método mais complexo de implementar (algoritmo recursivo) Método mais rápido de executar Algoritmo “Clássico” de ordenação rápida disponível em diversas bibliotecas. Complexidade: O(N*LogN)

Quick Sort – Como usar /* qsort example */ #include <stdio.h> /* printf */ #include <stdlib.h> /* qsort */ int values[] = { 40, 10, 100, 90, 20, 25 }; int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int main () int n; qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) printf ("%d ",values[n]); return 0; http://www.cplusplus.com/reference/cstdlib/qsort/

Heap Sort Método mais complexo de implementar (algoritmo recursivo) Método mais rápido de executar Algoritmo “Clássico” de ordenação rápida disponível em diversas bibliotecas. Complexidade: O(N*LogN)

Visualização através de animações http://www.sorting-algorithms.com/ Demonstração prática Visualização através de animações http://www.sorting-algorithms.com/

Informações sobre a disciplina USP - Universidade de São Paulo - São Carlos, SP ICMC - Instituto de Ciências Matemáticas e de Computação SSC - Departamento de Sistemas de Computação Prof. Dr. Daniel Rodrigo Ferraz Bonetti Web institucional: http://www.icmc.usp.br/ Página do Grupo de Pesquisa: http://www.lcr.icmc.usp.br/ E-mail: dbonetti@icmc.usp.br ou daniel.bonetti@gmail.com Disciplina de Linguagem de Programação e Aplicações SSC0300 http://disciplinas.stoa.usp.br/course/view.php?id=7891