Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 2
2023-2024
1 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 1/
Projeto de Algoritmos
Técnicas de
pr
HáOjet
umaO grande variedade no que se refere ao tipo de técnicas de projeto de algoritmos.
Estudam-se duas com aplicação aos algoritmos de ordenação:
a abordagem incremental ;
a técnica de divisão e conquista .
O algoritmo MERGE-SORT é projetado com o recurso à técnica de divisão e conquista.
2 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 2/
1 Técnicas
Abordagem Incremental
Divisão e Conquista
2 Merge Sort
Aplicação do Paradigma
Complexidade Computacional- merge
merge sort
Complexidade Computacional
Teorema Principal
Resultado
3 Realização Experimental
3 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 3/
Técnicas Abordagem Incremental
Abordagem Incremental
POr induçãO
matemática
é a técnica usada no algoritmo INSERTION-SORT;
um elemento de cada vez, designado por key, é incrementalmente colocado, através de
uma iteração em valores sucessivos, no local apropriado;
após todos os elementos terem sido processados, um após o outro, a estrutura de dados
sequencial encontra-se ordenada.
4 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 4/
Técnicas Divisão e Conquista
Estrutura Geral da
Técnica
DivisãO e
COnquista
muitos algoritmos são recursivos na sua arquitetura;
esta arquitetura conduz à chamada da função que representa o algoritmo pela
própria função;
esta chamada é realizada uma ou mais vezes para tratar de sub-problemas estreitamente
relacionados com o problema;
este tipo de algoritmos seguem uma abordagem típica designada por divisão e conquista;
dividem o problema em vários sub-problemas similares ao problema original mas com
dimensão menor, resolvem os sub-problemas recursivamente e combinam as soluções
resultantes para criar a solução do problema original.
5 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 5/
Técnicas Divisão e Conquista
Divisão e
Conquista
Os 3
pass
A OS
divisão e conquista envolve 3 passos em cada nível da recursividade
Divisão do problema num certo número de sub-problemas que são instâncias menores do
mesmo problema;
Conquista dos sub-problemas por resolução recursiva. Se os sub-problemas são
suficientemente pequenos então resolvem-se diretamente;
Combinação as soluções dos sub-problemas são agregadas na solução do problema original.
6 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 6/
Merge Sort Aplicação do Paradigma
Merge-Sort
O algoritmo MERGE-SORT segue de perto o paradigma da divisão e conquista.
Divisão divide-se a sequência A de n elementos em duas sub-sequências com n/2
elementos cada;
Conquista ordenam-se as duas sub-sequências recursivamente usando o procedimento
MERGE-SORT;
Combinação agregam-se (MERGE) as duas sub-sequências de modo a produzir a sequência
final ordenada.
7 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 7/
Merge Sort Aplicação do Paradigma
Agregação
COmbinar OS resultadOS
A operação mais crucial do algoritmo MERGE-SORT é a agregação das duas sub-sequências
ordenadas no passo de combinação.
O procedimento de agregação é chamado pelo procedimento auxiliar MERGE (A, p, q, r);
A é uma tabela unidimensional;
p, q e r são índices da tabela
A; p ≤ q < r.
O procedimento assume que as sub-tabelas A[p, . . . , q] e A[q + 1, . . . , r] se encontram
ordenadas.
Agrega estas sub-tabelas para substituir a sub-tabela A[p, . . . , r].
8 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 8/
Merge Sort Aplicação do Paradigma
merge
Funcionamento
Merge
a linha 1 calcula a dimensão da sub-tabela A[p, . . . , q], correspondente à parte
esquerda; a linha 2 calcula a dimensão da sub-tabela A[q + 1, . . . , r], correspondente
à parte direita; na linha 3 são criadas as duas sub-tabelas L, com dimensão n1 + 1, e
R com dimensão
n2 + 1;
o ciclo for nas linhas 4 e 5 copia os elementos da sub-tabela A[p, . . . , q] para L[1, . . . , n1];
o ciclo for nas linhas 6 e 7 copia os elementos da sub-tabela A[q + 1, . . . , r] para
R[1, . . . , n2];
10 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 10 / 32
Merge Sort Aplicação do Paradigma
Funcionamento
Merge (cOnt.)
as linhas 8 e 9 colocam sentinelas (marcadores de fim de processamento) no fim das
tabelas L e R;
as linhas 10 a 17 copiam r − p + 1 vezes o elemento de menor valor escolhido de L ou
R
para a posição adequada de A, ou seja,
se L[i] ≤ R[j] então é copiada para a posição A[k] = L[i];
em caso oposto A[k] = R[j]
11 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 11 / 32
Merge Sort Aplicação do Paradigma
Passo a Passo
(1)
12 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 12 / 32
Merge Sort Aplicação do Paradigma
Passo a Passo
(2)
13 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 13 / 32
Merge Sort Aplicação do Paradigma
Passo a Passo
(3)
14 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 14 / 32
Merge Sort Complexidade Computacional- merge
Complexidade Computacional
15 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 15 / 32
Merge Sort merge sort
merge sort
16 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 16 / 32
Merge Sort merge sort
merge sort
A OrdenaçãO
O procedimento MERGE-SORT ordena os elementos na sub-tabela A[p, . . . , r].
se p ≥ r, então a sub-tabela tem no máximo um elemento e está praticamente
ordenada; em alternativa o passo de divisão calcula um índice q que faz uma partição
da tabela A[p, . . . , r] em duas sub-tabelas:
A[p, . . . , q] contendo [n/2| elementos;
A[q + 1, . . . , r] contendo [n/2♩ elementos.
17 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 17 / 32
Merge Sort merge sort
merge sort
A OrdenaçãO
para ordenar A = ⟨A[1], A[2], . . . , A[n]⟩ realiza-se a chamada inicial de
MERGE-SORT(A, 1, A.length) , A.length = n;
o algoritmo MERGE-SORT agrega sucessivamente sub-tabelas de dimensão
2k, k = 0, . . . , log2(n).
18 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 18 / 32
Merge Sort Complexidade Computacional
Complexidade Computacional
19 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 19 / 32
Merge Sort Complexidade Computacional
Complexidade Computacional
EquaçãO de recOrrência
sendo D(n) o tempo necessário para sub-dividir o problema em sub-problemas
sendo C (n) o tempo necessário para combinar as soluções dos sub-problemas na solução
do problema original,
tem-se a recorrência:
Θ(1) se n ≤ c,
aT (n/b) + D(n) + C (n) caso contrário.
T (n) =
20 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 20 / 32
Merge Sort Complexidade Computacional
Complexidade Computacional
Merge-Sort
NO casO dO algOritmO MERGE-SORT cOnsidera-se na análise que
a dimensãO Original da tabela A, é uma pOtência de 2, A.length = 2M ;
Cada passO da divisãO dá Origem a duas sub-tabelas de dimensãO n/2;
A aplicaçãO dO algOritmO MERGE-SORT numa tabela cOm apenas um elementO
leva tempO cOnstante.
21 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 21 / 32
Merge Sort Complexidade Computacional
Complexidade Computacional
Merge-Sort
QuandO há n > 1 elementOS, O tempO de execuçãO pOde ser divididO em:
Dividir O passO de divisãO calcula O pOntO central da sub-tabela, O que leva tempO
cOnstante, pOrtantO, D(n) = Θ(1);
COnquista ResOlvem-se recursivamente 2 prOblemas, cada um cOm dimensãO n/b = n/2,
O que cOntribui aT (n/b) = 2T (n/2) para O tempO de execuçãO;
COmbinaçãO O prOcedimentO MERGE demOra C (n) = Θ(n), cOmO fOi previamente calculadO.
22 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 22 / 32
Merge Sort Complexidade Computacional
Complexidade Computacional
Merge-Sort
ReunindO as expressões para cálculO dO tempO de execuçãO teremOS
Θ(1) se n ≤ 1,
2T (n/2) + Θ(n) se n >
T (n) = 1.
A expressãO definitiva da cOmplexidade cOmputaciOnal Obtida a partir desta equaçãO de
recOrrência é Obtida através da aplicaçãO dO teorema principal, cOnsiderandO Θ(1) = c, Ou
seja,
c se n ≤ 1,
2T (n/2) + nc se n > 1.
T (n) =
23 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 23 / 32
Merge Sort Teorema Principal
Teorema Principal
Três situações
Sejam a ≥ 1 e b > 1 cOnstantes, f (n) uma funçãO, e T (n) definida sObre um cOnjuntO
de inteirOS nãO-negativOS pela recOrrência
24 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 24 / 32
Merge Sort Resultado
25 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 25 / 32
Merge Sort Resultado
28 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 28 / 32
Realização Experimental
import kotlin.math.*
class MergeSort(var A: IntArray){
fun merge(p: Int, q: Int, r: Int) {
val n1 = q-p+1
val n2 = r-q
val L = IntArray(n1+1)
val R = IntArray(n2+1)
for(i in 0..n1-1) L[i] = A[p+i] // 1..n1
for(j in 0..n2-1) R[j] = A[q+j+1] // 1..n2
L[n1] = Int.MAX_VALUE // n1+1
R[n2] = Int.MAX_VALUE // n2+1
29 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 29 / 32
Realização Experimental
var i = 0 // 1
var j = 0 // 1
for(k in p..r){
if( L[i] <= R[j] ){
A[k] = L[i]
i++
} else {
A[k] = R[j]
j++
}
}
} // end fun merge
30 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 30 / 32
Realização Experimental
31 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 31 / 32
Realização Experimental
import kotlin.random.*
fun main() {
val A = IntArray(10) { Random.nextInt(0, 100)}
val mergeSort = MergeSort(A)
val p = 0 // 1
val r = A.size-1 // A.size
mergeSort.mergeSort(p, r)
}
32 de 32 Caeiro (Instituto
Estruturas
Politécnico
de Dados
de Beja)
e Algoritmos 2023-2024 32 / 32