Profa. Dra. Ana Paula Appel

Slides:



Advertisements
Apresentações semelhantes
AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
Advertisements

Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Geometria Computacional Fecho Convexo II
Programação em Java Prof. Maurício Braga
Inteligência Artificial
Experiments with Clustering as a Software Remodularization Method Nicolas Anquetil and Timothy C. Lethbridge University of Ottawa, Canada WCRE 1999:
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Linguagem de Programação IX Métodos de Ordenação
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
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.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Algoritmos de Ordenação
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Arquitetura de Sistemas Operacionais Francis Berenger Machado
Série de Exercícios.
Tópicos em Engenharia de Software II
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
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
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
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
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
SSC SISTEMAS OPERACIONAIS I Aulas 6 – Escalonamento de Processos
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
Árvores Balanceadas (AVL)
Métodos de Pesquisa: Seqüencial e Binária
Métodos de Classificação por Seleção: HeapSort
Classificação de dados por Troca: QuickSort
Classificação de dados por Intercalação: MergeSort
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Recorrências.
Indexação de Arquivos Página de rosto.
Gerência de Memória.
Campus de Caraguatatuba
Insertion Sort.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Algoritmos de Ordenação 4
Algoritmos de ordenação
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Comparação entre os métodos de ordenação
Complexidade de algoritmos e Classificação (Ordenação) de dados
Arquitetura de computadores
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Busca com informação e exploração
Introdução e Busca Cega
Mergesort Katia Guimarães.
Fundamentos de Programação
ANÁLISE ESTATÍSTICA II
Ceça Moraes – Introdução à Programação SI1
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
SISTEMAS OPERACIONAIS I
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Estrutura de Dados em C/C /2
Métodos de Ordenação.
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Métodos de Pesquisa: Seqüencial e Binária
Métodos de Ordenação Externa
Métodos de Pesquisa: Sequencial e Binária
Ordenação Professor Paulo Gomide 27 de outubro de 2015.
Classificação (Ordenação) de dados
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
Transcrição da apresentação:

Profa. Dra. Ana Paula Appel Quicksort Profa. Dra. Ana Paula Appel

História Quicksort é um algoritmo recursivo atribuído a Sir Charles Antony Richard Hoare, C.A.R. Hoare nasceu em Colombo no Ceilão (hoje Sri Lanka), de pais britânicos. Graduou-se na Universidade de Oxford em 1956. Estudou tradução computacional de linguagens humanas em visita à Universidade de Moscou, URSS. durante os estudos, foi preciso realizar a ordenação de palavras a serem traduzidas. o quicksort foi o algoritmo desenvolvido por Hoare para ordenar as palavras, em 1960, aos 26 anos.

Histórico Recebeu o Prêmio Turing da ACM de 1980, por “suas contribuições fundamentais para a definição e projeto de linguagens de programação”. Em 2009, desculpou-se por ter inventado a referência nula. É atualmente pesquisador sênior da Microsoft Research em Cambridge, England e professor emérito da Universidade de Oxford. There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more dificult.

Características e estratégia Quicksort é um algoritmo recursivo que utiliza a estratégia da divisão e conquista Não estável. Considerada a mais rápida ordenação baseada em comparações em arranjos. Na prática, se bem implementado, executa quase sempre em Θ(n log n). No pior caso pode executar em tempo Θ(n2). O núcleo do método está na partição realizada em uma lista a ser ordenada. Essa partição rearranja os elementos de uma lista A[p..r] e devolve um índice i em p..r tal que A[p..i-1] < A[i] < A[i+1..r]. O elemento v = A[i] é chamado de pivô.

Algoritmo Iniciar com uma lista L de n itens Escolher um item pivô v, de L Particionar L em duas listas não ordenadas, L1 e L2 L1: conterá todas as chaves menores que v L2: conterá todas as chaves maiores que v Itens com a mesma chave que v podem fazer parte de L1 ou L2 O pivô v não faz parte de nenhuma das duas listas Ordenar: L1 recursivamente, obtendo a lista ordenada S1 L2 recursivamente, obtendo a lista ordenada S2 Concatenar S1, v, S2 – produzindo a lista ordenada S

Algoritmo O pivô será sempre o primeiro elemento da lista. Na fase de partição, formaremos duas sub-listas, L1 e L2 L1 será ordenada recursivamente. Como foi alcançado o caso base, as listas serão concatenadas L2 será ordenada recursivamente.

Particionamento

Particionamento O passo principal do algoritmo Quicksort é o particionamento do vetor. Um número qualquer pode ser escolhido para pivo, geralmente é o elemento inicial; O vetor é dividido em 3 partes: p Números menores que p p Números maiores ou iguais a p

