Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMaria da Assunção Almeida Rico Alterado mais de 8 anos atrás
1
ATAL – Prof. Jorge Figueiredo Ordenação - 1 2004.2 AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação
2
ATAL – Prof. Jorge Figueiredo Ordenação - 2 2004.2 AT AL Problema da Ordenação Formalmente pode assim ser definido: Ordenação Entrada: Uma seqüência de n números ‹a 1, a 2,..., a n ›. Saída: Uma reordenação da seqûëncia de entrada ‹a' 1, a' 2,..., a' n ›, onde a' 1 ≤ a' 2 ≤... ≤ a' n. Em geral, consideramos a seqüência de entrada como um array de n elementos.
3
ATAL – Prof. Jorge Figueiredo Ordenação - 3 2004.2 AT AL Estratégia de Ordenação Alguns algoritmos clássicos de ordenação utilizam divisão-e-conquista: –Quebra a entrada original em duas partes. –Recursivamente ordena cada uma das partes. –Combina as duas partes ordenadas. Duas categorias de soluções: –Quebra simples, combinação difícil. –Quebra difícil, combinação simples.
4
ATAL – Prof. Jorge Figueiredo Ordenação - 4 2004.2 AT AL Insertion Sort A: 1 j n ORDENADO chave InsertionSort(A, n) for j← 2 to n do chave ← A[j] ► insere A[j] na parte ordenada A[1..j-1] i ← j – 1 while i > 0 e A[i] > chave do A[i + 1] ← A[i] i ← i – 1 A[i + 1] ← chave
5
ATAL – Prof. Jorge Figueiredo Ordenação - 5 2004.2 AT AL Exemplo do Insertion Sort 45713232
6
ATAL – Prof. Jorge Figueiredo Ordenação - 6 2004.2 AT AL Exemplo do Insertion Sort 45713232
7
ATAL – Prof. Jorge Figueiredo Ordenação - 7 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232
8
ATAL – Prof. Jorge Figueiredo Ordenação - 8 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232
9
ATAL – Prof. Jorge Figueiredo Ordenação - 9 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232 71345232
10
ATAL – Prof. Jorge Figueiredo Ordenação - 10 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232 71345232
11
ATAL – Prof. Jorge Figueiredo Ordenação - 11 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232 71345232 71323452
12
ATAL – Prof. Jorge Figueiredo Ordenação - 12 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232 71345232 71323452
13
ATAL – Prof. Jorge Figueiredo Ordenação - 13 2004.2 AT AL Exemplo do Insertion Sort 45713232 74513232 71345232 71323452 27132345
14
ATAL – Prof. Jorge Figueiredo Ordenação - 14 2004.2 AT AL Análise do Insertion Sort Pior caso: –Entrada em ordem reversa. –O(n 2 ) Caso médio: –O(n 2 ) Melhor caso: –Entrada ordenada. –O(n)
15
ATAL – Prof. Jorge Figueiredo Ordenação - 15 2004.2 AT AL MergeSort Partição simples. Combinação mais trabalhosa. 3721547342010923 3721547342010923 9102023341354772 1359102023344772 simples ordena combina quebra difícil
16
ATAL – Prof. Jorge Figueiredo Ordenação - 16 2004.2 AT AL Análise do MergeSort Requer resolução de recorrência. Melhor caso = Caso médio = Pior caso. –O(n.logn) MergeSort(A, inicio, fim) if inicio < fim then meio ← (inicio + fim) div 2 MergeSort(A, inicio, meio) MergeSort(A, meio + 1, fim) Intercala(A, inicio, meio, fim)
17
ATAL – Prof. Jorge Figueiredo Ordenação - 17 2004.2 AT AL QuickSort Proposto por C.A.R. Hoare em 1962. Como o MergeSort, utiliza uma estratégia de divisão-e-conquista. A parte mais complicada é a quebra. A combinação é simples. Ao contrário do MergeSort, ordena in place. Ponto chave é encontrar uma estratégia de particionamento eficiente.
18
ATAL – Prof. Jorge Figueiredo Ordenação - 18 2004.2 AT AL QuickSort Divisão: escolher um pivô. Dividir o array em duas partes em torno do pivô. ≤ p p p > p pivô Conquista: Recursivamente ordenar os dois sub-arrays. Combinação: Trivial.
19
ATAL – Prof. Jorge Figueiredo Ordenação - 19 2004.2 AT AL QuickSort 3721547342010923 3201510923473472 2023344772135910 1359 2023344772 difícil ordena combina quebra simples
20
ATAL – Prof. Jorge Figueiredo Ordenação - 20 2004.2 AT AL Escolha do Pivô Particionamento pode ser feito de diferentes formas. A principal decisão é escolher o pivô. –Primeiro elemento do array. –Último elemento do array. –Elemento médio do array. –Elemento que mais ocorre no array. –Elemento mais próximo da média aritmética dos elementos do array.
21
ATAL – Prof. Jorge Figueiredo Ordenação - 21 2004.2 AT AL Rotina de Particionamento Em nossa rotina, o pivô é o último elemento. Particiona(A, L, R) p ← A[R] i ← R for j ← R – 1 downto L do if A[j] > p then i ← i – 1 swap A[i] ↔ A[j] swap A[R] ↔ A[i] return i
22
ATAL – Prof. Jorge Figueiredo Ordenação - 22 2004.2 AT AL Exemplo de Particionamento 3721547342010923
23
ATAL – Prof. Jorge Figueiredo Ordenação - 23 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i j
24
ATAL – Prof. Jorge Figueiredo Ordenação - 24 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j
25
ATAL – Prof. Jorge Figueiredo Ordenação - 25 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j
26
ATAL – Prof. Jorge Figueiredo Ordenação - 26 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j
27
ATAL – Prof. Jorge Figueiredo Ordenação - 27 2004.2 AT AL Exemplo de Particionamento 3721547342010923 ij
28
ATAL – Prof. Jorge Figueiredo Ordenação - 28 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i ← j
29
ATAL – Prof. Jorge Figueiredo Ordenação - 29 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423
30
ATAL – Prof. Jorge Figueiredo Ordenação - 30 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423
31
ATAL – Prof. Jorge Figueiredo Ordenação - 31 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423 3721510920473423
32
ATAL – Prof. Jorge Figueiredo Ordenação - 32 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423 3721510920473423
33
ATAL – Prof. Jorge Figueiredo Ordenação - 33 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423 3721510920473423
34
ATAL – Prof. Jorge Figueiredo Ordenação - 34 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423 3721510920473423
35
ATAL – Prof. Jorge Figueiredo Ordenação - 35 2004.2 AT AL Exemplo de Particionamento 3721547342010923 i←j 3721547920103423 3721510920473423 3201510972473423
36
ATAL – Prof. Jorge Figueiredo Ordenação - 36 2004.2 AT AL Exemplo de Particionamento 3721547342010923 ij 3721547920103423 3721510920473423 3201510972473423
37
ATAL – Prof. Jorge Figueiredo Ordenação - 37 2004.2 AT AL Exemplo de Particionamento 3721547342010923 3721547920103423 3721510920473423 3201510972473423 3201510923473472
38
ATAL – Prof. Jorge Figueiredo Ordenação - 38 2004.2 AT AL QuickSort - Algoritmo A chamada inicial é QuickSort(A, 1, n) QuickSort(A, inicio, fim) if inicio < fim then meio ← particiona(A, inicio, fim) QuickSort(A, inicio, meio - 1) QuickSort(A, meio + 1, fim)
39
ATAL – Prof. Jorge Figueiredo Ordenação - 39 2004.2 AT AL Análise do QuickSort Requer a resolução de uma relação de recorrência. Como nem sempre os dados são divididos em duas metades de mesmo tamanho: – Melhor caso, pior caso e caso médio podem variar. Vamos assumir: –Tempo de partição é O(n). –A posição final do pivô é i.
40
ATAL – Prof. Jorge Figueiredo Ordenação - 40 2004.2 AT AL Análise do QuickSort Melhor caso: –Pivô sempre fica no meio. –T(n) = 2T(n/2) + n –O(n.log n) T(n) = 1n = 1 T(n) = T(n - i) + T(i – 1) + nnos demais casos
41
ATAL – Prof. Jorge Figueiredo Ordenação - 41 2004.2 AT AL Análise do QuickSort Pior caso: –Pivô sempre fica na primeira ou última posição. –T(n) = T(n - 1) + n –O(n 2 ) T(n) = 1n = 1 T(n) = T(n - i) + T(i – 1) + nnos demais casos
42
ATAL – Prof. Jorge Figueiredo Ordenação - 42 2004.2 AT AL Análise do QuickSort Caso médio: –Pivô tem a mesma probabilidade 1/n de cair em uma das n posições. –T a (n) = n + 1/n ∑ ( T a (i - 1) + T a (n - i)) –O(n.log n) T(n) = 1n = 1 T(n) = T(n - i) + T(i – 1) + nnos demais casos
43
ATAL – Prof. Jorge Figueiredo Ordenação - 43 2004.2 AT AL Ainda sobre QuickSort É talvez o algoritmo de ordenação mais usado. É fácil de implementar e muito rápido na prática. É tipicamente mais do que duas vezes mais rápido do que o MergeSort.
44
ATAL – Prof. Jorge Figueiredo Ordenação - 44 2004.2 AT AL Ordenação por Comparação Todos os algoritmos de ordenação que estudamos até agora utilizam comparação de elementos. Em uma ordenação por comparação, a ordem relativa de dois elementos a i e a j em uma seqüência é obtida utilizando testes de comparação: –a i a j e a i ≥ a j.
45
ATAL – Prof. Jorge Figueiredo Ordenação - 45 2004.2 AT AL Ordenação por Comparação O melhor algoritmo que vimos para ordenação é O(n.log n). É possível encontrar uma melhor solução? Árvore de decisão pode nos ajudar a desvendar isso. É possível usar uma árvore de decisão para visualizar ordenação por comparação.
46
ATAL – Prof. Jorge Figueiredo Ordenação - 46 2004.2 AT AL Árvore de Decisão a1:a3 a2:a3 a1:a2 a1:a3a2:a3 ≤ > > >> > ≤ ≤ ≤ ≤
47
ATAL – Prof. Jorge Figueiredo Ordenação - 47 2004.2 AT AL Árvore de Decisão Sort( ) a1:a3 a2:a3 a1:a2 a1:a3a2:a3 ≤ 15 > 4 > >> > ≤ ≤ ≤ ≤
48
ATAL – Prof. Jorge Figueiredo Ordenação - 48 2004.2 AT AL Árvore de Decisão Sort( ) a1:a3 a2:a3 a1:a2 a1:a3a2:a3 ≤ > 15 > 8 >> > ≤ ≤ ≤ ≤
49
ATAL – Prof. Jorge Figueiredo Ordenação - 49 2004.2 AT AL Árvore de Decisão Sort( ) a1:a3 a2:a3 a1:a2 a1:a3a2:a3 ≤ > > >> > ≤ ≤ ≤ 4 ≤ 8
50
ATAL – Prof. Jorge Figueiredo Ordenação - 50 2004.2 AT AL Árvore de Decisão Sort( ) = a1:a3 a2:a3 a1:a2 a1:a3a2:a3 ≤ > > >> > ≤ ≤ ≤ ≤
51
ATAL – Prof. Jorge Figueiredo Ordenação - 51 2004.2 AT AL As folhas de de uma árvore de decisão indicam uma possível ordenação para os elementos. –O número de permutações possível é n!. Para definir um limite inferior: –Uma árvore binária tem no máximo 2 d folhas, onde d é a sua profundidade. –Uma árvore binária com L folhas tem profundidade de pelo menos log L .
52
ATAL – Prof. Jorge Figueiredo Ordenação - 52 2004.2 AT AL O caminho mais longo da raiz de uma árvore de decisão para qualquer uma de suas folhas representa o pior caso do número de comparações. Para n elementos, temos n! folhas: –d = log n! – d ≥ log n! – log n! = Ө(n.log n) – d = Ω(n.log n)
53
ATAL – Prof. Jorge Figueiredo Ordenação - 53 2004.2 AT AL Ordenação em Tempo Linear Nenhuma comparação é efetuada. Counting Sort: Counting Sort Entrada: Um array de n números A = <a 1, a 2,..., a n ›, em que a i assume valores {1, 2,..., k}. Saída: Um array reordenado B = <b 1, b 2,..., b n ›. Array auxiliar: Um array C = <c 1, c 2,..., c k ›
54
ATAL – Prof. Jorge Figueiredo Ordenação - 54 2004.2 AT AL Counting Sort Counting Sort(A, B, k) for i ← 1 to k do C[i] ← 0 for j ← 1 to length[A] do C[A[j]] ← C[A[j]] + 1 for i ←2 to k do C[i] ← C[i] + C[i - 1] for j ← length[A] downto 1 do B[C[A[j]]] ← A[j] C[A[j]] ← C[A[j]] - 1
55
ATAL – Prof. Jorge Figueiredo Ordenação - 55 2004.2 AT AL Exemplo 36413414 A: 12 345678 B: 12 345678 C: 12 3456
56
ATAL – Prof. Jorge Figueiredo Ordenação - 56 2004.2 AT AL Laço 1 36413414 A: 12 345678 B: 12 345678 000000 C: 12 3456
57
ATAL – Prof. Jorge Figueiredo Ordenação - 57 2004.2 AT AL Laço 2 36413414 A: 12 345678 B: 12 345678 001000 C: 12 3456
58
ATAL – Prof. Jorge Figueiredo Ordenação - 58 2004.2 AT AL Laço 2 36413414 A: 12 345678 B: 12 345678 001001 C: 12 3456
59
ATAL – Prof. Jorge Figueiredo Ordenação - 59 2004.2 AT AL Laço 2 36413414 A: 12 345678 B: 12 345678 001101 C: 12 3456
60
ATAL – Prof. Jorge Figueiredo Ordenação - 60 2004.2 AT AL Laço 2 36413414 A: 12 3 4 5678 B: 12 345678 101101 C: 12 3456
61
ATAL – Prof. Jorge Figueiredo Ordenação - 61 2004.2 AT AL Laço 2 36413414 A: 12 3 4 5678 B: 12 345678 102101 C: 12 3456
62
ATAL – Prof. Jorge Figueiredo Ordenação - 62 2004.2 AT AL Laço 2 36413414 A: 12 3 4 5678 B: 12 345678 102201 C: 12 3456
63
ATAL – Prof. Jorge Figueiredo Ordenação - 63 2004.2 AT AL Laço 2 36413414 A: 12 3 4 5678 B: 12 345678 202201 C: 12 3456
64
ATAL – Prof. Jorge Figueiredo Ordenação - 64 2004.2 AT AL Laço 2 36413414 A: 12 3 4 5678 B: 12 345678 202301 C: 12 3456
65
ATAL – Prof. Jorge Figueiredo Ordenação - 65 2004.2 AT AL Laço 3 36413414 A: 12 3 4 5678 B: 12 345678 202301 C: 12 3456
66
ATAL – Prof. Jorge Figueiredo Ordenação - 66 2004.2 AT AL Laço 3 36413414 A: 12 3 4 5678 B: 12 345678 222301 C: 12 3456
67
ATAL – Prof. Jorge Figueiredo Ordenação - 67 2004.2 AT AL Laço 3 36413414 A: 12 3 4 5678 B: 12 345678 224301 C: 12 3456
68
ATAL – Prof. Jorge Figueiredo Ordenação - 68 2004.2 AT AL Laço 3 36413414 A: 12 3 4 5678 B: 12 345678 224701 C: 12 3456
69
ATAL – Prof. Jorge Figueiredo Ordenação - 69 2004.2 AT AL Laço 3 36413414 A: 12 3 4 5678 B: 12 345678 224771 C: 12 3456
70
ATAL – Prof. Jorge Figueiredo Ordenação - 70 2004.2 AT AL Laço 3 36413414 A: 12 3 4 5678 B: 12 345678 224778 C: 12 3456
71
ATAL – Prof. Jorge Figueiredo Ordenação - 71 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 B: 12 345678 224778 C: 12 3456
72
ATAL – Prof. Jorge Figueiredo Ordenação - 72 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 4 B: 12 345678 224678 C: 12 3456
73
ATAL – Prof. Jorge Figueiredo Ordenação - 73 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 14 B: 12 345678 124678 C: 12 3456
74
ATAL – Prof. Jorge Figueiredo Ordenação - 74 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 14 B: 12 345678 124678 C: 12 3456
75
ATAL – Prof. Jorge Figueiredo Ordenação - 75 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 144 B: 12 345678 124578 C: 12 3456
76
ATAL – Prof. Jorge Figueiredo Ordenação - 76 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 144 B: 12 345678 124578 C: 12 3456
77
ATAL – Prof. Jorge Figueiredo Ordenação - 77 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 1344 B: 12 345678 123578 C: 12 3456
78
ATAL – Prof. Jorge Figueiredo Ordenação - 78 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 1344 B: 12 345678 123578 C: 12 3456
79
ATAL – Prof. Jorge Figueiredo Ordenação - 79 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 11344 B: 12 345678 023578 C: 12 3456
80
ATAL – Prof. Jorge Figueiredo Ordenação - 80 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 11344 B: 12 345678 023578 C: 12 3456
81
ATAL – Prof. Jorge Figueiredo Ordenação - 81 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 113444 B: 12 345678 023478 C: 12 3456
82
ATAL – Prof. Jorge Figueiredo Ordenação - 82 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 113444 B: 12 345678 023478 C: 12 3456
83
ATAL – Prof. Jorge Figueiredo Ordenação - 83 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 1134446 B: 12 345678 023477 C: 12 3456
84
ATAL – Prof. Jorge Figueiredo Ordenação - 84 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 1134446 B: 12 345678 023477 C: 12 3456
85
ATAL – Prof. Jorge Figueiredo Ordenação - 85 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 11334446 B: 12 345678 022477 C: 12 3456
86
ATAL – Prof. Jorge Figueiredo Ordenação - 86 2004.2 AT AL Laço 4 36413414 A: 12 3 4 5678 11334446 B: 12 345678 022477 C: 12 3456
87
ATAL – Prof. Jorge Figueiredo Ordenação - 87 2004.2 AT AL Análise do Counting Sort A análise é trivial: –O primeiro e terceiro laços correspondem a O(k). –O segundo e quarto laços são O(n). –O tempo total é, portanto, O(n+k). –Na prática, k = O(n). –Logo, o counting sort é O(n). Counting Sort é estável.
88
ATAL – Prof. Jorge Figueiredo Ordenação - 88 2004.2 AT AL
89
ATAL – Prof. Jorge Figueiredo Ordenação - 89 2004.2 AT AL
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.