A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ordenação: Radixsort Algoritmos e Estruturas de Dados II.

Apresentações semelhantes


Apresentação em tema: "Ordenação: Radixsort Algoritmos e Estruturas de Dados II."— Transcrição da apresentação:

1 Ordenação: Radixsort Algoritmos e Estruturas de Dados II

2 Introdução 2 Até agora vimos métodos de ordenação que comparam chaves Esta é uma abordagem geral que funciona para qualquer tipo de chave Uma abordagem alternativa para ordenação é processar as chaves por partes Por exemplo, começamos pelas primeiras letras do nome quando procuramos um nome num catálogo Não precisamos comparar chaves

3 Ideia 3 Quebrar uma chave em vários pedaços Dígitos de um número em uma dada base (radix) 312 tem os dígitos 3, 1 e 2 na base tem os dígitos na base 2 exemplo tem 6 caracteres (base 256) Ordenar de acordo com o primeiro pedaço Números cujo dígito mais à esquerda começa com 0 vêm antes de números cujo dígito mais à esquerda é 1 Podemos ordenar repetindo esse processo para todos os pedaços

4 Radixsort – Ordenando um dígito 4 Para isso iremos contar quantos elementos existem de cada valor DigitoContador

5 Radixsort – Ordenando um dígito 5 Para isso iremos contar quantos elementos existem de cada valor DigitoContador

6 Radixsort – Ordenando um dígito 6 Depois calcular a posição deles no vetor ordenado DigCPosicao

7 Radixsort – Ordenando um dígito 7 E finalmente colocar os elementos em suas posições DigCPosicao

8 Radixsort – Ordenando um dígito 8 Para isso iremos contar quantos elementos existem de cada valor DigCPosicao

9 Radixsort – Ordenando um dígito 9 Para isso iremos contar quantos elementos existem de cada valor DigCPosicao

10 Radixsort – Ordenando um dígito 10 Para isso iremos contar quantos elementos existem de cada valor DigCPosicao

11 Radixsort – Ordenando um dígito 11 Para isso iremos contar quantos elementos existem de cada valor DigCPosicao

12 Radixsort – Ordenando um dígito 12 Para isso iremos contar quantos elementos existem de cada valor DigCPosicao

13 Radixsort – Ordenando um dígito 13 Para isso iremos contar quantos elementos existem de cada valor DigCPosicao

14 Radixsort – Ordenando o vetor 14 Repetimos o mesmo processo para o próximo dígito Funciona por que o método do contador que usamos anteriormente é estável!

15 Radixsort – Ordenando o vetor 15 Repetimos o mesmo processo para o próximo dígito Funciona por que o método do contador que usamos anteriormente é estável!

16 Radixsort 16 void radix(int *v, int n, int base, int num_digitos) { int i, j, w, count[base], d, idx; int *aux = (int *) malloc(n * sizeof(int)); for(w = 0; w < num_digitos; w++) { for(j = 0; j < base; j++) count[j] = 0; // zera contador for(i = 0; i < n; i++) { // conta dígitos d = digito(v[i], w, base); count[d]++; } // até onde vão os elementos de cada dígito? for(j = 1; j < base; j++) count[j] += count[j-1]; for(i = 0; i < n; i++) { // adiciona nas posições d = digito(v[i], w, base); aux[ count[d-1] ] = v[i]; count[d-1]++; } for(i = 0; i < n; i++) v[i] = aux[i]; // retorna p/ v }

17 Radixsort – Análise 17 Nenhuma comparação Inspeções de dígitos: 2*n*num_digitos Se num_digitos for pequeno ou constante, então radixsort tem custo linear O( n ) Trocas: n*num_digitos Número de trocas também é O( n )

18 Vantagens e desvantagens 18 Vantagens: Estável Não compara as chaves Desvantagens: Nem sempre é fácil otimizar a inspeção de dígitos Depende do hardware Só é bom se o número de dígitos for pequeno Não funciona em qualquer tipo de chave Ex: números romanos

19 Exercícios Por que não usar o algoritmo de ordenação por seleção para identificar o k-ésimo menor elemento do vetor? 2. Mesmo com o uso da estratégia da mediana, mostre um vetor de entrada que cai no pior caso do quicksort. 3. Um vetor com elementos em ordem reversa é um heap? 4. Mostre que o heapsort não é estável. 5. Como seria a implementação do radixsort utilizando o TAD fila?

20 Radixsort – Análise 20 Nenhuma comparação Inspeções de dígitos: 2*n*num_digitos Se num_digitos for pequeno ou constante, então radixsort tem custo linear O( n ) Trocas: n*num_digitos Número de trocas também é O( n ) Quicksort é comparável ao radixsort porque o número de dígitos é da ordem de lg( n ) na base 2 e log 10 (n) na base 10


Carregar ppt "Ordenação: Radixsort Algoritmos e Estruturas de Dados II."

Apresentações semelhantes


Anúncios Google