Particionamento To partition a[left...right]: 1. Set pivot = a[left], l = left + 1, r = right; 2. while l < r, do 2.1. while l < right & a[l] < pivot , set l = l + 1 2.2. while r > left & a[r] >= pivot , set r = r - 1 2.3. if l < r, swap a[l] and a[r] 3. Set a[left] = a[r], a[r] = pivot 4. Terminate

Particionamento Escolha um valor para ser usado como pivo, digamos o primeiro Começe da esquerda para o final e encontre o elemento que é maior ou igual ao pivo Faça uma busca de traz para a frente do vetor (direita para o começo) encontre o primeiro elemento que seja menor que o pivo Troque os dois elementos Repita o processo até não ter mais elemento

Example of partitioning choose pivot: 4 3 6 9 2 4 3 1 2 1 8 9 3 5 6 search: 4 3 6 9 2 4 3 1 2 1 8 9 3 5 6 swap: 4 3 3 9 2 4 3 1 2 1 8 9 6 5 6 search: 4 3 3 9 2 4 3 1 2 1 8 9 6 5 6 swap: 4 3 3 1 2 4 3 1 2 9 8 9 6 5 6 search: 4 3 3 1 2 4 3 1 2 9 8 9 6 5 6 swap: 4 3 3 1 2 2 3 1 4 9 8 9 6 5 6 search: 4 3 3 1 2 2 3 1 4 9 8 9 6 5 6 (left > right) swap with pivot: 1 3 3 1 2 2 3 4 4 9 8 9 6 5 6

Exemplos Embaralhado Ordenado Inverso

Escolha Pivo É crucial para o bom desempenho do método, já que a fase de partição é a parte crítica do algoritmo.. Há várias estratégias possíveis. Há outras opções como a escolha do elemento correspondente à mediana da lista, ou ainda o mais próximo da média. Para o caso em que se conhece a distribuição dos dados, podemos utilizar a estratégia de escolha do pivô mais adequada àquela distribuição. Quando não há conhecimento...

Escolha Pivo Escolha aleatória Escolher aleatoriamente um item da lista L como pivô Na média teremos uma partição da lista na proporção: 1/4 e 3/4 É possível provar que, se a partição da lista ocorrer pelo menos metade das vezes nessa proporção, o tempo de execução esperado é O(nlogn).

Escolha Pivo Mediana de três Escolher três elementos aleatoriamente, Utilizar como pivô o elemento correspondente à mediana dos três. Essa estratégia aumenta ainda mais as chances de se obter caso esperado de O(n log n). Como há um maior custo em se obter três elementos aleatórios e obter a mediana, essa estratégia é utilizada apenas em listas grandes. Quando a lista a ser ordenada tem tamanhos menores, utiliza-se a escolha aleatória simples.

Código

Complexidade – Melhor caso Se a escolha do pivô divide o arquivo em partes iguais (~meio) O vetor de tamanho n é dividido ao meio, cada metade é dividida ao meio, ..., m vezes => m≈O(n log2n) Cada parte do vetor realiza n comparações (com n = tamanho da partição atual do vetor) Pelo método da árvore de recorrência, tem-se que T(n)=O(nlog2n), no melhor caso

Pior Caso Se vetor já ordenado com escolha do pivô como um dos extremos (elemento 0 ou n-1) Subvetores desiguais, com n chamadas recursivas da função partição, eliminando-se 1 elemento em cada chamada Cada chamada recursiva faz n comparações T(n)=O(n2), no pior caso Igual ao bubble-sort

Particionamento – Pior Caso

Caso Médio Caso médio (Sedgewick e Flajelot, 1996) T(n) ≈ 1,386n log2 n – 0,846n = O(n log2 n) Um dos algoritmos mais rápidos para uma variedade de situações, sendo provavelmente mais utilizado do que qualquer outro algoritmo

Dicas Quase qualquer coisa que você tentar para "melhorar" Quicksort pode retardá-lo. Uma boa dica é mudar para um método de classificação diferentes quando um subvetor for pequeno Quicksort tem overhead demais para tamanhos pequenos Para vetores de grandes dimensões, pode ser uma boa ideia para verificar com antecedência se o vetor já está classificado

Comentários Finais Algoritmo mais rápido conhecido Para eficiência ótima, o pivo deve ser escolhida cuidadosamente A média de três é uma boa técnica para escolher o pivo Contudo não importa o que se faça o Quicksort muitas vezes será O(n2)