O QUE SÃO PARADIGMAS? POR QUE OS PARADIGMAS SÃO IMPORTANTES?
LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.
Transcript of LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.
![Page 1: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/1.jpg)
L U C I A N O D . I S A I A S 6 7 6 6 7 4 6T H A Í S F. V I C E N T I N 7 5 4 7 4 2 0
PARADIGMAS DE PROJETOS DE ALGORITMOS
![Page 2: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/2.jpg)
O QUE É UM PARADIGMA?
• Um paradigma é um modelo que fornece e determina a visão que o programador possui sobre a estruturação e execução do programa.
![Page 3: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/3.jpg)
PROJETO DE ALGORITMO
O projeto de algoritmo requer abordagens adequadas:• A forma como um algoritmo aborda o problema
pode levar a um desempenho ineficiente.• Em certos casos, o algoritmo pode não conseguir
resolver o problema em tempo viável.
Não existe um paradigma que seja o melhor dentre todos.
![Page 4: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/4.jpg)
TIPOS DE PARADIGMAS
• Recursividade.• Tentativa e erro.• Divisão e conquista.• Programação dinâmica.• Algoritmos gulosos.• Algoritmos aproximados.
![Page 5: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/5.jpg)
RECURSIVIDADE
• Uma função é dita recursiva quando executa a si mesma, ou seja, dentro de um código, tem a capacidade de chamar um “subcódigo” para ser executado.
• A recursividade permite descrever algoritmos de formas que utilizem estruturas recursivas, mais claras e concisas, especialmente em problemas complexos.
![Page 6: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/6.jpg)
EXEMPLO: QUICKSORT
![Page 7: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/7.jpg)
QUICKSORT - PARTICIONAMENTO
![Page 8: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/8.jpg)
QUICKSORT – PIOR CASO
![Page 9: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/9.jpg)
QUICKSORT – MELHOR CASO
![Page 10: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/10.jpg)
QUICKSORT – VANTAGENS E DESVANTAGENS
![Page 11: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/11.jpg)
QUANDO NÃO USAR RECURSIVIDADE
• Algoritmos recursivos são apropriados quando o problema a ser resolvido ou os dados a serem tratados são definidos em termos recursivos. Entretanto, isso não garante que um algoritmo recursivo seja o melhor caminho para resolver o problema. • Vejamos dois exemplos ilustrativos de algoritmos
para calcular os números da sequência de Fibonacci:
![Page 12: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/12.jpg)
ALGORITMO 1: FUNÇÃO RECURSIVA
function FibRec (n: integer) : integer;begin
if n<2then FibRec := nelse FibRec := FibRec(n-1) + FibRec(n-2);
end;
![Page 13: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/13.jpg)
ALGORITMO 2 : FUNÇÃO ITERATIVA
function FibIter (n: integer): integer;var i, k, F: integer;begin
i :=1; F :=0;for k :=1 to n do
beginF := i+F;i := F-i;end;
FibIter :=F;end;
![Page 14: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/14.jpg)
COMPLEXIDADES DO ALGORITMO 1 E DO ALGORITMO 2
• O algoritmo 1 é O() = O(n), pois cada chamada recursiva é empilhada e esse número é O(n).• O algoritmo 2 tem complexidade de tempo O(n) e
complexidade de espaço O(1).
n 10 20 30 50 100
FibRec
8 ms 1 s 2 min 21 dias anos
FibIter
ms ms ½ ms ¾ ms 1,5 ms
![Page 15: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/15.jpg)
TENTATIVA E ERRO
• Um algoritmo tentativa e erro é aquele que testa exaustivamente todas as possíveis soluções de um problema, de modo a obter a solução desejada.
• A ideia é decompor o processo em um número finito de subtarefas parciais que devem ser exploradas.
• O processo geral pode ser visto como um processo de pesquisa ou tentativa que gradualmente constrói e percorre uma árvore de subtarefas.
![Page 16: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/16.jpg)
TABULEIRO DE XADREZ
![Page 17: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/17.jpg)
TENTA UM PRÓXIMO MOVIMENTO
procedure Tenta (i: integer; x,y: TipoIndice; var q: boolean);var u, v, k: integer; q1: boolean;begin
k := 0; {inicializa selecao de movimentos}repeat
k := k+1; q1 := false;u := x+a[k]; v := y+b[k];if (u in s) and (v in s)then if t[u,v] = 0
then begint[u,v] := i;if i<N*N {tabuleiro não esta cheio}then begin
Tenta (i+1, u, v, q1); {tenta novo movimento}if not q1then t [u,v] := 0 {não sucedido apaga reg. Anterior}end
else q1 := true;end;
until q1 or (k=8); {não há mais casas a visitar a partir de x,y}q := q1;
end;
![Page 18: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/18.jpg)
PASSEIO DE CAVALO NO TABULEIRO DE XADREZ
program PasseioCavalo;const N=8; {Tamanho do lado do tabuleiro}type TipoIndice = 1..N;var i, j: integer; t: array[TipoIndice, TipoIndice] of integer; q: boolean; s: set of TipoIndice; a, b: array[TipoIndice] of integer;{-- Entra aqui o procedimento Tenta do Programa anterior --}begin {programa principal}s := [1,2,3,4,5,6,7,8];a[1] := 2; a[2] :=1; a[3] :=-1; a[4] :=-2;b[1] := 1; b[2] :=2; b[3] := 2; b[4] :=1;a[5] :=-2; a[6] :=-1; a[7] :=1; a[8] :=2;b[5] :=-1; b[6] :=-2; b[7] :=-2; b[8] :=-1;for i:=1 to N do for j :=1 to N do t[i,j] := 0;t [i,i] :=1; {escolhemos uma casa do tabuleiro}Tenta (2,1,1,q);if qthen for i:=1 to N dobegin for j :=1 to N do write (t[i,j]:4); writeln; endelse writeln (‘Sem soluçao’);end.
![Page 19: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/19.jpg)
QUICKSORT - REORDENAÇÃO
![Page 20: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/20.jpg)
DIVISÃO E CONQUISTA
• Consiste em dividir o problema em partes menores, encontrar soluções para estas partes e combiná-las em uma solução global.
• Divide-se em 3 fases:1. Divisão (particionamento) do problema original em
sub-problemas similares ao original mas que são menores em tamanho.
2. Resolução de cada sub-problema sucessivamente e independentemente (em geral de forma recursiva).
3. Combinação das soluções individuais em uma solução global para todo o problema.
![Page 21: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/21.jpg)
O uso deste paradigma geralmente leva a soluções eficientes e elegantes, em especial quando é utilizado recursivamente.
Como exemplo, vamos considerar o problema de encontrar simultaneamente o maior elemento e o menor elemento de um vetor de inteiros.
![Page 22: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/22.jpg)
VERSÃO RECURSIVA PARA OBTER O MÁXIMO E O MÍNIMO
procedure MaxMin4 (Linf, Lsup: integer; var Max, Min: integer);var Max1, Max2, Min1, Min2, Meio: integer;begin
if Lsup – Linf <= 1then if A[Linf] < A[Lsup]
then begin Max := A[Lsup] ; Min := A[Linf] ; endelse begin Max := A[Linf] ; Min := A[Lsup]; end
else beginMeio := (Linf + Lsup) div 2;MaxMin4 (Linf, Meio, Max1, Min1);MaxMin4 (Meio+1, Lsup, Max2, Min2);if Max1 > Max2 then Max := Max1 else Max := Max2;if Min1 < Min2 then Min := Min1 else Min := Min2;end;
end;
![Page 23: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/23.jpg)
COMPLEXIDADE
• Seja T uma função de complexidade tal que T(n) é o número de comparações entre os elementos de A, se A tiver n elementos, T(n) = (3n/2) – 2 para o melhor caso, caso médio, e pior caso.
• Este algoritmo é ótimo.
![Page 24: LUCIANO D. ISAIAS6766746 THAÍS F. VICENTIN7547420 PARADIGMAS DE PROJETOS DE ALGORITMOS.](https://reader035.fdocumentos.tips/reader035/viewer/2022062418/552fc14f497959413d8e2ee4/html5/thumbnails/24.jpg)
FIM