Documente Academic
Documente Profesional
Documente Cultură
Parte III
Algoritmos de Procura Algoritmos de Ordenao
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura. Algoritmo de procura linear num array desordenado e num array ordenado. Algoritmo de procura binria. Medidas de esforo e de eficincia de algoritmos.
Algoritmos de Procura
Uma das tarefas habituais a procura de informao. O problema de procura pode ser colocado da seguinte forma: Dado um conjunto de objectos A, pretende-se saber se determinado elemento X se encontra nesse conjunto. Normalmente os elementos de A so distinguveis entre si por uma determinada caracterstica a que chamamos Chave. Alm da chave, cada elemento de A tem associado um outro conjunto de caractersticas que completam a sua definio e que normalmente representam a informao til associada ao objecto Atributos. No problema de procura de um objecto X num conjunto A, os atributos so em geral irrelevantes, pelo que vamos considerar sempre o caso particular em que no existem atributos alm da chave. Assim, o objecto no se distingue da chave que o representa, e o nosso problema pode colocar-se de outra forma Dado um conjunto de chaves A e um valor especfico X, localizar a chave em A que tem o valor X. Como facilmente se percebe, a procura fortemente condicionada pela organizao da informao. A procura de uma chave num conjunto ordenado de chaves mais simples que a procura num conjunto desordenado.
---- 2 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Os problemas mais simples de procura supem que o conjunto de chaves A est armazenado num array em que cada componente desse array contm uma chave. A procura consiste em localizar a componente cujo valor coincide com o valor procurado X. Veremos um algoritmo de pesquisa linear ou sequencial e um algoritmo de pesquisa binria.
PROCURA LINEAR
A forma mais simples de efectuar a procura a chamada procura sequencial ou procura linear. Consiste em analisar todos os elementos do conjunto (do array), comeando por um extremo e avanando at encontrar o elemento procurado ou at ter percorrido todo o conjunto. Suponhamos um array A (conjunto das chaves), com N componentes de um tipo arbitrrio T. O algoritmo que a seguir se apresenta procura a chave de A cujo valor coincide com o valor armazenado em X, dando como resultado a posio desta no array (varivel I).
A: array[1..N] de tipo T X: T N, I: inteiro I 1 I I + 1
Quando o ciclo terminar, teremos X = A[I], ou seja, o resultado pretendido. Obviamente este algoritmo falha quando no existe nenhum componente no array A que coincida com X. necessrio um novo algoritmo que tenha possibilidade de identificar essa situao.
I 1 I I + 1
Enquanto (I <= N) E (X <> A[I]) Fazer se I > N ento escrever(Erro elemento procurado no existe) Seno ...
---- 3 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Enquanto (I > 0) E (X <> A[I]) Fazer se I = 0 ento escrever(Erro elemento procurado no existe)
O invariante do algoritmo (condio a ser satisfeita antes de cada iterao, ou de cada incremento da varivel I):
( 1 <= I <= N ) E ( A[k] <> X, 1 <= k < I )
O algoritmo termina quando encontrada a primeira ocorrncia de X, ou quando o array foi totalmente percorrido. Ser que o algoritmo pode ser simplificado, acelerando assim a procura? O algoritmo pode ser simplificado recorrendo a uma sentinela, reduzindo o nmero de comparaes por iterao:
I 1 X
A[N+1]
Evidentemente que I = N + 1 implica que no foi encontrado o elemento desejado (excepto o correspondente sentinela).
---- 4 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
E se o array estiver ordenado? Quando o array se encontra ordenado (ordem crescente ou decrescente, numrica ou alfabtica), no h necessidade de percorrer integralmente o array para concluir da no existncia da chave com valor X. O algoritmo pode parar quando encontra um elemento de valor superior a X, concluindo logo da inexistncia de X no conjunto de chaves.
I 1 I I + 1
Enquanto (I <= N) E (A[I] < X) Fazer se I > N ento escrever(Erro elemento procurado no existe) Seno ...
Ou:
I 1 X
A[N+1]
PROCURA BINRIA
Nos algoritmos de procura, a dimenso do problema definida pelo nmero de chaves (N) que podem existir no array A. Nos algoritmos de procura linear o esforo do algoritmo aumenta proporcionalmente a N, quando N aumenta. Um algoritmo nestas condies diz-se de ordem N e representa-se por O(n). Os algoritmos anteriores percorrem o array sequencialmente at uma situao de sucesso ou de falha. Uma forma de acelerar a procura consiste em utilizar uma estratgia de partio sucessiva do conjunto de chaves ao meio para diminuir em cada momento o nmero de chaves a analisar. Veremos que este algoritmo de ordem log2 N, simbolicamente O(log2 N). Isto significa que, quando N aumenta, o esforo aumenta muito mais lentamente (pense na curva da funo logaritmo). Contudo, este mtodo exige que o array das chaves se encontre ordenado.
---- 5 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
O algoritmo de procura binria explora o facto de o array estar ordenado, i.e., explora a condio: A[k-1] <= A[k], 1 <= k <= N A ideia central consiste em testar um elemento aleatrio, por ex., A[m] e compar-lo com o valor a procurar X. Se o elemento for igual a X, a procura termina. Se for menor que X, conclui-se que todos os elementos do array com ndices menores ou igual a m podem ser eliminados nos prximos testes. Se for maior que X, todos aqueles que possuem ndices maiores ou igual a m podem ser eliminados.
O algoritmo de procura binria procura isolar em cada momento uma seco (S) do array tal que, se a chave X existir no array, s pode existir nessa seco. A seco S definida por dois ndices, MIN e MAX que so, respectivamente, os ndices do primeiro e do ltimo componentes de S. O array A fica assim dividido em trs fraces: a seco S, a fraco que contm todas as componentes inferiores s componentes de S (fraco A1) e a que contm todas as componentes superiores s de S (fraco A2).
] fazer
se [for possvel localizar X imediatamente] ento [localizar X] encontrado seno [diminuir o tamanho de S ] verdadeiro
---- 6 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Vejamos agora como desenvolver os vrios passos: 1- [inicializar S com A] como S definido pelos ndices MIN e MAX, corresponde a: MAX MIN 2- [ S <> f ] S diferente do conjunto vazio enquanto MAX >= MIN 3- [for possvel localizar X imediatamente] Localizar X imediatamente corresponde a uma tentativa de comparao de X com um componente de S, que pode ser um valor aleatrio entre MIN e MAX. Vejamos o algoritmo resultante:
MIN 1; MAX N falso
N 1
encontrado
Enquanto ( No encontrado ) E ( MAX >= MIN ) fazer m [qualquer valor entre MIN e MAX]
Se A[m] = X ento posicao Seno Se A[m] < X ento MIN Seno MAX m - 1 m + 1 m; encontrado verdadeiro
O invariante de cada iterao, isto , a condio que deve ser sempre satisfeita no incio de cada passo, :
(MIN <= MAX) E ( A[k] < X, 1 <= k < MIN ) E ( A[k] > X, MAX < k <= N )
---- 7 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Embora a escolha de m seja aparentemente arbitrria, no sentido de que o algoritmo funciona independentemente dela, o valor dessa varivel influencia o algoritmo. claro que a meta eliminar, em cada passo, o maior nmero possvel de elementos em futuras buscas; a soluo ptima consiste em escolher a mediana dos elementos, j que esta escolha elimina, em qualquer caso, metade dos elementos do array. Como consequncia, o nmero mximo de iteraes ser log2N, arredondado por excesso at ao inteiro mais prximo. Assim, o desempenho deste algoritmo francamente superior ao de procura linear, onde o nmero esperado de iteraes (e consequentemente de comparaes) de N/2. A verso final do algoritmo :
MIN 1; MAX N falso
encontrado
Se A[m] = X ento posicao Seno Se A[m] < X ento MIN Seno MAX m - 1 m + 1 m; encontrado verdadeiro
---- 8 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
SLIDES DA AULA
Algoritmos de Procura
Maria Manuela Cunha
mcunha@ipca.pt
2008/2009
Algoritmos de Procura
Conceitos
O problema de procura um dos mais frequentes e pode ser colocado da seguinte forma: Dado um conjunto de objectos A, procura-se saber se determinado elemento X se encontra nesse conjunto. Normalmente os elementos de A so distinguveis entre si por uma determinada caracterstica a que chamamos Chave. Alm da chave, cada elemento de A tem associado um outro conjunto de caractersticas que completam a sua definio e que normalmente representam a informao til associada ao objecto Atributos.
Algoritmos de Procura
Conceitos
Como no problema de procura de um objecto X num conjunto A, os atributos so em geral irrelevantes, vamos considerar sempre o caso particular em que no existem atributos alm da chave. Dado um conjunto de chaves A e um valor especfico X, localizar a chave em A que tem o valor X. Os problemas mais simples de procura supem que o conjunto de chaves A est armazenado num array em que cada componente desse array contm uma chave. A procura consiste em localizar a componente cujo valor coincide com o valor X. A: array[1..N] de tipo T
---- 9 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Procura Linear
Algoritmos de Procura
Procura linear
O algoritmo de procura linear percorre sequencialmente todo o array, terminando quando for satisfeita uma das duas condies seguintes: o elemento encontrado, A[i] = X o array foi pesquisado mas o elemento no foi encontrado Isto resulta no algoritmo seguinte: i1 enquanto X <> A[i] fazer ii+1 Quando o ciclo terminar, teremos X = A[i], ou seja o resultado pretendido. Este algoritmo funciona sempre ? Quando falha ?
Algoritmos de Procura
Procura linear
i1 enquanto (i <= N) E (X <> A[i]) fazer ii+1 se A[i] = X ento ......... ou, percorrendo o array no sentido inverso: iN enquanto (i > 0) E (X <> A[i]) fazer ii-1
---- 10 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura
Procura linear
i1 enquanto (i <= N) E (X <> A[i]) fazer ii+1 O invariante do algoritmo (condio a ser satisfeita antes de cada iterao, ou de cada incremento de i): ( 1 <= i <= N ) E ( A[k] <> X, 1 <= k < i ) A procura termina quando falhar a condio de controlo do ciclo, i.e, quando: (( i = N+1 ) OU ( A[i] = X )) E ( A[k] <> X, 1 <= k < i ) O algoritmo termina quando encontrada a 1 ocorrncia de X, ou quando o array foi totalmente percorrido. Ser que o algoritmo pode ser simplificado, acelerando assim a procura?
Algoritmos de Procura
Procura linear
Simplificao do algoritmo, recorrendo a uma sentinela, reduzindo o nmero de comparaes por iterao : i1 A[N+1] X enquanto (A[i] <> X) fazer ii+1 A partir do mesmo invariante anterior : ( 1 <= i <= N ) E ( A[k] <> X, 1 <= k < i ) temos como condio de paragem do ciclo: ( A[i] = X ) E ( A[k] <> X, 1 <= k < i ) Evidentemente que i = N + 1 implica que no foi encontrado o elemento desejado (excepto o correspondente sentinela). E se o array estiver ordenado? Proponha alteraes ao algoritmo
Procura Binria
---- 11 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura
10
Procura binria
Nos algoritmos de procura a complexidade do problema definida pelo nmero de chaves N. No algoritmo anterior, o esforo aumenta proporcionalmente a N (ordem de N) - O(N) - . Vamos ver um algoritmo da ordem log2 N, simbolicamente O(log N). Isto significa que, quando N aumenta, o esforo aumenta muito mais lentamente. O algoritmo de procura binria explora o facto de o array estar ordenado, i.e., explora a condio: A[k-1] <= A[k], 1 <= k <= N
Algoritmos de Procura
11
Procura binria
A ideia central consiste em testar um elemento aleatrio, por ex., A[m] e compar-lo com o valor a procurar X. Se o elemento for igual a X, a procura termina. Se for menor que X, conclui-se que todos os elementos do array com ndices menores ou igual a m podem ser eliminados nos prximos testes. Se for maior que X, todos aqueles que possuem ndices maiores ou igual a m podem ser eliminados.
Algoritmos de Procura
12
Procura binria
O algoritmo de procura binria procura isolar em cada momento uma seco do array tal que, se a chave X existir no array, s pode existir nessa seco. A seco S definida por dois ndices, MIN e MAX que so, respectivamente, os ndices do primeiro e do ltimo componentes de S. O array A fica assim dividido em trs fraces: a seco S, a fraco que contm todas as componentes inferiores s componentes de S (fraco A1) e a que contm todas as componentes superiores s de S (fraco A2).
---- 12 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura
13
Procura binria
Um primeiro refinamento: [inicializar S com A] encontrado falso enquanto ( No encontrado ) E [ S <> ] fazer se [for possvel localizar X imediatamente] ento [ localizar X ]; encontrado verdadeiro seno [diminuir o tamanho de S ]
Algoritmos de Procura
14
Procura binria
Vejamos agora como desenvolver os vrios passos: 1 [inicializar S com A] como S definido pelos ndices MIN e MAX, corresponde a: MAX N MIN 1 2 [ S <> ] S diferente do conjunto vazio enquanto MAX >= MIN 3 [for possvel localizar X imediatamente] Localizar X imediatamente corresponde a uma tentativa de comparao de X com um componente de S, que pode ser um valor aleatrio entre MIN e MAX.
Algoritmos de Procura
15
Procura binria
MIN 1; MAX N encontrado falso Enquanto ( No encontrado ) E ( MAX >= MIN ) fazer m [qualquer valor entre MIN e MAX] Se A[m] = X ento posicao m; encontrado verdadeiro Seno Se A[m] < X ento MIN m + 1 Seno MAX m - 1
---- 13 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura
16
Procura binria
O invariante de cada iterao, isto , a condio que deve ser sempre satisfeita no incio de cada passo, :
( MIN <= MAX ) E ( A[k] < X, 1 <= k < MIN) E ( A[k] > X, MAX < k <= N )
Algoritmos de Procura
17
Procura binria
Embora a escolha de m seja aparentemente arbitrria, no sentido de que o algoritmo funciona independentemente dela, o valor dessa varivel influencia o algoritmo. claro que a meta eliminar, em cada passo, o maior nmero possvel de elementos em futuras buscas; a soluo ptima consiste em escolher a mediana dos elementos, j que esta escolha elimina, em qualquer caso, metade dos elementos do array. Como consequncia, o n mximo de iteraes ser log2N, arredondado por excesso at ao inteiro mais prximo. Assim, o desempenho deste algoritmo francamente superior ao de procura linear, onde o n esperado de iteraes (e consequentemente de comparaes) de N/2.
Algoritmos de Procura
18
Procura binria
MIN 1; MAX N encontrado falso Enquanto ( ~encontrado ) E ( MAX >= MIN ) fazer m (MIN + MAX) DIV 2 Se A[m] = X ento posicao m; encontrado verdadeiro Seno Se A[m] < X ento MIN m + 1 Seno MAX m - 1
---- 14 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura
19
Procura binria
A eficincia pode ser ligeiramente melhorada, atravs da troca entre as 2 clusulas da comparao. A condio de igualdade deve ser testada em 2 lugar, porque o sucesso ocorre apenas uma vez em todo o processo, provocando a concluso do algoritmo. Mas possvel melhorar ainda o algoritmo, se for abandonado o princpio de terminar a procura quando for encontrado o elemento procurado. Por estranho que parea primeira vista, percebe-se que o ganho de eficincia em cada iterao ser maior do que a perda ocasionada pela comparao de alguns elementos adicionais. No nos esqueamos que o n do passo (iteraes) no mximo Log2N. A soluo mais rpida baseada na seguinte invariante: ( A[k] < X, 1 <= k < MIN ) E ( A[k] >= X, MAX <= k <= N ) e a procura continua at que os 2 limites se tenham estendido por todo o array.
Algoritmos de Procura
Procura binria
Invariante: ( A[k] < X, 1 <= k < MIN ) E ( A[k] >= X, MAX <= k <= N )
m (MIN + MAX) DIV 2 Se A[m] < X ento MIN m + 1 Seno MAX m encontrado A[MAX] = X
A condio de paragem MIN >= MAX. A diferena MAX - MIN diminui a cada iterao. A afirmao MIN < MAX ocorre no incio de cada iterao; a mediana m satisfaz MIN <= m < MAX, da que a diferena diminui de facto, ou ao se atribuir m + 1 a MIN (aumentando MIN), ou ao se atribuir m a MAX (decrementando MAX), e a repetio termina com MIN = MAX. Entretanto, MIN = MAX e o invariante ainda no so suficientes para a localizao do elemento desejado.
Algoritmos de Procura
21
Procura binria
Tente demonstrar que para pequenos valores de N a Procura Linear mais eficiente, mas que medida que N aumenta, a vantagem da Procura Binria se torna significativa, at que, para grandes valores de N, a Linear incomportvel.
---- 15 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Procura
22
Procura binria
Min m Max
X:
2 1 iterao v: 1 3 3 5 7 (>x)
Max
Min
2 iterao
Min
1
m
3 3 (>x)
Max
3 iterao
3 1 (<x)
Min Max
4 iterao
Algoritmos de Procura
23
Procura binria
Em cada iterao, o tamanho do sub-array a analisar dividido por um factor de aproximadamente 2. Ao fim de k iteraes, o tamanho do sub-array a analisar aproximadamente n / 2k Se no existir no array o valor procurado, o ciclo s termina quando n / 2k 1 log2 n - k 0 k log2 n Assim, no pior caso, o n de iteraes aproximadamente log2 n o tempo de execuo O(log n) (logartmico) muito mais eficiente que a pesquisa sequencial, mas s aplicvel a arrays ordenados!
---- 16 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
Algoritmos de Ordenao. Ordenao por Insero Directa. Ordenao por Seleco Directa. Ordenao Sequencial por Permutao. Algoritmo de fuso de sequncias ordenadas. Medidas de esforo e eficincia de algoritmos.
Algoritmos de Ordenao
Em geral entende-se a ordenao como o processo de arranjo de um conjunto de objectos de acordo com um critrio (ordem) especfico. O objectivo da ordenao facilitar a localizao dos membros desse conjunto. A ordenao uma actividade relevante e essencial, sobretudo na rea de processamento de dados. Vejamos alguns algoritmos de ordenao de um array A de um tipo qualquer. Dado o facto de a ordenao ocorrer em memria, podem-se revelar de grande importncia os mtodos que efectuam a permutao de elementos, sendo de menor importncia os mtodos que efectuam o transporte fsico dos elementos de um array A para um array resultante B. Dentro da 1 categoria, uma boa medida de eficincia a contagem do nmero de comparaes das chaves C e o nmero de movimentos (transposies) dos elementos M. Estes nmeros (M e C) so funo do nmero de elementos N a serem ordenados.
---- 17 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
v: 1 iterao
8
desordenado
ordenado
Para
O processo de encontrar o local de X no array ordenado consiste em percorrer o array da direita para a esquerda, at encontrar um elemento <= X. Inserir X numa dada posio do array
---- 18 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
ordenado consiste em arrastar os valores superiores a X uma posio para a direita e colocar X nessa posio. O processo de procura e insero termina quando: - encontrado um elemento A[j] < X - atingida a extremidade esquerda do sub-array ordenado. A Insero de um elemento X num array pode ter dois pressupostos: - O array est desordenado, e a insero ter lugar aps a ltima posio ocupada. - O array est ordenado e devemos manter a ordenao aps a insero. Apenas esta ltima situao nos interessa. Assim, temos trs passos: 1 procurar a posio para a insero 2 criar espao para o elemento a inserir 3 inserir na posio adequada
ler(X) i 1 enquanto ( A[i] < X ) E ( I <= N ) fazer i i + 1 para j = N .. i fazer A[j + 1] A[j] A[i] X N N + 1
Este algoritmo termina quando: - I > N (inserir a seguir ao ltimo) - A[i] >= X (inserir na posio i ) O Algoritmo de ordenao por Insero Directa o seguinte:
A: array[1..N] de tipo T Para i = 2 .. N X A[i] j i Enquanto j > 1 E A[j-1] > X Fazer Fazer
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
De forma a eliminar a necessidade de incluso de 2 condies de paragem no ciclo de procura e insero, colocamos uma sentinela (o valor X) na posio A[0].
Para i = 2 .. N Fazer X A[i] A[0] X j i Enquanto A[j-1] > X Fazer
---- 20 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Anlise do Algoritmo: -- o nmero de comparaes C = (N-1) * N/2 - o n de movimentaes de: no mnimo: M = 3*(N-1) e no mximo: M = 3*(N-1) + (N-1)*N/2 abstemo-nos de demonstrar que no caso mdio: M = N * (Log(N)+0,57)
A sua eficincia inferior eficincia do algoritmo de Seleco Directa. Tente demonstrar porqu, identificando o nmero de comparaes e de transposies.
O bubble sort, ou ordenao por flutuao (literalmente "por bolha"), um algoritmo de ordenao dos mais simples. A ideia comparar dois elementos e troc-los de posio, at que os elementos de maior valor sejam levados para o final do array. O processo continua at a ordenao total do vector lembrando a forma como as bolhas em um tanque de gua procuram seu prprio nvel, e disso vem o nome do algoritmo. A complexidade desse algoritmo de ordem quadrtica (O(n)). Por isso, ele no recomendado para programas que precisem de velocidade e operem com quantidade elevada de
---- 21 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
dados. Tambm necessria uma condio de paragem, geralmente uma flag ou varivel que armazena se houve troca ou no troca na passagem. Se uma passagem chega ao seu final sem troca a ordenao cessa.
HouveTroca Enquanto Verdadeiro Fazer
HouveTroca
A[i] > A[i+1] Ento Temp A[i] A[i] A[j] A[j] Temp HouveTroca Verdadeiro
Existe um mtodo sofisticado e extremamente eficiente de ordenao baseado no Bubblesort, que o Quicksort. Trata-se de um algoritmo recursivo que no abordaremos na nossa disciplina.
---- 22 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
j i1
0 1; i2 1
enquanto ( i1 <= N1 ) E ( i2 <= N2 ) fazer se F[i1] < G[i2] ento j H[j] i1 seno j H[j] i2 enquanto j H[j] i1 enquanto j H[j] i2 i1 <= N1 j + 1 F[i1] i1 + 1 i2 <= N2 j + 1 G[i2] i2 + 1 fazer j + 1 G[i2] i2 + 1 fazer j + 1 F[i1] i1 + 1
---- 23 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
SLIDES DA AULA
Algoritmos de Ordenao
Algoritmos de Ordenao
31
Conceitos
Em geral entende-se a ordenao como o processo de arranjo de um conjunto de objectos de acordo com um critrio (ordem) especfico. O objectivo da ordenao facilitar a localizao dos membros desse conjunto. A ordenao uma actividade relevante e essencial, sobretudo na rea de processamento de dados. A escolha de um algoritmo depende da estrutura de dados a ser processada, pelo que se distinguem: - algoritmos de ordenao de arrays - algoritmos de ordenao de ficheiros sequenciais Estas duas classes so frequentemente chamadas de ordenao interna e externa, porque os arrays so armazenados na memria principal, enquanto os arquivos se encontram em memria secundria.
---- 24 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
32
Conceitos
Estruturao de um conjunto de fichas, formando um array, colocadas em frente de um ordenador de tal forma que seja possvel o acesso individual directo a cada ficha.
Estruturar as fichas na forma de um arquivo, de acesso sequencial, implica que somente a ficha do topo de cada pilha visvel.
Algoritmos de Ordenao
33
Conceitos
Dado o facto de a ordenao ocorrer em memria, podem-se revelar de grande importncia os mtodos que efectuam a permutao de elementos, sendo de menor importncia os mtodos que efectuam o transporte fsico dos elementos de um array A para um array resultante B. Dentro da 1 categoria, uma boa medida de eficincia a contagem do nmero de comparaes das chaves C e o nmero de movimentos (transposies) dos elementos M. Estes nmeros (M e C) so funo do nmero de elementos N a serem ordenados.
---- 25 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
34
Conceitos
Enquanto os bons algoritmos de ordenao exigem cerca de N * log N comparaes, as tcnicas simples de ordenao designadas mtodos directos, exigem um nmero de comparaes da ordem de N2. Os mtodos de ordenao que ordenam os elementos in situ podem ser classificados em: - ordenao por Insero Directa (Insertion Sort) - ordenao por Seleco Directa - ordenao por Troca e Bubble Sort
---- 26 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
36
Algoritmos de Ordenao
37
direito), com o da esquerda ordenado e o da direita desordenado Comea-se com um elemento apenas no sub-array da esquerda. Move-se um elemento de cada vez do sub-array da direita para o sub-array da esquerda, inserindo-o na posio correcta de forma a manter o sub-array da esquerda ordenado Termina-se quando o sub-array da direita fica vazio
---- 27 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
38
v: 1 iterao
8
desordenado
ordenado
Algoritmos de Ordenao
39
---- 28 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
40
Algoritmos de Ordenao
41
---- 29 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
42
A[j] X
Algoritmos de Ordenao
43
A[j] X
---- 30 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao Para i = 2 .. N Fazer X A[i] ; Ordenao por Insero DirectaA[0] X ; j i Enquanto A[j-1] > X Fazer A[j] A[j-1] j j-1 A[j] X Anlise do Algoritmo:
44
- O nmero de comparaes (C) das chaves no i-simo teste varia entre 1 e i-1 o que corresponde a uma mdia de i/2. O nmero mdio de movimentos i.e. de atribuio de valores aos elementos (M) de Ci + 3 (incluindo a sentinela). - No total, o nmero de comparaes : - no melhor caso (array ordenado): 1 + 1 + ... 1 (N-1 vezes) ~= N - no pior caso: 1 + 2 + 3 + ... + N-1 = N(N-1)/2 ~= N2/2 - em mdia ser aprox N2/4 - Concluso, O(N2)
Algoritmos de Ordenao
45
C = N * (Log N) M = O(N2 )
como a operao de transposio mais demorada que a de comparao, conclumos no existirem melhorias significativas
(para quem estiver interessado, N. Wirth, pag 55 e 56)
---- 31 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
47
---- 32 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
48
Algoritmos de Ordenao 1 .. N-1 Fazer Para i = PosMin i ; Min Ordenao por Seleco Directa A[i] Para j = i+1 .. N Fazer Se A[j] < Min Ento
49
Anlise do Algoritmo: - O nmero de comparaes C = (N-1) * N/2 ~= (N2 - N) / 2 - O n de movimentaes de: no mnimo: M = 3*(N-1) e no mximo: M = 3*(N-1) + (N-1)*N/2 ~= N2/2 + 5/2N abstemo-nos de demonstrar que no caso mdio: M = N * (Log(N)+0,57) pelo que podemos concluir que este algoritmo mais eficiente que o de Insero Directa
---- 33 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
76
Semelhante ao Bubblesort
---- 34 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
77
Algoritmos de Ordenao
78
A sua eficincia inferior eficincia do algoritmo de Seleco Directa. Existe um mtodo sofisticado e extremamente eficiente de ordenao baseado no Bubblesort, que o Quicksort. Trata-se de um algoritmo recursivo mas que no vai ser abordado.
---- 35 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
79
Algoritmos de Ordenao
55
Mdio
(N2 + N - 2) / 4 (N2 + 9N - 10) / 4 (N2 - N) /2 N * (Log N + 0,57) (N2 - N) /2 (N2 - N) * 0,75
Mximo
(N2 - N) /2 (N2 + 3N - 4) / 2 (N2 - N) /2 (N2 + 5N 6) / 2 (N2 - N) /2 (N2 - N) * 1,5
Permutao C = Directa M=
Comparaes e transposies
---- 36 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao
57
---- 37 ----
Algoritmos e Estruturas de Dados Parte III (Alg. de Procura e de Ordenao) Texto de Apoio e Slides
Algoritmos de Ordenao 0 ; i1 1 ; i2 1 j se F[i1] < G[i2] ento jj+1 H[j] F[i1] i1 i1 + 1 seno jj+1 H[j] G[i2] i2 i2 + 1 enquanto i1 <= N1 fazer jj+1 H[j] F[i1] i1 i1 + 1 enquanto i2 <= N2 fazer jj+1 H[j] G[i2] i2 i2 + 1
58
---- 38 ----