paradigmas de projetos de software

Upload: rodolfo-mathias-barros-cardoso

Post on 04-Feb-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/21/2019 Paradigmas de projetos de software

    1/69

    Projeto e Anlise de AlgoritmosParadigmas de Projeto de

    Algoritmos

    Antonio Alfredo Ferreira [email protected]

    http://www.dcc.ufmg.br/~loureiro

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 1

  • 7/21/2019 Paradigmas de projetos de software

    2/69

    Paradigmas de projeto de algoritmos

    Induo

    Recursividade

    Tentativa e erro

    Diviso e conquista

    Balanceamento

    Programao dinmica

    Algoritmos gulosos

    Algoritmos aproximados

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 2

  • 7/21/2019 Paradigmas de projetos de software

    3/69

    Princpio da induo matemtica (fraca)

    Seja P ( n ) um predicado denido para os inteiros n, e seja n0 um inteiro xo.

    Suponha que as duas armaes abaixo sejam verdadeiras:

    1. P ( n 0 ) V.2. Para todos inteiros k n 0 ,

    se P ( k) V ento P ( k + 1) V.

    Logo, a armaopara todos inteiros n n 0 , P ( n )

    V.

    n

    P(n)

    Inteiros0

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 3

  • 7/21/2019 Paradigmas de projetos de software

    4/69

    Princpio da induo matemtica

    Tcnica aparece pela primeira vez no trabalho do italiano Francesco Mau-rolico em 1575.

    No sculo XVII, Pierre de Fermat e Blaise Pascal usam essa tcnica em seustrabalhos. Fermat d o nome de mtodo do descendente innito.

    Em 1883, Augustus De Morgan descreve o processo cuidadosamente e d onome de induo matemtica.

    Tcnica extremamente importante para a Cincia da Computao.

    Para visualizar a idia da induo matemtica, imagine uma coleo de do-mins colocados numa seqncia (formao) de tal forma que a queda doprimeiro domin fora a queda do segundo, que fora a queda do terceiro, eassim sucessivamente, at todos os domins carem.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 4

  • 7/21/2019 Paradigmas de projetos de software

    5/69

    Princpio da induo matemtica (fraca)

    A prova de uma armao por induo matemtica feita em dois passos:1. Passo base: provado que

    P (n 0

    ) V para um dado n 0

    especco.2. Passo indutivo: provado que para todos inteiros k n 0 ,

    se P ( k) V ento P ( k + 1) V.

    O passo indutivo pode ser escrito formalmente como:

    inteiros k

    n 0 , se P ( k) ento P ( k + 1)

    Para provar o passo indutivo deve-se: supor que P ( k) V, onde k um elemento especco mas escolhido arbi-

    trariamente de tal forma que seja maior ou igual a n 0 . provar que P ( k + 1) V.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 5

  • 7/21/2019 Paradigmas de projetos de software

    6/69

    Princpio da induo matemtica (fraca)

    Este princpio pode ser expresso pela seguinte regra de inferncia:

    [P ( n 0 ) k( P ( k) P ( k + 1))] nP ( n ) .

    Inteiros

    P(n)

    0n P ( ) 1n 2n ...

    P ( )k P ( ) P ( ) P k ( +1)

    Numa prova por induo matemtica no assumido que P ( k) verdadeiropara todos os inteiros! mostrado que se for assumido que P ( k) ver-

    dadeiro, ento P ( k + 1) tambm verdadeiro.

    Os prximos 10 exemplos ilustram o uso do Princpio da Induo Matemtica e esto apresentados aqui paraestudo e referncia.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 6

  • 7/21/2019 Paradigmas de projetos de software

    7/69

    Princpio da induo matemticaExemplo 1

    Prove que para todos inteiros n

    1 ,

    1 + 2 + . . . + n = n( n + 1)

    2

    Prova (por induo matemtica):

    1. Passo base: P ( n 0 ) = P (1) : Para n0 = 1 , 1 = 1(1+1)2 = 1 e a frmula verdadeira para n 0 = 1 .

    2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser ver-dadeira para n = k + 1 , i.e., P ( k) P ( k + 1) . Suponha que a frmula seja verdadeira para n = k, i.e.,

    P ( k) : 1 + 2 + . . . + k = k( k + 1)

    2para algum inteiro k 1 . [hiptese indutiva]

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 7

  • 7/21/2019 Paradigmas de projetos de software

    8/69

    Princpio da induo matemticaExemplo 1

    Deve-se mostrar que

    P ( k + 1) : 1 + 2 + . . . + ( k + 1) = (k + 1)( k + 2)

    2

    Sabe-se que

    1 + 2 + . . . + k + ( k + 1) = k( k + 1)2

    + ( k + 1)

    = k( k + 1)

    2 +

    2( k + 1)2

    = k2 + 3 k + 2

    2

    = (k + 1)( k + 2)2

    [Isto era o que devia ser provado.]

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 8

  • 7/21/2019 Paradigmas de projetos de software

    9/69

    Princpio da induo matemticaExemplo 2

    Prove que para todos inteiros n

    0 ,

    0 + 1 + 2 + . . . + n = n( n + 2)

    2 ERRADO!

    Prova (por induo matemtica):

    1. Passo base: P ( n 0 ) = P (0) : Para n0 = 0 , 0 = 0(0+2)2 = 0 e a frmula verdadeira para n 0 = 0 .

    2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser ver-dadeira para n = k + 1 , i.e., P ( k) P ( k + 1) . Suponha que a frmula seja verdadeira para n = k, i.e.,

    P ( k) : 0 + 1 + 2 + . . . + k = k( k + 2)

    2 =

    k2 + 2 k2

    para algum inteiro k 0 . [hiptese indutiva]UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 9

  • 7/21/2019 Paradigmas de projetos de software

    10/69

    Princpio da induo matemticaExemplo 2

    Deve-se mostrar que

    P ( k + 1) : 0 + 1 + 2 + . . . + ( k + 1) = (k + 1)( k + 3)

    2 =

    k2 + 4 k + 32

    Sabe-se que

    0 + 1 + 2 + . . . + k + ( k + 1) = k2 + 2 k2

    + ( k + 1)

    = k2 + 2 k + 2( k + 1)

    2

    = k2 + 4 k + 2

    2[Assim, no foi possvel derivar a concluso a partir da hiptese. Isto signica que o predicadooriginal falso.]

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 10

  • 7/21/2019 Paradigmas de projetos de software

    11/69

    Princpio da induo matemticaExemplo 10

    Seja o inteiro n

    1 . Mostre que qualquer regio quadrada de tamanho2 n

    2 n ,

    com um quadrado removido, a regio restante pode ser preenchida com peasno formato L, como mostrado abaixo.

    Nota: A pea no formato L constituda por trs quadrados de tamanho 1 1 .

    Prove que para todos os inteiros n 1, P ( n ) : Qualquer regio quadradade tamanho 2n 2 n , com um quadrado removido, a regio restante pode serpreenchida com peas no formato L.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 25

  • 7/21/2019 Paradigmas de projetos de software

    12/69

    Princpio da induo matemticaExemplo 10

    Prova (por induo matemtica):

    1. Passo base: P ( n 0 ) = P (1) . P(1) V j que uma regio quadrada detamanho 2 2, com um quadrado removido, a regio restante pode sepreenchida com peas no formato L, como mostrado abaixo.

    2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser ver-dadeira para n = k + 1 , i.e., P ( k) P ( k + 1) .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 26

  • 7/21/2019 Paradigmas de projetos de software

    13/69

    Princpio da induo matemticaExemplo 10

    P ( k) : Qualquer regio quadrada de tamanho 2 k 2 k, com um quadrado removido, a regiorestante pode ser preenchida com peas no formato L. [hiptese indutiva] Deve-se mostrar P ( k + 1) : Qualquer regio quadrada de tamanho 2k+1 2 k+1 , com umquadrado removido, a regio restante pode ser preenchida com peas no formato L.Considere uma regio quadrada de tamanho 2 k+1 2 k+1 , com um quadrado removido. Dividaessa regio em quatro regies de tamanho 2 k 2 k como mostrado abaixo.

    Temos trs regies 2k 2k com nenhum quadrado re-movido e uma regio 2 k 2 k com um quadrado removido.Ou seja, a regio 2 k+1 2 k+1 possui apenas um quadradoremovido.Pela hiptese indutiva, a regio 2 k 2 k, com um quadradoremovido, pode ser preenchida com peas no formato L.O problema passa a ser como a mesma hiptese indutivapode ser aplicada s outras trs regies.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 27

  • 7/21/2019 Paradigmas de projetos de software

    14/69

    Princpio da induo matemticaExemplo 10

    Temporariamente remova um quadrado de cada regio 2k 2k que est completa comomostrado na gura abaixo esquerda.Pela hiptese indutiva cada uma dessas trs regies2 k 2 k pode ser preenchida com peas noformato L. No entanto, para resolvermos o problema da pea removida em cada uma dessas trsregies basta colocarmos uma pea L exatamente sobre esses trs buracos como mostradona gura abaixo direita.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 28

  • 7/21/2019 Paradigmas de projetos de software

    15/69

    Princpio da induo matemticaExemplo 10

    Assim, uma regio quadrada de tamanho 2k+1 2 k+1 , com um quadrado removido, a regiorestante pode ser preenchida com peas no formato L, como mostrado na gura abaixo.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 29

  • 7/21/2019 Paradigmas de projetos de software

    16/69

    Princpio da induo matemtica (forte)

    Seja P ( n ) um predicado que denido para inteirosn , e seja a e b inteiros xos,sendo a

    b. Suponha que as duas armaes seguintes sejam verdadeiras:

    1. P ( a ) , P ( a + 1) , . . . , P ( b) so V. (Passo base)

    2. Para qualquer inteiro k b,se P ( i) V para a i < k ento P ( k) V, i.e., P ( i) P ( k) . Logo, a armao para todos inteiros n

    a, P ( n ) V. (A suposio

    que P ( i) V para a i < k chamada de hiptese indutiva.)

    Hipotese Indutiva

    Inteiros

    P i ( )

    k a

    Passo Base

    b

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 30

  • 7/21/2019 Paradigmas de projetos de software

    17/69

    Princpio da induo matemtica (forte):Exemplo 11

    Seja a sequncia a1

    , a2

    , a3

    , . . . denida como

    a 1 = 0a 2 = 2a k = 3 abk/ 2c + 2 , k 3

    Prove que an par, para n

    1 .

    Prova (por induo matemtica):

    1. Passo base: Para n = 1 e n = 2 a propriedade vlida j que a1 = 0 ea 2 = 2 .

    2. Passo indutivo: Vamos supor que ai par para todos inteiros i, 1 i < k .[hiptese indutiva]

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 31

  • 7/21/2019 Paradigmas de projetos de software

    18/69

    Princpio da induo matemtica (forte):Exemplo 11

    Se a propriedade vlida para 1

    i < k , ento vlida para k, ou seja, ak

    par [o que deve ser mostrado].

    Pela denio de a1 , a 2 , a 3 , . . .

    a k = 3 abk/ 2c + 2 , k 3O termo abk/ 2c par pela hiptese indutiva j que k 3 e 1 bk/ 2c < k .Desta forma, 3 abk/ 2c par e 3 abk/ 2c + 2 tambm par, o que mostra quea k par.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 32

  • 7/21/2019 Paradigmas de projetos de software

    19/69

    Induo matemtica e algoritmos

    til para provar asseres sobre a correo e a ecincia de algoritmos.

    Consiste em inferir uma lei geral a partir de instncias particulares. Seja T um teorema que tenha como parmetro um nmero natural n. Para

    provar que T vlido para todos os valores de n , provamos que:1. T vlido para n = 1 ; [PASSO BASE]2. Para todo n > 1 , [PASSO INDUTIVO]

    se T vlido para n ,ento T vlido para n + 1 .

    Provar a condio 2 geralmente mais fcil que provar o teorema diretamente(podemos usar a assero de que T vlido para n ).

    As condies 1 e 2 implicam T vlido para n = 2 , o que junto com a condio2 implica T tambm vlido para n = 3 , e assim por diante.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 33

  • 7/21/2019 Paradigmas de projetos de software

    20/69

    Limite superior de equaes de recorrncia

    A soluo de uma equao de recorrncia pode ser difcil de ser obtida.

    Nesses casos, pode ser mais fcil tentar advinhar a soluo ou obter um limitesuperior para a ordem de complexidade.

    Advinhar a soluo funciona bem quando estamos interessados apenas emum limite superior, ao invs da soluo exata. Mostrar que um certo limite existe mais fcil do que obter o limite.

    Por exemplo:T (2 n ) 2T ( n ) + 2 n 1 ,T (2) = 1 ,

    denida para valores de n que so potncias de 2.

    O objetivo encontrar um limite superior na notao O, onde o lado direitoda desigualdade representa o pior caso.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 34

  • 7/21/2019 Paradigmas de projetos de software

    21/69

    Induo matemtica para resolver equao derecorrncia

    T (2) = 1 ,

    T (2 n ) 2T ( n ) + 2 n 1 ,denida para valores de n que so potncias de 2.

    Procuramos f ( n ) tal que T ( n ) = O ( f ( n )) , mas fazendo com que f ( n ) sejao mais prximo possvel da soluo real para T ( n ) (limite assinttico rme).

    Vamos considerar o palpite f ( n ) = n 2 .

    Queremos provar que

    T ( n ) f ( n ) = O( f ( n ))utilizando induo matemtica em n .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 35

  • 7/21/2019 Paradigmas de projetos de software

    22/69

    Induo matemtica para resolver equao derecorrncia

    Prove que T ( n ) f ( n ) = O ( f ( n )) , para f ( n ) = n 2 , sendoT (2) = 1 ,

    T (2 n ) 2T ( n ) + 2 n 1 ,denida para valores de n que so potncias de 2.Prova (por induo matemtica):

    1. Passo base:T ( n 0 ) = T (2) : Para n 0 = 2 , T (2) = 1 f (2) = 4 , e o passo base V.

    2. Passo indutivo: se a recorrncia verdadeira para n ento deve ser verdadeira para 2 n ,i.e., T ( n ) T (2 n ) (lembre-se que n uma potncia de 2; conseqentemente o nmeroseguinte a n 2n ).Reescrevendo o passo indutivo temos:

    Predicado( n ) Predicado(2 n )( T ( n ) f ( n )) (T (2 n ) f (2 n ))

    T (2 n ) 2T ( n ) + 2 n 1 [Denio da recorrncia] 2n 2 + 2 n 1 [Pela hiptese indutiva podemos substituir T ( n ) ] 2n 2 + 2 n 1

    ?< (2 n ) 2 [A concluso verdadeira?]

    2n 2 + 2 n 1 < 4n 2 [Sim!]Essa ltima inequao o que queremos provar. Logo, T ( n ) = O ( n 2 ) .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 36

  • 7/21/2019 Paradigmas de projetos de software

    23/69

    Induo matemtica para resolver equao derecorrncia

    Vamos tentar um palpite menor, f ( n ) = cn , para alguma constante c.

    Queremos provar que

    T ( n ) f ( n ) = cn = O ( f ( n ))utilizando induo matemtica em n .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 37

  • 7/21/2019 Paradigmas de projetos de software

    24/69

    Induo matemtica para resolver equao derecorrncia

    Prove que T ( n ) f ( n ) = O ( f ( n )) , para f ( n ) = cn , sendoT (2) = 1 ,T (2 n ) 2T ( n ) + 2 n 1 ,

    denida para valores de n que so potncias de 2.

    Prova (por induo matemtica):1. Passo base:

    T ( n 0 ) = T (2) : Para n 0 = 2 , T (2) = 1 f (2) = 2 c, e o passo base V.2. Passo indutivo: se a recorrncia verdadeira para n ento deve ser verdadeira para 2 n ,

    i.e., T ( n ) T (2 n ) .Reescrevendo o passo indutivo temos:

    Predicado( n ) Predicado(2 n )( T ( n ) f ( n )) (T (2 n ) f (2 n ))( T ( n )

    cn ))

    (T (2 n )

    2cn )

    T (2 n ) 2T ( n ) + 2 n 1 [Denio da recorrncia] 2cn + 2 n 1 [Pela hiptese indutiva podemos substituir T ( n ) ] 2cn + (2 n 1) 2cn + 2 n 1 > 2cn [A concluso (T (2 n ) 2cn ) no vlida]

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 38

  • 7/21/2019 Paradigmas de projetos de software

    25/69

    Induo matemtica para resolver equao derecorrncia

    Logo:

    a funo f ( n ) = cn cresce mais lentamente que T ( n ) ;

    T ( n ) est entre cn e n 2 , mais especifamente;

    e T ( n )

    6 f ( n ) = cn.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 39

  • 7/21/2019 Paradigmas de projetos de software

    26/69

    Induo matemtica para resolver equao derecorrncia

    Vamos tentar uma funo entre n e n 2 , como, por exemplo, f ( n ) = n log n .

    Queremos provar que

    T ( n ) f ( n ) = n log n = O ( f ( n ))utilizando induo matemtica em n .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 40

  • 7/21/2019 Paradigmas de projetos de software

    27/69

    Induo matemtica para resolver equao derecorrncia

    Prove que T ( n ) f ( n ) = O ( f ( n )) , para f ( n ) = n log n , sendoT (2) = 1 ,

    T (2 n ) 2T ( n ) + 2 n 1 ,denida para valores de n que so potncias de 2.Prova (por induo matemtica):

    1. Passo base:T ( n 0 ) = T (2) : Para n 0 = 2 , T (2) = 1 f (2) = 2log2 , e o passo base V.

    2. Passo indutivo: se a recorrncia verdadeira para n ento deve ser verdadeira para 2 n ,i.e., T ( n ) T (2 n ) .

    Reescrevendo o passo indutivo temos:Predicado( n ) Predicado(2 n )( T ( n ) f ( n )) (T (2 n ) f (2 n ))( T ( n )

    n log n ))

    (T (2 n )

    2n log2 n )

    T (2 n ) 2T ( n ) + 2 n 1 [Denio da recorrncia] 2n log n + 2 n 1 [Podemos substituir T ( n ) ] 2n log n + 2 n 1

    ?< 2n log2 n [A concluso verdadeira?]

    2n log n + 2 n 1 < 2n log n + 2 n [Sim!]UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 41

  • 7/21/2019 Paradigmas de projetos de software

    28/69

    Induo matemtica para resolver equao derecorrncia

    Para o valor de f ( n ) = n log n , a diferena entre as frmulas de apenas 1.

    De fato, T ( n ) = n log n n + 1 a soluo exata deT ( n ) = 2 T ( n2 ) + n 1T (1) = 0

    que descreve o comportamento do algoritmo de ordenao Mergesort .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 42

  • 7/21/2019 Paradigmas de projetos de software

    29/69

    Induo matemtica e algoritmosComentrios nais

    Induo uma das tcnicas mais poderosas da Matemtica que pode seraplicada para provar asseres sobre a correo e a ecincia de algoritmos.

    No caso de correo de algoritmos, comum tentarmos identicar invariantespara laos.

    Induo pode ser usada para derivar um limite superior para uma equao derecorrncia.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 43

  • 7/21/2019 Paradigmas de projetos de software

    30/69

    Recursividade

    Um procedimento que chama a si mesmo, direta ou indiretamente, dito serrecursivo .

    Recursividade permite descrever algoritmos de forma mais clara e concisa,especialmente problemas recursivos por natureza ou que utilizam estruturasrecursivas.

    Por exemplo, rvore binria de pesquisa: Todos os registros com chaves menores esto na sub-rvore esquerda; Todos os registros com chaves maiores esto na sub-rvore direita.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 44

  • 7/21/2019 Paradigmas de projetos de software

    31/69

    Recursividade

    Algoritmo para percorrer todos os registros em ordem de caminhamentocentral :

    1. Caminha na sub-rvore esquerda na ordem central;2. Visita a raiz;3. Caminha na sub-rvore direita na ordem central.

    No caminhamento central, os ns so visitados em ordem lexicogrca daschaves.

    CENTRAL( p)1 if p 6= nil2 then CENTRAL( p.esq )3 Visita n Faz algum processamento4 CENTRAL( p.dir )

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 45

  • 7/21/2019 Paradigmas de projetos de software

    32/69

    Implementao de recursividade

    Usa-se uma pilha para armazenar os dados usados em cada chamada deum procedimento que ainda no terminou.

    Todos os dados no globais vo para a pilha, registrando o estado correnteda computao.

    Quando uma ativao anterior prossegue, os dados da pilha so recuperados.

    No caso do caminhamento central: Para cada chamada recursiva, o valor de p e o endereo de retorno da

    chamada recursiva so armazenados na pilha. Quando encontra p= nil o procedimento retorna para quem chamou uti-

    lizando o endereo de retorno que est no topo da pilha.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 46

  • 7/21/2019 Paradigmas de projetos de software

    33/69

    Problema de terminao em procedimentosrecursivos

    Procedimentos recursivos introduzem a possibilidade de iteraes que podemno terminar: Existe a necessidade de considerar o problema de terminao .

    fundamental que a chamada recursiva a um procedimento P esteja sujeitaa uma condio B , a qual se torna no-satisfeita em algum momento da com-

    putao. Esquema para procedimentos recursivos: composio C de comandos S i e

    P .

    P if B then C[S i , P ]

    Para demonstrar que uma repetio termina, dene-se uma funo f ( x) ,sendo x o conjunto de variveis do programa, tal que:1. f ( x) 0 implica na condio de terminao;2. f ( x) decrementada a cada iterao.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 47

  • 7/21/2019 Paradigmas de projetos de software

    34/69

    Problema de terminao em procedimentosrecursivos

    Uma forma simples de garantir terminao associar um parmetro n paraP (no caso por valor ) e chamar P recursivamente com n 1 .

    A substituio da condio B por n > 0 garante terminao.

    P if n > 0 then P [S i , P ( n 1)]

    necessrio mostrar que o nvel mais profundo de recurso nito, e tambmpossa ser mantido pequeno, pois cada ativao recursiva usa uma parcela dememria para acomodar as variveis.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 48

  • 7/21/2019 Paradigmas de projetos de software

    35/69

    Quando no usar recursividade

    Nem todo problema de natureza recursiva deve ser resolvido com um algo-ritmo recursivo.

    Estes podem ser caracterizados pelo esquema P if B then ( S, P ) .

    Tais programas so facilmente transformveis em uma verso no recursivaP

    ( x := x0 ; while B do S ) .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 49

  • 7/21/2019 Paradigmas de projetos de software

    36/69

    Exemplo de quando no usar recursividade

    Clculo dos nmeros de Fibonacci

    f 0 = 0 ,f 1 = 1 ,f n = f n1 + f n2 , n 2 .

    Soluo:

    f n = 1

    5 [n

    ( )n

    ],

    onde = 5+12 1 , 618 a razo de ouro . O procedimento recursivo (FIBONACCI REC) obtido diretamente da equao o

    seguinte:

    FIBONACCI REC( n )1 if n < 22 then FIBONACCI REC n3 else FIBONACCI REC FIBONACCI REC( n 1) + FIBONACCI REC( n 2)

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 50

  • 7/21/2019 Paradigmas de projetos de software

    37/69

    Exemplo de quando no usar recursividade

    O programa extremamente ineciente porque recalcula o mesmo valorvrias vezes.

    A complexidade de espao para calcular f n O( n ) .

    A complexidade de tempo para calcular f n , considerando como medida decomplexidade o nmero de adies, tambm O( n ) .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 51

  • 7/21/2019 Paradigmas de projetos de software

    38/69

    Verso iterativa do clculo de Fibonacci

    FIBONACCI ITER( n )Variveis auxiliares: Aux , k, Fant , F

    1 Fant 02 F 13 for k 2 to n4 do Aux F + Fant 5 Fant F 6 F Aux 7 FIBONACCI ITER F

    O programa tem complexidades de tempo O( n ) e de espao O(1) . Deve-se evitar recursividade quando existe uma soluo iterativa. Comparao das verses recursiva e iterativa:

    n 20 30 50 100Recursiva 1 s 2 min 21 dias 10 9 anosIterativa 1/3 ms 1/2 ms 3/4 ms 1,5 ms

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 52

  • 7/21/2019 Paradigmas de projetos de software

    39/69

    Funo denida recursivamente (1)

    Uma funo dita ser denida recursivamente se ela refere-se a si mesma.

    Funes recursivas tm um papel fundamental em teoria da computao.

    Exemplo: Funo 91 de McCarthy.

    M ( n ) = ( n 10 se n > 100M ( M ( n + 11)) se n 100M (99) = M ( M (110))

    = M (100)= M ( M (111))= M (101)= 91

    A funo 91 deMcCarthy umafuno recursivaque retorna 91para todos os in-

    teiros n 100 e retorna n 10para n > 100 . Essa funo foi pro-posta pelo cientista da computaoJohn McCarthy, ganhador do ACM Turing Award de 1971, responsvelpor cunhar o termo Inteligncia Arti-cial.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 56

  • 7/21/2019 Paradigmas de projetos de software

    40/69

    Funo denida recursivamente (2)Funo de Ackermann

    A(0 , n ) = n + 1A( m, 0) = A( m 1 , 1)A( m, n ) = A( m 1 , A ( m, n 1))

    A(1 , 2) = A(0 , A (1 , 1))= A(0 , A (0 , A (1 , 0)))= A(0 , A (0 , A (0 , 1)))= A(0 , A (0 , 2))= A(0 , 3)

    = 4

    Matemtico e lgico ale-mo (18961962), princi-pal formulador do desen-volvimento do sistemalgico conhecido como oclculo de epsilon, origi-nalmente devido a DavidHilbert (18621943), que

    se tornaria a base da lgica de Bourbaki eda teoria dos jogos.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 57

  • 7/21/2019 Paradigmas de projetos de software

    41/69

    Funo denida recursivamente (3)Funo de Ackermann

    Essa funo possui uma taxa de crescimento impressionante:

    A(4 , 3) = A (3 , 2 65536 3)

    Funo importante em Cincia da Computao que est relacionada com com-putabilidade.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 58

  • 7/21/2019 Paradigmas de projetos de software

    42/69

    Funo denida recursivamente (4)Funo de Ackermann

    A funo de Ackermann pode ser representada por uma tabela innita.

    ( m, n ) 0 1 2 3 4 A( m, n )

    0 1 2 3 4 5 n + 11 2 3 4 5 6 n + 22 3 5 7 9 11 2 n + 33 5 13 29 61 125 8 2 n 34 13 65533 2 65536

    3 A(3 , 2 65536

    3) A(3 , A (4 , 3))

    5 65533 A(4 , 65533) A(4 , A (5 , 1)) A(4 , A (5 , 2)) A(4 , A (5 , 3))6 A(5 , 1) A(5 , A (5 , 1)) A(5 , A (6 , 1)) A(5 , A (6 , 2)) A(5 , A (6 , 3))

    Os valores da funo de Ackermann crescem muito rapidamente:

    A(4 , 2) maior que o nmero de partculas do universo elevado a potncia200.

    A(5 , 2) no pode ser escrito como uma expanso decimal no universo fsico. Alm da linha 4 e coluna 1, os valores s podem ser expressos usando a

    prpria notao da funo.UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 59

  • 7/21/2019 Paradigmas de projetos de software

    43/69

    Funo recursiva que no bem denida

    Seja a funo G : Z + Z . Para todos inteiros n 1 :

    G ( n ) =

    1 se n

    = 1 ,1 + G ( n2 ) se n par,

    G (3 n 1) se n mpar e n > 1 .

    A funo G bem denida? No!

    G (1) = 1G (2) = 1 + G (1) = 1 + 1 = 2G (3) = G(8) = 1 + G (4) = 1 + (1 + G (2))

    = 1 + (1 + 2) = 4

    G (4) = 1 + G (2) = 1 + 2 = 3G (5) = G(14) = 1 + G (7) = 1 + G (20)

    = 1 + (1 + G (10))= 1 + ( 1 + ( 1 + G (5))) = 3 + G (5)

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 60

  • 7/21/2019 Paradigmas de projetos de software

    44/69

    Funo recursiva que no sabe se bem denida

    Seja a funo H : Z + Z . Para todos inteiros n 1:

    H ( n ) =1 se n = 1 ,1 + H ( n2 ) se n par,

    H (3 n + 1) se n mpar e n > 1.

    A funo H bem denida? No se sabe!

    A funo computvel para todos inteiros n , 1 n < 10 9 .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 61

  • 7/21/2019 Paradigmas de projetos de software

    45/69

    RecursividadeComentrios nais

    Tcnica bastante adequada para expressar algoritmos que so denidos re-cursivamente.

    No entanto, deve ser usada com muito cuidado.

    Na maior parte dos casos funciona como uma tcnica conceitual ao invs de

    uma tcnica computacional .

    Algoritmos recursivos so normalmente modelados por uma equao derecorrncia.

    Ao se fazer a anlise de um algoritmo recursivo, deve-se tambm analisar ocrescimento da pilha.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 62

  • 7/21/2019 Paradigmas de projetos de software

    46/69

    Algoritmos tentativa e erro ( Backtracking )

    Tentativa e erro : decompor o processo em um n-mero nito de sub-tarefas parciais que devem ser ex-ploradas exaustivamente.

    O processo de tentativa gradualmente constri e per-corre uma rvore de sub-tarefas.

    Algoritmos tentativa e erro no seguem uma regra xa

    de computao: Passos em direo soluo nal so tentados e

    registrados. Caso esses passos tomados no levem soluo

    nal, eles podem ser retirados e apagados do re-

    gistro.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 63

  • 7/21/2019 Paradigmas de projetos de software

    47/69

    Algoritmos tentativa e erro ( Backtracking )

    Quando a pesquisa na rvore de solues cresce rapidamente necessriousar algoritmos aproximados ou heursticas que no garantem a soluotima mas so rpidas.

    Algoritmos aproximados: Algoritmos usados normalmente para resolver problemas para os quais no

    se conhece uma soluo polinomial.

    Devem executar em tempo polinomial dentro de limites provveis de qua-lidade absoluta ou assinttica.

    Heurstica: Algoritmo que tem como objetivo fornecer solues sem um limite formal de

    qualidade, em geral avaliado empiricamente em termos de complexidade(mdia) e qualidade das solues. projetada para obter ganho computacional ou simplicidade conceitual,

    possivelmente ao custo de preciso.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 64

  • 7/21/2019 Paradigmas de projetos de software

    48/69

    Tentativa e erro: Passeio do cavalo Tabuleiro com n n posies: cavalo se movimenta segundo regras do xadrez. Problema: partindo da posio (x0 , y0 ), encontrar, se existir, um passeio do cavalo que visita

    todos os pontos do tabuleiro uma nica vez.

    Tenta um prximo movimento:

    TENTA1 Inicializa seleo de movimentos2 repeat3 Seleciona prximo candidato ao movimento4 if aceitvel5 then Registra movimento6 if tabuleiro no est cheio7 then Tenta novo movimento8 if no bem sucedido9 then Apaga registro anterior

    10 until (movimento bem sucedido)(acabaram-se candidatos ao movimento)

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 65

  • 7/21/2019 Paradigmas de projetos de software

    49/69

    Tentativa e erro: Passeio do cavalo

    O tabuleiro pode ser representado por uma matriz n n .

    A situao de cada posio pode ser representada por um inteiro para recor-dar o histrico das ocupaes: t[x, y ] = 0 , campohx, y i no visitado; t[x, y ] = i, campohx, y i visitado no i-simo movimento, 1 i n 2 .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 66

  • 7/21/2019 Paradigmas de projetos de software

    50/69

    Tentativa e erro: Passeio do cavaloRegras do xadrez para o movimento do cavalo

    1

    2 3

    4

    2Dir e 1Cima 1Dir e 2Cima 1Esq e 2Cima 2Esq e 1Cima

    5

    6 7

    8

    2Esq e 1Baixo 1Esq e 2Baixo 1Dir e 2Baixo 2Dir e 1Baixo

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 67

  • 7/21/2019 Paradigmas de projetos de software

    51/69

    Implementao do passeio do cavalo

    PASSEIODOCAVALO( n )Parmetro: n (tamanho do lado do tabuleiro)

    Variveis auxiliares:i, j Contadorest [1 ..n, 1 . .n ] Tabuleiro de n nq Indica se achou uma soluos Movimentos identicados por um nh [1 . .8] , v[1 . .8] Existem oito movimentos possveis

    1 s {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8} Conjunto de movimentos2 h[1 . .8] [2 , 1 , 1 , 2 , 2 , 1 , 1 , 2] Movimentos na horizontal3 v[1 . .8] [1 , 2 , 2 , 1 , 1 , 2 , 2 , 1] Movimentos na vertical4 for i 1 to n Inicializa tabuleiro5 do for j 1 to n6 do t[i, j ] 07 t[1 , 1] 1 Escolhe uma casa inicial do tabuleiro8 TENTA(2 , 1 , 1 , q) Tenta o passeio usando backtracking 9 if q Achou uma soluo?10 then print Soluo

    11 else print No h soluo

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 68

  • 7/21/2019 Paradigmas de projetos de software

    52/69

    Implementao do passeio do cavalo

    TENTA( i ,x,y,q )Parmetros: i (i-sima casa); x, y (posio no tabuleiro); q (achou soluo?)

    Variveis auxiliares: xn,yn,m,q 11 m 02 repeat3 m m + 14 q1 false5 xn x + h [m ]6 yn y + v[m ]7 if ( xn s ) ( yn s )8 then if t[xn, yn ] = 09 then t[xn,yn ] i10 if i < n 2

    11 then TENTA( i + 1 ,xn,yn,q 1)12 if q113 then t[xn,yn ] 014 else q1 true15 until q1( m = 8)16 q q1

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 69

  • 7/21/2019 Paradigmas de projetos de software

    53/69

    Algoritmos tentativa e erro ( Backtracking )Comentrios nais

    Tcnica usada quando no se sabe exatamente que caminho seguir paraencontrar uma soluo.

    No garante a soluo tima.

    Essa tcnica pode ser vista ainda como uma variante da recursividade

    Ao se fazer a anlise de um algoritmo que usa backtracking , deve-se tambmanalisar o crescimento do espao de solues.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 70

  • 7/21/2019 Paradigmas de projetos de software

    54/69

    Diviso e conquista (1)

    Consiste em dividir o problema em partes menores, encontrar solues paraessas partes (supostamente mais fcil), e combin-las em uma soluoglobal. Geralmente leva a solues ecientes e elegantes, principalmente se

    forem recursivas.

    Basicamente essa tcnica consiste das seguintes fases (executadas nesta

    ordem):1. Diviso (particionamento) do problema original em sub-problemas simi-

    lares ao original mas que so menores em tamanho;2. Resoluo de cada sub-problema sucessivamente e independentemente

    (em geral de forma recursiva);

    3. Combinao das solues individuais em uma soluo global para todo oproblema.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 71

  • 7/21/2019 Paradigmas de projetos de software

    55/69

    Diviso e conquista (2)

    Um algoritmo de diviso e conquista normalmente relacionado a umaequao de recorrncia que contm termos referentes ao prprio problema.

    T ( n ) = aT ( nb ) + f ( n ) ,

    onde a indica o nmero de sub-problemas gerados, b o tamanho de cada umdeles e f ( n ) o custo para fazer a diviso.

    Paradigma bastante usado em Cincia da Computao em problemascomo: Ordenao: Mergesort, Quicksort (Tecnicamente falando, o Quicksort poderia ser

    chamado de um algoritmo conquista e diviso); Pesquisa: Pesquisa Binria; Algoritmos aritmticos: multiplicao de inteiros, multiplicao de matrizes,

    FFT (Fast Fourier Transform ); Algoritmos geomtricos: Convex Hull, Par mais prximo; . . .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 72

  • 7/21/2019 Paradigmas de projetos de software

    56/69

    Diviso e conquista: Exemplo 1

    Seja A um vetor de inteiros, A [1 ..n ], n 1 que no est ordenado.

    Pede-se: Determine o maior e o menor elementos desse vetor usando diviso e con-

    quista; Determine o custo (nmero de comparaes) para achar esses dois ele-

    mentos supondo que A possui n elementos.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 73

    l

  • 7/21/2019 Paradigmas de projetos de software

    57/69

    Diviso e conquista: Exemplo 1

    Cada chamada de MaxMin4 atribui s variveis Max e Min o maior e o menorelementos em A [Linf ]. .A [Lsup ].

    MAXMIN4(Linf , Lsup , Max , Min )Variveis auxiliares: Max1 , Max2 , Min1, Min2 , Meio

    1 if ( Lsup Linf ) 1 Condio da parada recursiva2 then if A [Linf ] < A [Lsup ]3 then Max A [Lsup ]4 Min

    A [Linf ]

    5 else Max A [Linf ]6 Min A [Lsup ]7 else Meio bLinf + Lsup 2 c Acha o menor e maior elementos de cada partio8 MAXMIN4(Linf , Meio , Max1 , Min1)9 MAXMIN4(Meio +1 , Lsup , Max2 , Min2 )

    10 if Max1 > Max2 11 then Max

    Max1

    12 else Max Max2 13 if Min1 < Min2 14 then Min Min115 else Min Min2

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 74

    i i i l ( li )

  • 7/21/2019 Paradigmas de projetos de software

    58/69

    Diviso e conquista: Exemplo 1 (Anlise)

    Seja f ( n ) o nmero de comparaes entre os elementos de A, que possui nelementos.

    f ( n ) = 1 , para n 2 ,f ( n ) = f (bn/ 2c) + f (dn/ 2e) + 2 , para n > 2 .Quando n = 2 i para algum inteiro positivo i, temos que:

    f ( n ) = 2 f ( n2 ) + 2

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 75

    Di i i E l 1 (A li )

  • 7/21/2019 Paradigmas de projetos de software

    59/69

    Diviso e conquista: Exemplo 1 (Anlise)

    Resolvendo esta equao de recorrncia (em funo de n e i), temos:f ( n ) = 2 f ( n2 ) + 2 f (2

    i) = 2 f (2 i1 ) + 2

    2 f (n2 ) = 2

    2

    f (n2 2 ) + 2

    2

    2 f (2i

    1

    ) = 22

    f (2i

    2

    ) + 22

    2 2 f ( n2 2 ) = 23 f ( n2 3 ) + 2

    3 2 2 f (2 i2 ) = 2 3 f (2 i3 ) + 2 3... ...2 i3 f ( n2 i3 ) = 2 i2 f (

    n2 i2 ) + 2

    i2 2 i3 f (2 3 ) = 2 i2 f (2 2 ) + 2 i22 i2 f ( n2 i2 ) = 2 i1 f (

    n2 i1 ) + 2

    i1 2 i2 f (2 2 ) = 2 i1 f (2 1 ) + 2 i1= 2 i1 f (2 )+2 i1 = 2 i1 f (2 )+2 i1= 2 i1 + 2 i1 = 2 i1 + 2 i1

    Fazendo a expanso desta equao temos:2 i2 f (2 2 ) = 2 i1 + 2 i12 i3 f (2 3 ) = 2 i1 + 2 i1 + 2 i2...

    2 2 f (2 i2 ) + 2 2 = 2 i1 + 2 i1 + 2 i2 + . . . + 2 32 f (2 i1 ) + 2 = 2 i1 + 2 i1 + 2 i2 + . . . + 2 3 + 2 2

    f (2i

    ) = 2i

    1

    + 2i

    1

    + 2i

    2

    + . . . + 23

    + 22

    + 2= 2 i1 + Pi1k=1 2 k = 2 i1 + 2 i 2f ( n ) = n2 + n 2 = 3n2 2 .

    Logo, f ( n ) = 3 n/ 2 2 para o melhor caso, pior caso e caso mdio.UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 76

    Di i i E l 1 (A li )

  • 7/21/2019 Paradigmas de projetos de software

    60/69

    Diviso e conquista: Exemplo 1 (Anlise)

    Conforme mostrado anteriormente, o algoritmo apresentado neste exemplo timo .

    Entretanto, ele pode ser pior do que os j apresentados, pois, a cadachamada recursiva, salva Linf , Lsup , Max e Min , alm do endereo de re-torno da chamada para o procedimento.

    Alm disso, uma comparao adicional necessria a cada chamada recur-siva para vericar se Lsup Linf 1 (condio de parada).

    O valor de n + 1 deve ser menor do que a metade do maior inteiro que podeser representado pelo compilador, para no provocar overow na operao

    Linf + Lsup .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 77

    Di i i

  • 7/21/2019 Paradigmas de projetos de software

    61/69

    Diviso-e-conquista:Alguns comentrios

    Este paradigma no aplicado apenas a problemas recursivos.

    Existem pelo menos trs cenrios onde diviso e conquista aplicado:1. Processar independentemente partes do conjunto de dados.

    Exemplo: Mergesort.

    2. Eliminar partes do conjunto de dados a serem examinados. Exemplo: Pesquisa binria.

    3. Processar separadamente partes do conjunto de dados mas onde a solu-o de uma parte inuencia no resultado da outra. Exemplo: Somador apresentado.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 97

    B l t

  • 7/21/2019 Paradigmas de projetos de software

    62/69

    Balanceamento

    No projeto de algoritmos, importante procurar sempre manter o balancea-mento na sub-diviso de um problema em partes menores.

    Diviso e conquista no a nica tcnica em que balanceamento til.

    Considere o seguinte exemplo de ordenao:

    EXEMPLO DE ORDENAO( n )

    1 for i = 1 . .n 1 do2 Selecione o menor elemento de A [i..n ] e troque-o com o elemento A [i]. Inicialmente o menor elemento de A [1 . .n ] trocado com o elemento A [1] .

    O processo repetido para as seqncias n 1 , n 2, . . ., 2, com osn

    1 , n

    2 , . . . , 2 elementos, respectivamente, sendo que em cada passo

    o menor elemento trocado com o elemento A [i].

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 98

    B l t A li d l

  • 7/21/2019 Paradigmas de projetos de software

    63/69

    Balanceamento: Anlise do exemplo

    O algoritmo leva equao de recorrncia:

    T ( n ) = T ( n

    1) + n

    1

    T (1) = 0

    para o nmero de comparaes entre elementos.

    Substituindo:

    T ( n ) = T ( n 1) + n 1T ( n 1) = T ( n 2) + n 2...T (2) = T (1 )+1

    e adicionando lado a lado, obtemos:

    T ( n ) = T ( 1 ) + 1 + 2 + + n 1 = n( n 1)2 .

    Logo, o algoritmo O( n 2 ) .UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 99

    B l t A li d l

  • 7/21/2019 Paradigmas de projetos de software

    64/69

    Balanceamento: Anlise do exemplo

    Embora o algoritmo possa ser visto como uma aplicao recursiva de divisoe conquista, ele no eciente para valores grandes de n .

    Para obter ecincia assinttica necessrio fazer um balanceamento : Dividir o problema original em dois sub-problemas de tamanhos aproxi-

    madamente iguais, ao invs de um de tamanho 1 e o outro de tamanhon 1 .

    Comentrio: A anlise da equao de recorrncia nos mostra a razo do comportamento

    quadrtico desse algoritmo. essa equao tambm que sugere como o algoritmo pode ter um de-

    sempenho bem melhor, se um balanceamento for usado.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 100

    E l d b l t M g t

  • 7/21/2019 Paradigmas de projetos de software

    65/69

    Exemplo de balanceamento: Mergesort

    Intercalao : Unir dois arquivos ordenados gerando um terceiro arquivo ordenado

    (merge ).

    Colocar no terceiro arquivo o menor elemento entre os menores dos doisarquivos iniciais, desconsiderando este mesmo elemento nos passos posteri-ores.

    Este processo deve ser repetido at que todos os elementos dos arquivos deentrada sejam escolhidos.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 101

  • 7/21/2019 Paradigmas de projetos de software

    66/69

    Exemplo de balanceamento:

  • 7/21/2019 Paradigmas de projetos de software

    67/69

    Exemplo de balanceamento:Implementao do Mergesort

    MERGESORT( A, i , j )

    Parmetros: A (vetor); i, j (limites inferior e superior da partio)Varivel auxiliar: m (meio da partio)

    1 if i < j2 then m b( i+ j )2 c3 MERGESORT( A, i ,m )4 MERGESORT( A, m + 1 , j )5 MERGE( A, i ,m, j )

    Considere n como sendo uma potncia de 2.

    Merge ( A,i,m,j ) recebe duas seqncias ordenadas A [i..m ] e A [( m + 1) ..j ] e produz umaoutra seqncia ordenada dos elementos de A [i..m ] e A [m + 1 ..j ].

    Como A [i..m ] e A [m + 1 ..j ] esto ordenados, Merge requer no mximo n 1 comparaes.Merge seleciona repetidamente o menor dentre os menores elementos restantes em A [i..m ] eA[m + 1 ..j ]. Caso empate, retira de qualquer uma delas.

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 103

    Anlise do Mergesort

  • 7/21/2019 Paradigmas de projetos de software

    68/69

    Anlise do Mergesort

    Na contagem de comparaes, o comportamento do Mergesort pode ser repre-sentado por:

    T ( n ) = 2 T ( n2 ) + n 1 ,T (1) = 0 .

    No caso dessa equao de recorrncia sabemos que o custo (veja a resoluo

    desta equao na parte de induo ou usando o Teorema Mestre):T ( n ) = n log n n + 1 .

    Logo, o algoritmo O( n log n ) .

    UFMG/ICEx/DCC PAA Paradigmas de Projeto de Algoritmos 104

    Balanceamento:

  • 7/21/2019 Paradigmas de projetos de software

    69/69

    Balanceamento:Alguns comentrios

    Para o problema de ordenao, o balanceamento levou a um resultado muitosuperior: O custo passou de O ( n 2 ) para O ( n log n ) .

    Balanceamento uma tcnica presente em diferentes aspectos algortmicosde Cincia da Computao como Sistemas Operacionais.

    Tambm uma tcnica importante quando o modelo computacional usado o PRAM (Parallel Random Access Machine ).