otimaaposted2

Post on 08-Apr-2018

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

  • 8/7/2019 OtimaApostED2

    1/171

    Algoritmos e

    Estruturas de Dados II

    Introduo

    Antonio Alfredo Ferreira Loureiroloureiro@dcc.ufmg.brhttp://www.dcc.ufmg.br/~loureiro

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 1

    http://loureiro@dcc.ufmg.br/http://www.dcc.ufmg.br/~loureirohttp://www.dcc.ufmg.br/~loureirohttp://loureiro@dcc.ufmg.br/
  • 8/7/2019 OtimaApostED2

    2/171

  • 8/7/2019 OtimaApostED2

    3/171

    Estruturas de dados

    Estruturas de dados e algoritmos esto intimamente ligados:

    No se pode estudar estruturas de dados sem considerar os algoritmosassociados a elas; Assim como a escolha dos algoritmos em geral depende da representao

    e da estrutura dos dados.

    Para resolver um problema necessrio escolher uma abstrao da reali-dade, em geral mediante a definio de um conjunto de dados que representaa situao real.

    A seguir, deve ser escolhida a forma de representar esses dados.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 3

  • 8/7/2019 OtimaApostED2

    4/171

    Escolha da representao dos dados

    A escolha da representao dos dados determinada, entre outras, pelas

    operaes a serem realizadas sobre os dados.

    Considere a operao de adio: Para pequenos nmeros, uma boa representao por meio de barras

    verticais (caso em que a operao de adio bastante simples).

    J a representao por dgitos decimais requer regras relativamente com-plicadas, as quais devem ser memorizadas.

    Quando consideramos a adio de grandes nmeros mais fcil a repre-sentao por dgitos decimais (devido ao princpio baseado no peso relativo

    a posio de cada dgito).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 4

  • 8/7/2019 OtimaApostED2

    5/171

    Programas

    Programar basicamente estruturar dados e construir algoritmos.

    Programas so formulaes concretas de algoritmos abstratos, baseados emrepresentaes e estruturas especficas de dados.

    Programas representam uma classe especial de algoritmos capazes deserem seguidos por computadores.

    Um computador s capaz de seguir programas em linguagem de mquina(seqncia de instrues obscuras e desconfortveis).

    necessrio construir linguagens mais adequadas, que facilitem a tarefa de

    programar um computador.

    Uma linguagem de programao uma tcnica de notao para programar,com a inteno de servir de veculo tanto para a expresso do raciocnioalgortmico quanto para a execuo automtica de um algoritmo por um com-

    putador.UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 5

  • 8/7/2019 OtimaApostED2

    6/171

    Tipos de dados

    Caracteriza o conjunto de valores a que uma constante pertence, ou que

    podem ser assumidos por uma varivel ou expresso, ou que podem ser ge-rados por uma funo.

    Tipos simples de dados so grupos de valores indivisveis (como os tiposbsicos integer, boolean, char e real do Pascal).

    Exemplo: uma varivel do tipo boolean pode assumir o valor verdadeiroou o valor falso, e nenhum outro valor.

    Os tipos estruturados em geral definem uma coleo de valores simples, ouum agregado de valores de tipos diferentes.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 6

  • 8/7/2019 OtimaApostED2

    7/171

    Tipos abstratos de dados (TADs)

    Modelo matemtico, acompanhado das operaes definidas sobre o mode-

    lo. Exemplo: o conjunto dos inteiros acompanhado das operaes de adio,subtrao e multiplicao.

    TADs so utilizados extensivamente como base para o projeto de algoritmos.

    A implementao do algoritmo em uma linguagem de programao especfica

    exige a representao do TAD em termos dos tipos de dados e dos operado-res suportados.

    A representao do modelo matemtico por trs do tipo abstrato de dados realizada mediante uma estrutura de dados.

    Podemos considerar TADs como generalizaes de tipos primitivos e proce-dimentos como generalizaes de operaes primitivas.

    O TAD encapsula tipos de dados: A definio do tipo e todas as operaes ficam localizadas numa seo do

    programa.UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 7

  • 8/7/2019 OtimaApostED2

    8/171

    Implementao de TADs

    Considere uma aplicao que utilize uma lista de inteiros. Poderamos definir

    o TAD Lista, com as seguintes operaes:1. Faa a lista vazia;2. Obtenha o primeiro elemento da lista; se a lista estiver vazia, ento retorne

    nulo;3. Insira um elemento na lista.

    H vrias opes de estruturas de dados que permitem uma implementaoeficiente para listas (por exemplo, o tipo estruturado arranjo).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 8

  • 8/7/2019 OtimaApostED2

    9/171

    Implementao de TADs

    Cada operao do tipo abstrato de dados implementada como um procedi-

    mento na linguagem de programao escolhida.

    Qualquer alterao na implementao do TAD fica restrita parte encapsu-lada, sem causar impactos em outras partes do cdigo.

    Cada conjunto diferente de operaes define um TAD diferente, mesmo atuemsob um mesmo modelo matemtico.

    A escolha adequada de uma implementao depende fortemente das oper-aes a serem realizadas sobre o modelo.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 9

  • 8/7/2019 OtimaApostED2

    10/171

    Medida do tempo de execuo de um programa

    O projeto de algoritmos fortemente influenciado pelo estudo de seus com-

    portamentos.

    Depois que um problema analisado e decises de projeto so finalizadas, necessrio estudar as vrias opes de algoritmos a serem utilizados, con-siderando os aspectos de tempo de execuo e espao ocupado.

    Algoritmos so encontrados em todas as reas de Cincia da Computao.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 10

  • 8/7/2019 OtimaApostED2

    11/171

    Tipos de problemas na anlise de algoritmosAnlise de um algoritmo particular

    Qual o custo de usar um dado algoritmo para resolver um problema espec-fico?

    Caractersticas que devem ser investigadas: anlise do nmero de vezes que cada parte do algoritmo deve ser execu-

    tada, estudo da quantidade de memria necessria.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 11

  • 8/7/2019 OtimaApostED2

    12/171

    Tipos de problemas na anlise de algoritmosAnlise de uma classe de algoritmos

    Qual o algoritmo de menor custo possvel para resolver um problema par-ticular?

    Toda uma famlia de algoritmos investigada.

    Procura-se identificar um que seja o melhor possvel. Colocam-se limites para a complexidade computacional dos algoritmos per-

    tencentes classe.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 12

  • 8/7/2019 OtimaApostED2

    13/171

    Custo de um algoritmo

    Determinando o menor custo possvel para resolver problemas de uma dadaclasse, temos a medida da dificuldade inerente para resolver o problema.

    Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada.

    Podem existir vrios algoritmos para resolver o mesmo problema. Se a mesma medida de custo aplicada a diferentes algoritmos, ento

    possvel compar-los e escolher o mais adequado.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 13

  • 8/7/2019 OtimaApostED2

    14/171

    Medida do custo pela execuo do programa emuma plataforma real

    Tais medidas so bastante inadequadas e os resultados jamais devem sergeneralizados: os resultados so dependentes do compilador que pode favorecer algumas

    construes em detrimento de outras; os resultados dependem do hardware;

    quando grandes quantidades de memria so utilizadas, as medidas detempo podem depender deste aspecto.

    Apesar disso, h argumentos a favor de se obterem medidas reais detempo.

    Por exemplo, quando h vrios algoritmos distintos para resolver ummesmo tipo de problema, todos com um custo de execuo dentro de umamesma ordem de grandeza.

    Assim, so considerados tanto os custos reais das operaes como oscustos no aparentes, tais como alocao de memria, indexao, carga,

    dentre outros.UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 14

  • 8/7/2019 OtimaApostED2

    15/171

    Medida do custo por meio de um modelomatemtico

    Usa um modelo matemtico baseado em um computador idealizado.

    Deve ser especificado o conjunto de operaes e seus custos de execues.

    mais usual ignorar o custo de algumas das operaes e considerar apenas

    as operaes mais significativas.

    Por exemplo, algoritmos de ordenao: consideramos o nmero de comparaes entre os elementos do conjunto

    a ser ordenado e ignoramos as operaes aritmticas, de atribuio e ma-

    nipulaes de ndices, caso existam.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 15

  • 8/7/2019 OtimaApostED2

    16/171

    Funo de complexidade

    Para medir o custo de execuo de um algoritmo comum definir uma funode custo ou funo de complexidade f.

    f(n) a medida do tempo necessrio para executar um algoritmo para umproblema de tamanho n.

    Funo de complexidade de tempo: f(n) mede o tempo necessrio para

    executar um algoritmo para um problema de tamanho n.

    Funo de complexidade de espao: f(n) mede a memria necessriapara executar um algoritmo para um problema de tamanho n.

    Utilizaremos f para denotar uma funo de complexidade de tempo daquipara a frente.

    Na realidade, a complexidade de tempo no representa tempo diretamente,mas o nmero de vezes que determinada operao considerada relevante

    executada.UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 16

  • 8/7/2019 OtimaApostED2

    17/171

    Exemplo: Maior elemento

    Considere o algoritmo para encontrar o maior elemento de um vetor de in-teiros A[1..n], n

    1.

    function Max (var A: Vetor): integer;

    var i, Temp: integer;

    begin

    Temp := A[1];

    for i:=2 to n do if Temp < A[i] then Temp := A[i];

    Max := Temp;end;

    Seja f uma funo de complexidade tal que f(n) o nmero de compara-es entre os elementos de A, se A contiver n elementos.

    Logo f(n) = n 1, para n 1.

    Vamos provar que o algoritmo apresentado no programa acima timo.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 17

  • 8/7/2019 OtimaApostED2

    18/171

    Exemplo: Maior elemento

    Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjuntocom n elementos, n

    1, faz pelo menos n

    1 comparaes.

    Prova: Cada um dos n 1 elementos tem de ser mostrado, por meio de com-paraes, que menor do que algum outro elemento.

    Logo n 1 comparaes so necessrias. 2

    O teorema acima nos diz que, se o nmero de comparaes for utilizadocomo medida de custo, ento a funo Max do programa anterior tima.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 18

  • 8/7/2019 OtimaApostED2

    19/171

    Tamanho da entrada de dados

    A medida do custo de execuo de um algoritmo depende principalmente dotamanho da entrada dos dados.

    comum considerar o tempo de execuo de um programa como uma funodo tamanho da entrada.

    Para alguns algoritmos, o custo de execuo uma funo da entrada parti-cular dos dados, no apenas do tamanho da entrada.

    No caso da funo Max do programa do exemplo, o custo uniforme sobretodos os problemas de tamanho n.

    J para um algoritmo de ordenao isso no ocorre: se os dados de en-trada j estiverem quase ordenados, ento o algoritmo pode ter que trabalharmenos.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 19

  • 8/7/2019 OtimaApostED2

    20/171

    Melhor caso, pior caso e caso mdio

    Melhor caso: Menor tempo de execuo sobre todas as entradas de tamanho n.

    Pior caso: Maior tempo de execuo sobre todas as entradas de tamanho n. Se f uma funo de complexidade baseada na anlise de pior caso, o

    custo de aplicar o algoritmo nunca maior do que f(n).

    Caso mdio (ou caso esperado): Mdia dos tempos de execuo de todas as entradas de tamanho n.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 20

  • 8/7/2019 OtimaApostED2

    21/171

    Melhor caso, pior caso e caso mdio

    Na anlise do caso esperado, supe-se uma distribuio de probabilidadessobre o conjunto de entradas de tamanho n e o custo mdio obtido combase nessa distribuio.

    A anlise do caso mdio geralmente muito mais difcil de obter do que asanlises do melhor e do pior caso.

    comum supor uma distribuio de probabilidades em que todas as entradaspossveis so igualmente provveis.

    Na prtica isso nem sempre verdade.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 21

  • 8/7/2019 OtimaApostED2

    22/171

    Exemplo: Registros de um arquivo

    Considere o problema de acessar os registros de um arquivo.

    Cada registro contm uma chave nica que utilizada para recuperar reg-istros do arquivo.

    O problema: dada uma chave qualquer, localize o registro que contenha estachave.

    O algoritmo de pesquisa mais simples o que faz a pesquisa seqencial. Seja f uma funo de complexidade tal que f(n) o nmero de registros

    consultados no arquivo (nmero de vezes que a chave de consulta com-parada com a chave de cada registro).

    Melhor caso: f(n) = 1 (registro procurado o primeiro consultado); Pior caso: f(n) = n (registro procurado o ltimo consultado ou

    no est presente no arquivo);

    Caso mdio: f(n) = n+12 .

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 22

  • 8/7/2019 OtimaApostED2

    23/171

    Exemplo: Registros de um arquivo

    No estudo do caso mdio, vamos considerar que toda pesquisa recupera umregistro.

    Se pi for a probabilidade de que o i-simo registro seja procurado, e con-siderando que para recuperar o i-simo registro so necessrias i compara-es, entof(n) = 1

    p1 + 2

    p2 + 3

    p3 +

    + n

    pn.

    Para calcular f(n) basta conhecer a distribuio de probabilidades pi. Se cada registro tiver a mesma probabilidade de ser acessado que todos os

    outros, ento pi = 1/n, 1 i n.

    Neste caso f(n) = 1n(1 + 2 + 3 + + n) = 1n n(n+1)2 = n+12 A anlise do caso esperado revela que uma pesquisa com sucesso examina

    aproximadamente metade dos registros.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 23

  • 8/7/2019 OtimaApostED2

    24/171

    Exemplo: Maior e menor elementos (1)

    Considere o problema de encontrar o maior e o menor elemento de um vetorde inteiros A[1..n], n

    1.

    Um algoritmo simples pode ser derivado do algoritmo apresentado no pro-grama para achar o maior elemento.

    procedure MaxMin1 (var A: Vetor; var Max, Min: integer);

    var i: integer;

    begin

    Max := A[1]; Min := A[1];for i := 2 to n do

    begin

    if A[i] > Max then Max := A[i]; {Testa se A[i] contm o maior elemento}

    if A[i] < Min then Min := A[i]; {Testa se A[i] contm o menor elemento}

    end;

    end;

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

    Logo f(n) = 2(n 1), para n > 0, para o melhor caso, pior caso e casomdio.UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 24

  • 8/7/2019 OtimaApostED2

    25/171

    Exemplo: Maior e menor elementos (2)

    MaxMin1 pode ser facilmente melhorado: a comparao A[i] < Min s necessria quando o resultado da compara-

    o A[i] > Max for falso.

    procedure MaxMin2 (var A: Vetor; var Max, Min: integer);

    var i: integer;

    begin

    Max := A[1]; Min := A[1];

    for i := 2 to n doif A[i] > Max

    then Max := A[i]

    else if A[i] < Min then Min := A[i];

    end;

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 25

  • 8/7/2019 OtimaApostED2

    26/171

    Exemplo: Maior e menor elementos (2)

    Para a nova implementao temos: Melhor caso: f(n) = n

    1 (quando os elementos esto em ordem

    crescente);

    Pior caso: f(n) = 2(n 1) (quando os elementos esto em ordemdecrescente);

    Caso mdio: f(n) = 3n2 32.

    Caso mdio: A[i] maior do que Max a metade das vezes. Logo, f(n) = n 1 + n12 = 3n2 32, para n > 0.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 26

  • 8/7/2019 OtimaApostED2

    27/171

    Exemplo: Maior e menor elementos (3)

    Considerando o nmero de comparaes realizadas, existe a possibilidadede obter um algoritmo mais eficiente:1. Compare os elementos de A aos pares, separando-os em dois subcon-

    juntos (maiores em um e menores em outro), a um custo de n/2 com-paraes.

    2. O mximo obtido do subconjunto que contm os maiores elementos, a

    um custo de n/2 1 comparaes.3. O mnimo obtido do subconjunto que contm os menores elementos, aum custo de n/2 1 comparaes.

    Contm o mnimo

    ...

    ...

    Contm o mximo

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 27

  • 8/7/2019 OtimaApostED2

    28/171

    Exemplo: Maior e menor elementos (3)procedure MaxMin3(var A: Vetor;

    var Max, Min: integer);

    var i,

    FimDoAnel: integer;begin

    {Garante uma qte par de elementos no vetor para evitar caso de exceo}

    if (n mod 2) > 0

    then begin

    A[n+1] := A[n];

    FimDoAnel := n;end

    else FimDoAnel := n-1;

    {Determina maior e menor elementos iniciais}

    if A[1] > A[2]

    then begin

    Max := A[1]; Min := A[2];

    end

    else begin

    Max := A[2]; Min := A[1];

    end;

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 28

  • 8/7/2019 OtimaApostED2

    29/171

    Exemplo: Maior e menor elementos (3)i:= 3;

    while i A[i+1]

    then begin

    if A[i] > Max then Max := A[i];

    if A[i+1] < Min then Min := A[i+1];

    end

    else beginif A[i] < Min then Min := A[i];

    if A[i+1] > Max then Max := A[i+1];

    end;

    i:= i + 2;

    end;

    end;

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 29

  • 8/7/2019 OtimaApostED2

    30/171

    Exemplo: Maior e menor elementos (3)

    Os elementos de A so comparados dois a dois e os elementos maiores socomparados com Max e os elementos menores so comparados com Min.

    Quando n mpar, o elemento que est na posio A[n] duplicado naposio A[n + 1] para evitar um tratamento de exceo.

    Para esta implementao, f(n) =n

    2 +n

    2

    2 +n

    2

    2 =3n

    2 2, para n > 0,para o melhor caso, pior caso e caso mdio.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 30

  • 8/7/2019 OtimaApostED2

    31/171

    Comparao entre os algoritmosMaxMin1, MaxMin2 e MaxMin3

    A tabela abaixo apresenta uma comparao entre os algoritmos dos progra-mas MaxMin1, MaxMin2 e MaxMin3, considerando o nmero de compara-es como medida de complexidade.

    Os algoritmos MaxMin2 e MaxMin3 so superiores ao algoritmo MaxMin1 de

    forma geral.

    O algoritmo MaxMin3 superior ao algoritmo MaxMin2 com relao ao piorcaso e bastante prximo quanto ao caso mdio.

    Os trs f(n)

    algoritmos Melhor caso Pior caso Caso mdio

    MaxMin1 2(n 1) 2(n 1) 2(n 1)MaxMin2 n 1 2(n 1) 3n/2 3/2MaxMin3 3n/2 2 3n/2 2 3n/2 2

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 31

  • 8/7/2019 OtimaApostED2

    32/171

    Limite inferior: Uso de um orculo

    possvel obter um algoritmo MaxMin mais eficiente?

    Para responder temos de conhecer o limite inferior para essa classe de al-goritmos.

    Tcnica muito utilizada: Uso de um orculo.

    Dado um modelo de computao que expresse o comportamento do algo-ritmo, o orculo informa o resultado de cada passo possvel (no caso, o resul-tado de cada comparao).

    Para derivar o limite inferior, o orculo procura sempre fazer com que o algo-ritmo trabalhe o mximo, escolhendo como resultado da prxima comparaoaquele que cause o maior trabalho possvel necessrio para determinar a res-posta final.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 32

  • 8/7/2019 OtimaApostED2

    33/171

    Exemplo de uso de um orculo

    Teorema: Qualquer algoritmo para encontrar o maior e o menor elementos deum conjunto com n elementos no ordenados, n

    1, faz pelo menos

    3n/2

    2 comparaes.

    Prova: A tcnica utilizada define um orculo que descreve o comportamentodo algoritmo por meio de um conjunto de ntuplas, mais um conjunto de regras

    associadas que mostram as tuplas possveis (estados) que um algoritmo podeassumir a partir de uma dada tupla e uma nica comparao.

    Uma 4tupla, representada por (a,b,c,d), onde os elementos de:

    a nunca foram comparados;

    b foram vencedores e nunca perderam em comparaes realizadas; c foram perdedores e nunca venceram em comparaes realizadas; d foram vencedores e perdedores em comparaes realizadas.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 33

  • 8/7/2019 OtimaApostED2

    34/171

    Exemplo de uso de um orculo

    O algoritmo inicia no estado (n, 0, 0, 0) e termina com (0, 1, 1, n 2).

    ( , 0, 0, 0)

    .

    .

    n(0, 1, 1, 2)

    n

    .

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 34

  • 8/7/2019 OtimaApostED2

    35/171

    Exemplo de uso de um orculo

    Aps cada comparao a tupla (a,b,c,d) consegue progredir apenas se elaassume um dentre os seis estados possveis abaixo:1. (a 2, b + 1, c + 1, d) se a 2 Dois elementos de a so comparados.

    2. (a 1, b + 1, c , d) ou3. (a

    1, b , c + 1, d) ou

    4. (a 1, b , c , d + 1) se a 1 Um elemento de a comparado com um de b ou um de c.

    5. (a, b 1, c , d + 1) se b 2 Dois elementos de b so comparados.

    6. (a,b,c 1, d + 1) se c 2 Dois elementos de c so comparados.

    O primeiro passo requer necessariamente a manipulao do componente a.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 35

    E l d d l

  • 8/7/2019 OtimaApostED2

    36/171

    Exemplo de uso de um orculo

    O caminho mais rpido para levar a at zero requer n/2 mudanas de es-tado e termina com a tupla (0, n/2, n/2, 0) (por meio de comparao dos

    elementos de a dois a dois).

    A seguir, para reduzir o componente b at um so necessrias n/2 1 mu-danas de estado (mnimo de comparaes necessrias para obter o maiorelemento de b).

    Idem para c, com n/2 1 mudanas de estado. Logo, para obter o estado (0, 1, 1, n 2) a partir do estado (n, 0, 0, 0) so

    necessrias

    n/2 + n/2 1 + n/2 1 = 3n/2 2comparaes. 2

    O teorema nos diz que se o nmero de comparaes entre os elementos deum vetor for utilizado como medida de custo, ento o algoritmo MaxMin3

    timo.UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 36

    C i i d f

  • 8/7/2019 OtimaApostED2

    37/171

    Comportamento assinttico de funes

    O parmetro n fornece uma medida da dificuldade para se resolver o proble-ma.

    Para valores suficientemente pequenos de n, qualquer algoritmo custa poucopara ser executado, mesmo os ineficientes.

    A escolha do algoritmo no um problema crtico para problemas de

    tamanho pequeno. Logo, a anlise de algoritmos realizada para valores grandes de n. Estuda-se o comportamento assinttico das funes de custo (comporta-

    mento de suas funes de custo para valores grandes de n).

    O comportamento assinttico de f(n) representa o limite do comportamentodo custo quando n cresce.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 37

    D i i tti

  • 8/7/2019 OtimaApostED2

    38/171

    Dominao assinttica

    A anlise de um algoritmo geralmente conta com apenas algumas operaeselementares.

    A medida de custo ou medida de complexidade relata o crescimento assin-ttico da operao considerada.

    Definio: Uma funo f(n) domina assintoticamente outra funo g(n)se existem duas constantes positivas c e n0 tais que, para n n0, temos

    |g(n)| c |f(n)|.

    ( )g

    cf n( )

    0n

    f , g

    n

    n

    Exemplo:

    Sejam g(n) = (n + 1)2 e f(n) = n2. As funes g(n) e f(n) dominam assintoticamente

    uma a outra, j que|(n + 1)2| 4|n2|

    para n 1 e|n2| |(n + 1)2|

    para n 0.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 38

    C di t d d l it ?

  • 8/7/2019 OtimaApostED2

    39/171

    Como medir o custo de execuo de um algoritmo?

    Funo de Custo ou Funo de Complexidade f(n) = medida de custo necessrio para executar um algoritmo para um

    problema de tamanho n. Se f(n) uma medida da quantidade de tempo necessrio para executar

    um algoritmo para um problema de tamanho n, ento f chamada funode complexidade de tempo de algoritmo.

    Se f(n) uma medida da quantidade de memria necessria para exe-cutar um algoritmo para um problema de tamanho n, ento f chamadafuno de complexidade de espao de algoritmo.

    Observao: tempo no tempo! importante ressaltar que a complexidade de tempo na realidade no re-

    presenta tempo diretamente, mas o nmero de vezes que determinada op-erao considerada relevante executada

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 39

    C t i tti d f

  • 8/7/2019 OtimaApostED2

    40/171

    Custo assinttico de funes

    interessante comparar algoritmos para valores grandes de n.

    O custo assinttico de uma funo f(n) representa o limite do comporta-mento de custo quando n cresce.

    Em geral, o custo aumenta com o tamanho n do problema.

    Observao: Para valores pequenos de n, mesmo um algoritmo ineficiente no custa

    muito para ser executado.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 40

    N t i tti d f

  • 8/7/2019 OtimaApostED2

    41/171

    Notao assinttica de funes

    Existem trs notaes principais na anlise assinttica de funes:

    Notao

    Notao O (O grande)

    Notao

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 41

    N t

  • 8/7/2019 OtimaApostED2

    42/171

    Notao

    g

    c

    0n

    f , g

    2n

    n

    n

    ( )

    ( )

    ( )

    c

    n

    g

    f

    1

    f(n) = (g(n))

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 42

    Notao

  • 8/7/2019 OtimaApostED2

    43/171

    Notao

    A notao limita a funo por fatores constantes.

    Escreve-se f(n) = (g(n)), se existirem constantes positivas c1, c2 e n0tais que para n n0, o valor de f(n) est sempre entre c1g(n) e c2g(n)inclusive.

    Neste caso, pode-se dizer que g(n) um limite assinttico firme (em ingls,

    asymptotically tight bound) para f(n).

    f(n) = (g(n)), c1 > 0, c2 > 0 e n0 |

    0 c1g(n) f(n) c2g(n), n n0

    g

    c

    0n

    f , g

    2n

    nn

    ( )

    ( )( )

    c

    n

    gf

    1

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 43

    Notao : Exemplo

  • 8/7/2019 OtimaApostED2

    44/171

    Notao : Exemplo

    Mostre que 12n2 3n = (n2).

    Para provar esta afirmao, devemos achar constantes c1 > 0, c2 > 0, n > 0,tais que:

    c1n2 1

    2n2 3n c2n2

    para todo n no.Se dividirmos a expresso acima por n2 temos:

    c1 1

    2 3

    n c2

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 44

    Notao : Exemplo

  • 8/7/2019 OtimaApostED2

    45/171

    Notao : Exemplo

    A inequao mais a direita ser sempre vlida para qualquer valor de n 1 aoescolhermos c2

    1

    2

    .

    Da mesma forma, a inequao mais a esquerda ser sempre vlida para qual-quer valor de n 7 ao escolhermos c1 114.

    Assim, ao escolhermos c1 = 1/14, c2 = 1/2 e n0 = 7, podemos verificar que12n

    2 3n = (n2).

    Note que existem outras escolhas para as constantes c1 e c2, mas o fato impor-tante que a escolha existe.

    Note tambm que a escolha destas constantes depende da funo 12n2 3n.

    Uma funo diferente pertencente a (n2) ir provavelmente requerer outrasconstantes.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 45

    Notao : Exemplo

  • 8/7/2019 OtimaApostED2

    46/171

    Notao : Exemplo

    Usando a definio formal de prove que 6n3 = (n2).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 46

    Notao O

  • 8/7/2019 OtimaApostED2

    47/171

    Notao O

    c

    n

    f , gn

    n

    ( )

    ( )

    n

    f

    g

    0

    f(n) = O(g(n))

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 47

    Notao O

  • 8/7/2019 OtimaApostED2

    48/171

    Notao O

    A notao O define um limite superior para a funo, por um fator constante.

    Escreve-se f(n) = O(g(n)), se existirem constantes positivas c e n0 taisque para n n0, o valor de f(n) menor ou igual a cg(n). Neste caso,pode-se dizer que g(n) um limite assinttico superior (em ingls, asymptot-ically upper bound) para f(n).

    f(n) = O(g(n)), c > 0 e n0 | 0 f(n) cg(n), n n0 Escrevemos f(n) = O(g(n)) para expressar que g(n) domina assintotica-

    mente f(n). L-se f(n) da ordem no mximo g(n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 48

    Notao O: Exemplos

  • 8/7/2019 OtimaApostED2

    49/171

    Notao O: Exemplos

    Seja f(n) = (n + 1)2. Logo f(n) O(n2), quando n0 = 1 e c = 4, j que

    (n + 1)2 4n2 para n 1.

    Seja f(n) = n e g(n) = n2. Mostre que g(n) no O(n). Sabemos que f(n) O(n2), pois para n

    0, n

    n2.

    Suponha que existam constantes c e n0 tais que para todo n n0, n2 cn. Assim, c n para qualquer n n0. No entanto, no existe umaconstante c que possa ser maior ou igual a n para todo n.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 49

    Notao O: Exemplos

  • 8/7/2019 OtimaApostED2

    50/171

    Notao O: Exemplos

    Mostre que g(n) = 3n3 + 2n2 + n O(n3). Basta mostrar que 3n3 + 2n2 + n

    6n3, para n

    0.

    A funo g(n) = 3n3 + 2n2 + n tambm O(n4), entretanto esta afir-mao mais fraca do que dizer que g(n) O(n3).

    Mostre que h(n) = log5 n O(log n).

    O logb n difere do logc n por uma constante que no caso logb c. Como n = clogc n, tomando o logaritmo base b em ambos os lados daigualdade, temos que logb n = logb c

    logc n = logc n logb c.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 50

    Notao O

  • 8/7/2019 OtimaApostED2

    51/171

    Notao O

    Quando a notao O usada para expressar o tempo de execuo de umalgoritmo no pior caso, est se definindo tambm o limite (superior) do tempo

    de execuo desse algoritmo para todas as entradas.

    Por exemplo, o algoritmo de ordenao por insero (a ser estudado nestecurso) O(n2) no pior caso.

    Este limite se aplica para qualquerentrada.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 51

    Notao O

  • 8/7/2019 OtimaApostED2

    52/171

    Notao O

    Tecnicamente um abuso dizer que o tempo de execuo do algoritmo deordenao por insero O(n2) (i.e., sem especificar se para o pior caso,

    melhor caso, ou caso mdio) O tempo de execuo desse algoritmo depende de como os dados de

    entrada esto arranjados. Se os dados de entrada j estiverem ordenados, este algoritmo tem um

    tempo de execuo de O(n), ou seja, o tempo de execuo do algoritmode ordenao por insero no melhor caso O(n).

    O que se quer dizer quando se fala que o tempo de execuo O(n2) que no pior caso o tempo de execuo O(n2).

    Ou seja, no importa como os dados de entrada esto arranjados, o tempode execuo em qualquer entrada O(n2).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 52

    Operaes com a notao O

  • 8/7/2019 OtimaApostED2

    53/171

    Operaes com a notao O

    f(n) = O(f(n))c O(f(n)) = O(f(n)) c = constante

    O(f(n)) + O(f(n)) = O(f(n))

    O(O(f(n)) = O(f(n))

    O(f(n)) + O(g(n)) = O(max(f(n), g(n)))

    O(f(n))O(g(n)) = O(f(n)g(n))

    f(n)O(g(n)) = O(f(n)g(n))

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 53

    Operaes com a notao O: Exemplos

  • 8/7/2019 OtimaApostED2

    54/171

    Operaes com a notao O: Exemplos

    Regra da soma O(f(n)) + O(g(n)). Suponha trs trechos cujos tempos de execuo so

    O(n), O(n2) e O(n log n).

    O tempo de execuo dos dois primeiros trechos O(max(n, n2)), que O(n2).

    O tempo de execuo de todos os trs trechos ento

    O(max(n2, n log n)),que O(n2).

    O produto de [log n + k + O(1/n)] por [n + O(n)]

    n log n + kn + O(n log n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 54

    Notao

  • 8/7/2019 OtimaApostED2

    55/171

    Notao

    c

    n

    f , g

    n

    n

    ( )

    ( )

    n

    g

    f

    0

    f(n) = (g(n))

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 55

    Notao

  • 8/7/2019 OtimaApostED2

    56/171

    Notao

    A notao define um limite inferior para a funo, por um fator constante.

    Escreve-se f(n) = (g(n)), se existirem constantes positivas c e n0 taisque para n n0, o valor de f(n) maior ou igual a cg(n). Pode-se dizer que g(n) um limite assinttico inferior (em ingls, asymp-

    totically lower bound) para f(n).

    f(n) = (g(n)), c > 0 e n0 | 0 cg(n) f(n), n n0

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 56

    Notao

  • 8/7/2019 OtimaApostED2

    57/171

    Notao

    Quando a notao usada para expressar o tempo de execuo de um al-goritmo no melhor caso, est se definindo tambm o limite (inferior) do tempo

    de execuo desse algoritmo para todas as entradas.

    Por exemplo, o algoritmo de ordenao por insero (n) no melhorcaso. O tempo de execuo do algoritmo de ordenao por insero (

    n).

    O que significa dizer que o tempo de execuo (i.e., sem especificar se para o pior caso, melhor caso, ou caso mdio) (g(n))? O tempo de execuo desse algoritmo pelo menos uma constante vezes

    g(n) para valores suficientemente grandes de n.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 57

    Notao : Exemplos

  • 8/7/2019 OtimaApostED2

    58/171

    Notao : Exemplos

    Para mostrar que f(n) = 3n3 + 2n2 (n3) basta fazer c = 1, e ento3n3 + 2n2

    n3 para n

    0.

    Seja f(n) = n para n mpar (n 1) e f(n) = n2/10 para n par (n 0). Neste caso f(n) (n2), bastando considerar c = 1/10 e n =

    0,

    2,

    4,

    6, . . .

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 58

    Limites do algoritmo de ordenao por insero

  • 8/7/2019 OtimaApostED2

    59/171

    Limites do algoritmo de ordenao por insero

    O tempo de execuo do algoritmo de ordenao por insero est entre(n) e O(n2).

    Estes limites so assintoticamente os mais firmes possveis. Por exemplo, o tempo de execuo deste algoritmo no (n2), pois o

    algoritmo executa em tempo (n) quando a entrada j est ordenada.

    No contraditrio dizer que o tempo de execuo deste algoritmo no piorcaso (n2), j que existem entradas para este algoritmo que fazem comque ele execute em tempo (n2).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 59

    Teorema

  • 8/7/2019 OtimaApostED2

    60/171

    Teorema

    Para quaisquer funes f(n) e g(n),

    f(n) = (g(n))

    se e somente se,

    f(n) = O(g(n)), e

    f(n) = (g(n))

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 60

    Mais sobre notao assinttica de funes

  • 8/7/2019 OtimaApostED2

    61/171

    Mais sobre notao assinttica de funes

    Existem duas outras notaes na anlise assinttica de funes: Notao o (O pequeno)

    Notao

    Estas duas notaes no so usadas normalmente, mas importante saberseus conceitos e diferenas em relao s notaes O e , respectivamente.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 61

    Notao o

  • 8/7/2019 OtimaApostED2

    62/171

    Notao o

    O limite assinttico superior definido pela notao O pode ser assintotica-mente firme ou no.

    Por exemplo, o limite 2n2 = O(n2) assintoticamente firme, mas o limite2n = O(n2) no .

    A notao o usada para definir um limite superior que no assintotica-mente firme.

    Formalmente a notao o definida como:

    f(n) = o(g(n)), para qq c > 0 e n0 | 0 f(n) < cg(n), n n0

    Exemplo, 2n = o(n2) mas 2n2 = o(n2).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 62

    Notao o

  • 8/7/2019 OtimaApostED2

    63/171

    Notao o

    As definies das notaes O (o grande) e o (o pequeno) so similares. A diferena principal que em f(n) = O(g(n)), a expresso 0

    f(n)

    cg(n) vlida para todas constantes c > 0.

    Intuitivamente, a funo f(n) tem um crescimento muito menor que g(n)quando n tende para infinito. Isto pode ser expresso da seguinte forma:

    limn f(n)g(n)

    = 0

    Alguns autores usam este limite como a definio de o.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 63

    Notao

  • 8/7/2019 OtimaApostED2

    64/171

    Notao

    Por analogia, a notao est relacionada com a notao da mesma formaque a notao o est relacionada com a notao O.

    Formalmente a notao definida como:

    f(n) = (g(n)), para qq c > 0 e n0 | 0 cg(n) < f(n), n n0

    Por exemplo,n2

    2 = (n), mas

    n2

    2 = (n2

    ). A relao f(n) = (g(n)) implica em

    limn

    f(n)

    g(n)= ,

    se o limite existir.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 64

  • 8/7/2019 OtimaApostED2

    65/171

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    66/171

    pComplexidade Constante

    f(n) = O(1)

    O uso do algoritmo independe do tamanho de n. As instrues do algoritmo so executadas um nmero fixo de vezes.

    O que significa um algoritmo ser O(2) ou O(5)?

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 66

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    67/171

    pComplexidade Logartmica

    f(n) = O(log n)

    Ocorre tipicamente em algoritmos que resolvem um problema transfor-mando-o em problemas menores.

    Nestes casos, o tempo de execuo pode ser considerado como sendomenor do que uma constante grande.

    Supondo que a base do logaritmo seja 2: Para n = 1 000, log2 10. Para n = 1 000 000, log2 20.

    Exemplo: Algoritmo de pesquisa binria.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 67

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    68/171

    pComplexidade Linear

    f(n) = O(n)

    Em geral, um pequeno trabalho realizado sobre cada elemento de en-trada.

    Esta a melhor situao possvel para um algoritmo que tem que proces-sar/produzir n elementos de entrada/sada.

    Cada vez que n dobra de tamanho, o tempo de execuo tambm dobra.

    Exemplos: Algoritmo de pesquisa seqencial. Algoritmo para teste de planaridade de um grafo.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 68

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    69/171

    pComplexidade Linear Logartmica

    f(n) = O(n log n)

    Este tempo de execuo ocorre tipicamente em algoritmos que resolvemum problema quebrando-o em problemas menores, resolvendo cada umdeles independentemente e depois agrupando as solues.

    Caso tpico dos algoritmos baseados no paradigma diviso-e-conquista.

    Supondo que a base do logaritmo seja 2: Para n = 1 000 000, log2 20 000 000. Para n = 2 000 000, log2 42 000 000.

    Exemplo: Algoritmo de ordenao MergeSort.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 69

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    70/171

    pComplexidade Quadrtica

    f(n) = O(n2)

    Algoritmos desta ordem de complexidade ocorrem quando os itens de da-dos so processados aos pares, muitas vezes em um anel dentro do outro

    Para n = 1 000, o nmero de operaes da ordem de 1000000. Sempre que n dobra o tempo de execuo multiplicado por 4. Algoritmos deste tipo so teis para resolver problemas de tamanhos rela-

    tivamente pequenos.

    Exemplos: Algoritmos de ordenao simples como seleo e insero.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 70

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    71/171

    pComplexidade Cbica

    f(n) = O(n3)

    Algoritmos desta ordem de complexidade geralmente so teis apenaspara resolver problemas relativamente pequenos.

    Para n = 100, o nmero de operaes da ordem de 1 000 000 Sempre que n dobra o tempo de execuo multiplicado por 8. Algoritmos deste tipo so teis para resolver problemas de tamanhos rela-

    tivamente pequenos.

    Exemplo: Algoritmo para multiplicao de matrizes.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 71

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    72/171

    pComplexidade Exponencial

    f(n) = O(2n)

    Algoritmos desta ordem de complexidade no so teis sob o ponto devista prtico.

    Eles ocorrem na soluo de problemas quando se usa a fora bruta pararesolv-los.

    Para n = 20, o tempo de execuo cerca de 1000000. Sempre que n dobra o tempo de execuo fica elevado ao quadrado.

    Exemplo: Algoritmo do Caixeiro Viajante

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 72

    Classes de Comportamento Assinttico

  • 8/7/2019 OtimaApostED2

    73/171

    pComplexidade Exponencial

    f(n) = O(n!).

    Um algoritmo de complexidade O(n!) dito ter complexidade exponencial,apesar de O(n!) ter comportamento muito pior do que O(2n).

    Geralmente ocorrem quando se usa fora brutana soluo do problema.

    Considerando: n = 20, temos que 20! = 2432902008176640000, um nmero com 19

    dgitos. n = 40 temos um nmero com 48 dgitos.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 73

    Comparao de funes de complexidade

  • 8/7/2019 OtimaApostED2

    74/171

    Funo Tamanho nde custo 10 20 30 40 50 60

    n 0,00001 0,00002 0,00003 0,00004 0,00005 0,00006

    s s s s s sn2 0,0001 0,0004 0,0009 0,0016 0,0.35 0,0036s s s s s s

    n3 0,001 0,008 0,027 0,64 0,125 0.316s s s s s s

    n5 0,1 3,2 24,3 1,7 5,2 13

    s s s min min min

    2n 0,001 1 17,9 12,7 35,7 366s s min dias anos s

    3n 0,059 58 6,5 3855 108 1013

    s min anos s s s

    Funo de Computador Computador 100 Computador 1000custo de tempo atual vezes mais rpido vezes mais rpido

    n t1 100 t1 1000 t1n2 t2 10 t2 31, 6 t2n3 t3 4, 6 t3 10 t32n t4 t4 + 6, 6 t4 + 10

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 74

    Hierarquias de funes

  • 8/7/2019 OtimaApostED2

    75/171

    A seguinte hierarquia de funes pode ser definida do ponto de vista assinttico:

    1 log log n log n n

    nc

    nlog n

    cn

    nn

    ccn

    onde e c so constantes arbitrrias com 0 < < 1 < c.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 75

    Hierarquias de funes: Exerccio 1

  • 8/7/2019 OtimaApostED2

    76/171

    Usando MatLab, ou um outro pacote matemtico, desenhe os grficos dessasfunes, quando n

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 76

    Hierarquias de funes: Exerccio 2

  • 8/7/2019 OtimaApostED2

    77/171

    Onde as seguintes funes se encaixam nessa hierarquia? (Mostre a suasoluo)

    (a) (n) = nln n. Esta funo define o nmero de primos menor ou igual a n.

    (b) e

    log n

    .Dica: ef(n) eg(n) limn(f(n) g(n)) =

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 77

    Hierarquias de Funes

  • 8/7/2019 OtimaApostED2

    78/171

    Preliminares

    A hierarquia apresentada est relacionada com funes que vo para o infinito.

    No entanto, podemos ter o recproco dessas funes j que elas nunca sozero. Isto ,

    f(n) g(n) 1g(n)

    1f(n)

    .

    Assim, todas as funes (exceto 1) tendem para zero:

    1

    ccn

    1

    nn 1

    cn 1

    nlog n 1

    nc 1

    n 1

    log n 1

    log log n 1

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 78

    Hierarquias de FunesS l d ( )

  • 8/7/2019 OtimaApostED2

    79/171

    Soluo de (a)

    (n) = nln n

    Temos que (note que a base do logaritmo no altera a hierarquia):

    1

    n 1

    ln n 1

    Multiplicando por n, temos:n

    n n

    ln n n,

    ou seja,

    n1 (n) nNote que o valor 1 ainda menor que 1.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 79

    Hierarquias de FunesS l d (b)

  • 8/7/2019 OtimaApostED2

    80/171

    Soluo de (b)

    e

    log n

    Dado a hierarquia:

    1 lnln n

    ln n ln ne elevando a e, temos que:

    e1 elnln n e

    ln n e ln n

    Simplificando temos:

    e ln n e

    ln n n

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 80

    Algoritmo exponencial Algoritmo polinomial

  • 8/7/2019 OtimaApostED2

    81/171

    Funes de complexidade: Um algoritmo cuja funo de complexidade O(cn), c > 1, chamado de

    algoritmo exponencial no tempo de execuo. Um algoritmo cuja funo de complexidade O(p(n)), onde p(n) um

    polinmio de grau n, chamado de algoritmo polinomial no tempo de exe-cuo.

    A distino entre estes dois tipos de algoritmos torna-se significativa quandoo tamanho do problema a ser resolvido cresce.

    Esta a razo porque algoritmos polinomiais so muito mais teis na prticado que algoritmos exponenciais.

    Geralmente, algoritmos exponenciais so simples variaes de pesquisaexaustiva.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 81

    Algoritmo exponencial Algoritmo polinomial

  • 8/7/2019 OtimaApostED2

    82/171

    Os algoritmos polinomiais so geralmente obtidos atravs de um entendi-mento mais profundo da estrutura do problema.

    Tratabilidade dos problemas: Um problema considerado intratvel se ele to difcil que no se conhe-

    ce um algoritmo polinomial para resolv-lo. Um problema considerado tratvel (bem resolvido) se existe um algoritmo

    polinomial para resolv-lo.

    Aspecto importante no projeto de algoritmos.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 82

    Algoritmos polinomiais Algoritmos exponenciais

  • 8/7/2019 OtimaApostED2

    83/171

    A distino entre algoritmos polinomiais eficientes e algoritmos exponenciaisineficientes possui vrias excees.

    Exemplo: um algoritmo com funo de complexidade f(n) = 2n maisrpido que um algoritmo g(n) = n5 para valores de n menores ou iguais a20.

    Tambm existem algoritmos exponenciais que so muito teis na prtica. Exemplo: o algoritmo Simplex para programao linear possui complexi-

    dade de tempo exponencial para o pior caso mas executa muito rpido naprtica.

    Tais exemplos no ocorrem com freqncia na prtica, e muitos algoritmosexponenciais conhecidos no so muito teis.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 83

    Algoritmo exponencialO Problema do Caixeiro Viajante

  • 8/7/2019 OtimaApostED2

    84/171

    O Problema do Caixeiro Viajante

    Um caixeiro viajante deseja visitar n cidades de tal forma que sua viagem

    inicie e termine em uma mesma cidade, e cada cidade deve ser visitada umanica vez.

    Supondo que sempre h uma estrada entre duas cidades quaisquer, o prob-lema encontrar a menor rota para a viagem.

    Seja a figura que ilustra o exemplo para quatro cidades c1, c2, c3, c4, em queos nmeros nas arestas indicam a distncia entre duas cidades.

    8

    5

    4

    8

    3

    c1

    c

    c

    c2

    3

    4

    9

    O percurso

    c1, c3, c4, c2, c1

    uma soluo

    para o problema, cujo percurso total tem distn-cia 24.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 84

    Exemplo de algoritmo exponencial

  • 8/7/2019 OtimaApostED2

    85/171

    Um algoritmo simples seria verificar todas as rotas e escolher a menor delas.

    H (n1)! rotas possveis e a distncia total percorrida em cada rota envolven adies, logo o nmero total de adies n!. No exemplo anterior teramos 24 adies. Suponha agora 50 cidades: o nmero de adies seria 50! 1064. Em um computador que executa 109 adies por segundo, o tempo total para

    resolver o problema com 50 cidades seria maior do que 1045 sculos s paraexecutar as adies.

    O problema do caixeiro viajante aparece com freqncia em problemas rela-

    cionados com transporte, mas tambm aplicaes importantes relacionadascom otimizao de caminho percorrido.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 85

    Tcnicas de anlise de algoritmos

  • 8/7/2019 OtimaApostED2

    86/171

    Determinar o tempo de execuo de um programa pode ser um problemamatemtico complexo.

    Determinar a ordem do tempo de execuo, sem preocupao com o valor daconstante envolvida, pode ser uma tarefa mais simples.

    A anlise utiliza tcnicas de matemtica discreta, envolvendo contagem ouenumerao dos elementos de um conjunto: manipulao de somas; produtos; permutaes;

    fatoriais; coeficientes binomiais; soluo de equaes de recorrncia.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 86

    Anlise do tempo de execuo

  • 8/7/2019 OtimaApostED2

    87/171

    Comando de atribuio, de leitura ou de escrita: O(1).

    Seqncia de comandos: determinado pelo maior tempo de execuo dequalquer comando da seqncia.

    Comando de deciso: tempo dos comandos dentro do comando condicional,mais tempo para avaliar a condio, que O(1).

    Anel: soma do tempo de execuo do corpo do anel mais o tempo de avaliara condio para terminao (geralmente O(1)), multiplicado pelo nmero deiteraes.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 87

    Anlise do tempo de execuo

  • 8/7/2019 OtimaApostED2

    88/171

    Procedimentos no recursivos: Cada um deve ser computado separadamente um a um, iniciando com os

    que no chamam outros procedimentos. Avalia-se ento os que so chamam os j avaliados (utilizando os tempos

    desses). O processo repetido at chegar no programa principal.

    Procedimentos recursivos: associada uma funo de complexidade f(n) desconhecida, onde n

    mede o tamanho dos argumentos.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 88

    Procedimento no recursivo

  • 8/7/2019 OtimaApostED2

    89/171

    Algoritmo para ordenar os n elementos de um conjunto A em ordem ascen-dente.

    procedure Ordena (var A: Vetor);

    var i, j, min, x: integer;

    begin

    (1) for i := 1 to n-1 do

    begin

    {min contm o ndice do

    menor elemento de A[i..n]}

    (2) min := i;

    (3) for j := i+1 to n do

    (4) if A[j] < A[min]

    (5) then min := j;

    {Troca A[min] e A[i]}(6) x := A[min];

    (7) A[min] := A[i];

    (8) A[i] := x;

    end;

    end;

    Seleciona o menor elemento do conjunto. Troca este elemento com A[1]. Repete as duas operaes acima com os n 1

    elementos restantes, depois com os n 2, atque reste apenas um.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 89

    Anlise do procedimento no recursivoAnel interno

  • 8/7/2019 OtimaApostED2

    90/171

    Anel interno

    Contm um comando de deciso, com um comando apenas de atribuio.

    Ambos levam tempo constante para serem executados.

    Quanto ao corpo do comando de deciso, devemos considerar o pior caso,assumindo que ser sempre executado.

    O tempo para incrementar o ndice do anel e avaliar sua condio de termi-nao O(1).

    O tempo combinado para executar uma vez o anel O(max(1, 1, 1)) =O(1), conforme regra da soma para a notao O.

    Como o nmero de iteraes ni, o tempo gasto no anel O((ni)1) =O(n i), conforme regra do produto para a notao O.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 90

    Anlise do procedimento no recursivoAnel externo

  • 8/7/2019 OtimaApostED2

    91/171

    Anel externo

    Contm, alm do anel interno, quatro comandos de atribuio:

    O(max(1, (n i), 1, 1, 1)) = O(n i). A linha (1) executada n1 vezes, e o tempo total para executar o programa

    est limitado ao produto de uma constante pelo somatrio de (n i):

    n11 (n

    i) = n(n1)2 =

    n2

    2

    n2 = O(n

    2)

    Considerarmos o nmero de comparaes como a medida de custo relevante,o programa faz (n2)/2 n/2 comparaes para ordenar n elementos.

    Considerarmos o nmero de trocas, o programa realiza exatamente n 1

    trocas.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 91

    Algoritmos recursivos

  • 8/7/2019 OtimaApostED2

    92/171

    Um objeto recursivo quando definido parcialmente em termos de si mesmo

    Exemplo 1: Nmeros naturais(a) 1 um nmero natural(b) o sucessor de um nmero natural um nmero natural

    Exemplo 2: Funo fatorial(a) 0! = 1(b) se n > 0 ento n! = n (n 1)!

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 92

    Algoritmos recursivos

  • 8/7/2019 OtimaApostED2

    93/171

    Exemplo 3: rvores

    (a) A rvore vazia uma rvore(b) se T1 e T2 so rvores ento T um rvore

    T

    T1

    T2

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 93

    Poder da recurso

  • 8/7/2019 OtimaApostED2

    94/171

    Definir um conjunto infinito de objetos atravs de um comando finito

    Um problema recursivo P pode ser expresso como P P[Si, P], onde Pa composio de comandos Si e do prprio P

    Importante: constantes e variveis locais a P so duplicadas a cada chamada

    recursiva

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 94

    Problema de terminao

  • 8/7/2019 OtimaApostED2

    95/171

    Definir um condio de terminao

    Idia: Associar um parmetro, por exemplo n, com P e chamar P recursivamente

    com n 1 como parmetro A condio n > 0 garante a terminao

    Exemplo:P(n) if n > 0 then P[Si; P(n 1)]

    Importante: na prtica necessrio: mostrar que o nvel de recurso finito, e

    tem que ser mantido pequeno! Por que?

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 95

    Razes para limitar a recurso

  • 8/7/2019 OtimaApostED2

    96/171

    Memria necessria para acomodar variveis a cada chamada

    O estado corrente da computao tem que ser armazenado para permitir avolta da chamada recursiva.

    Exemplo:

    function F(i : integer) : integer;

    begin

    if i > 0

    then F := i * F(i-1)

    else F := 1;

    end;

    F(4) 1 4F(3)2 3F(2)3 2F(1)4 1F(0)

    1

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 96

    Quando no usar recursividade

  • 8/7/2019 OtimaApostED2

    97/171

    Algoritmos recursivos so apropriados quando o problema definido em ter-

    mos recursivos

    Entretanto, uma definio recursiva no implica necessariamente que a im-plementao recursiva a melhor soluo!

    Casos onde evitar recursividade: P if condio then (Si; P)

    Exemplo: P if i < n then ( i := i + 1; F := i F; P)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 97

    Eliminando a recursidade de cauda(Tail recursion)

  • 8/7/2019 OtimaApostED2

    98/171

    (Tail recursion)function Fat : integer;

    var F, i : integer;

    begini := 0; F := 1;

    while i < n do

    begin

    i := i+1;

    F := F*i;

    end;

    Fat := F;

    end

    Logo,

    P if B then (S; P)deve ser transformado em

    P (x = x0; while B do S)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 98

    Outro exemplo

  • 8/7/2019 OtimaApostED2

    99/171

    function Fib(n : integer) : integer;

    begin

    if n = 0

    then Fib := 0

    else if n = 1

    then Fib := 1

    else Fib := Fib(n-1) + Fib(n-2);end; {Fib}

    Observao: para cada chamada aFib(n), Fib ativada 2 vezes

    5 s

    4 s

    3 s

    2 s

    1 sf

    ffffff0 s

    f

    ff

    ffff1 s

    t

    tt

    tt

    tt2 s

    1 s

    f

    ff

    ffff0 s

    DD

    DDD

    DDDl

    l

    lll

    lll3 s

    2 s

    1 s

    f

    ff

    ffff0 s

    f

    ffffff1 s

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 99

    Soluo bvia

  • 8/7/2019 OtimaApostED2

    100/171

    function Fib : integer;

    var i, Temp, F, Fant : integer;

    begini := 1; F := 1; Fant := 0;

    while i < n do

    begin

    Temp := F;

    F := F + Fant;

    Fant := Temp;

    i := i+1;

    end;

    Fib := F;

    end; {Fib}

    Complexidade de tempo: T(n) = n 1 Complexidade de espao: E(n) = O(1)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 100

    Procedimento recursivo

  • 8/7/2019 OtimaApostED2

    101/171

    Pesquisa(n);

    (1) if n 1(2) then "inspecione elemento" e termine

    else begin

    (3) para cada um dos n elementos "inspecione elemento";

    (4) Pesquisa(n/3);

    end;

    Para cada procedimento recursivo associada uma funo de complexidadef(n) desconhecida, onde n mede o tamanho dos argumentos para o proce-dimento.

    Obtemos uma equao de recorrncia para f(n).

    Equao de recorrncia: maneira de definir uma funo por uma expressoenvolvendo a mesma funo.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 101

    Anlise do procedimento recursivo

  • 8/7/2019 OtimaApostED2

    102/171

    Seja T(n) uma funo de complexidade que represente o nmero de inspe-es nos n elementos do conjunto.

    O custo de execuo das linhas (1) e (2) O(1) e da linha (3) O(n). Usa-se uma equao de recorrncia para determinar o no de chamadas

    recursivas.

    O termo T(n) especificado em funo dos termos anteriores T(1), T(2),. . ., T(n 1).

    T(n) = n + T(n/3), T(1) = 1 (para n = 1 fazemos uma inspeo).

    Por exemplo, T(3) = T(3/3) + 3 = 4, T(9) = T(9/3) + 9 = 13, e assim

    por diante.

    Para calcular o valor da funo seguindo a definio so necessrios k 1passos para computar o valor de T(3k).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 102

    Exemplo de resoluo de equao de recorrncia

  • 8/7/2019 OtimaApostED2

    103/171

    Substitui-se os termos T(k), k < n, at que todos os termos T(k), k > 1,tenham sido substitudos por frmulas contendo apenas T(1).

    T(n) = n + T(n/3)

    T(n/3) = n/3 + T(n/3/3)

    T(n/3/3) = n/3/3 + T(n/3/3/3)...

    T(n/3/3 /3) = n/3/3 /3 + T(n/3 /3)

    Adicionando lado a lado, temos

    T(n) = n + n

    (1/3) + n

    (1/32) + n

    (1/33) +

    + (n/3/3

    /3)

    que representa a soma de uma srie geomtrica de razo 1/3, multiplicada porn, e adicionada de T(n/3/3 /3), que menor ou igual a 1.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 103

    Exemplo de resoluo de equao de recorrncia

  • 8/7/2019 OtimaApostED2

    104/171

    T(n) = n + n (1/3) + n (1/32) + n (1/33) + + + (n/3/3 /3)

    Se desprezarmos o termo T(n/3/3 /3), quando n tende para infinito, ento

    T(n) = n

    i=0

    (1/3)i = n

    1

    1 13

    = 3n

    2

    Se considerarmos o termo T(n/3/3/3 /3) e denominarmos x o nmero desubdivises por 3 do tamanho do problema, ento n/3x = 1, e n = 3x. Logox = log3 n.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 104

    Exemplo de resoluo de equao de recorrncia

  • 8/7/2019 OtimaApostED2

    105/171

    Lembrando que T(1) = 1 temos

    T(n) =

    x

    1

    i=0

    n

    3i + T(n

    3x)

    = nx1i=0

    (1/3)i + 1

    =

    n(1

    (13)

    x)

    (1 13) + 1

    =3n

    2 1

    2

    Logo, o programa do exemplo O(n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 105

    Comentrios sobre recursividade

  • 8/7/2019 OtimaApostED2

    106/171

    Evitar o uso de recursividade quando existe uma soluo bvia por iterao!

    Exemplos: Fatorial Srie de Fibonacci

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 106

    Anlise de algoritmos recursivos

  • 8/7/2019 OtimaApostED2

    107/171

    Comportamento descrito por uma equao de recorrncia

    Enfoque possvel: Usar a prpria recorrncia para substituir para T(m), m < n at que todos

    os termos tenham sido substitudos por frmulas envolvendo apenas T(0)ou o caso base

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 107

    Anlise da funo fat

  • 8/7/2019 OtimaApostED2

    108/171

    Seja a seguinte funo para calcular o fatorial de n:

    function fat(n : integer}) : integer};

    beginif n 1

    Esta equao diz que quando n = 1 o custo para executar fat igual a d.Para valores de n maiores que 1, o custo para executar fat c mais o custopara executar T(n 1)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 108

  • 8/7/2019 OtimaApostED2

    109/171

    Alguns somatrios teis

  • 8/7/2019 OtimaApostED2

    110/171

    ni=1

    i = n(n + 1)2

    k

    i=02k = 2k+1 1

    ki=0

    1

    2i= 2 1

    2k

    ki=0

    ai =ak+1 1

    a 1 (a = 1)

    n

    i=1i2 =

    n(n + 1)(2n + 1)

    6

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 110

    Algumas recorrncias bsicas: Caso 1

  • 8/7/2019 OtimaApostED2

    111/171

    T(n) = T(n2) + 1 (n

    2)

    T(1) = 0 (n = 1)

    Vamos supor que:

    n = 2k k = log n

    Resolvendo por expanso temos:

    T(2k) = T(2k1) + 1

    = (T(2k2) + 1 ) + 1= (T(2k3) + 1) + 1 + 1

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

    + 1 k

    = k

    T(n) = log n

    T(n) = O(log n)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 111

    Algumas recorrncias bsicas: Caso 2

  • 8/7/2019 OtimaApostED2

    112/171

    T(n) = 2T(n2

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

    Vamos supor que n = 2k k = log n. Resolvendo por expanso temos:T(2k) = 2T(2k1) + 2k

    = 2(2T(2k2) + 2k1) + 2k

    = 2(2(2T(2k3) + 2k2) + 2k1) + 2k

    ... ...= 2(2( (2(2T( 1 ) + 22) + 23) + ) + 2k1) + 2k= (k 1)2k + 2k= k2k

    T(n) = n log n

    T(n) = O(n log n)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 112

    Teorema Mestre

  • 8/7/2019 OtimaApostED2

    113/171

    Recorrncias da forma

    T(n) = aT(n/b) + f(n),

    onde a 1 e b > 1 so constantes e f(n) uma funo assintoticamente pos-itiva podem ser resolvidas usando o Teorema Mestre. Note que neste caso noestamos achando a forma fechada da recorrncia mas sim seu comportamento

    assinttico.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 113

    Teorema Mestre

  • 8/7/2019 OtimaApostED2

    114/171

    Sejam as constantes a 1 e b > 1 e f(n) uma funo definida nos inteirosno-negativos pela recorrncia:

    T(n) = aT(n/b) + f(n),

    onde a frao n/b pode significar n/b ou n/b. A equao de recorrnciaT(n) pode ser limitada assintoticamente da seguinte forma:

    1. Se f(n) = O(nlogb a) para alguma constante > 0,ento T(n) = (nlogb a) .

    2. Se f(n) = (nlogb a), ento T(n) = (nlogb a log n) .

    3. Se f(n) = (nlogb a+) para alguma constante > 0 e se af(n/b)cf(n) para alguma constante c < 1 e para n suficientemente grande,

    ento T(n) = (f(n)) .

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 114

    Comentrios sobre o teorema Mestre

  • 8/7/2019 OtimaApostED2

    115/171

    Nos trs casos estamos comparando a funo f(n) com a funo nlogb a.Intuitivamente, a soluo da recorrncia determinada pela maior das duasfunes.

    Por exemplo: No primeiro caso a funo nlogb a a maior e a soluo para a recorrncia

    T(n) = (nlogb a). No terceiro caso, a funo f(n) a maior e a soluo para a recorrncia

    T(n) = (f(n)). No segundo caso, as duas funes so do mesmo tamanho. Neste caso,

    a soluo fica multiplicada por um fator logartmico e fica da forma T(n) =(nlogb a log n) = (f(n)log n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 115

    Tecnicalidades sobre o teorema Mestre

  • 8/7/2019 OtimaApostED2

    116/171

    No primeiro caso, a funo f(n) deve ser no somente menor que nlogb a

    mas ser polinomialmente menor. Ou seja, f(n) deve ser assintoticamentemenor que nlogb a por um fator de n, para alguma constante > 0.

    No terceiro caso, a funo f(n) deve ser no somente maior que nlogb amas ser polinomialmente maior e satisfazer a condio de regularidade que

    af(n/b) cf(n). Esta condio satisfeita pela maior parte das funespolinomiais encontradas neste curso.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 116

    Tecnicalidades sobre o teorema Mestre

  • 8/7/2019 OtimaApostED2

    117/171

    Teorema no cobre todas as possibilidades para f(n): Entre os casos 1 e 3 existem funes f(n) que so menores que nlogb a

    mas no so polinomialmente menores. Entre os casos 2 e 3 existem funes f(n) que so maiores que nlogb a

    mas no so polinomialmente maiores.Se a funo f(n) cai numa dessas condies ou a condio de regularidade

    do caso 3 falsa, ento no se pode aplicar este teorema para resolver arecorrncia.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 117

    Uso do teorema: Exemplo 1

  • 8/7/2019 OtimaApostED2

    118/171

    T(n) = 9T(n/3) + n

    Temos que,

    a = 9, b = 3, f(n) = n

    Desta forma,nlogb a = nlog3 9 = (n2)

    Como f(n) = O(nlog3 9), onde = 1, podemos aplicar o caso 1 do teoremae concluir que a soluo da recorrncia

    T(n) = (n2)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 118

    Uso do teorema: Exemplo 2

  • 8/7/2019 OtimaApostED2

    119/171

    T(n) = T(2n/3 ) + 1

    Temos que,

    a = 1, b = 3/2, f(n) = 1

    Desta forma,

    nlogb a = nlog3/2 1 = n0 = 1

    O caso 2 se aplica j que f(n) = (nlogb a) = (1). Temos, ento, que asoluo da recorrncia

    T(n) = (log n)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 119

    Uso do teorema: Exemplo 3

  • 8/7/2019 OtimaApostED2

    120/171

    T(n) = 3T(n/4) + n log n

    Temos que,

    a = 3, b = 4, f(n) = n log n

    Desta forma,

    nlogb a = nlog4 3 = O(n0.793)

    Como f(n) = (nlog4 3+), onde 0.2, o caso 3 se aplica se mostrarmosque a condio de regularidade verdadeira para f(n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 120

    Uso do teorema: Exemplo 3

  • 8/7/2019 OtimaApostED2

    121/171

    Para um valor suficientemente grande de n

    af(n/b) = 3(n/4) log(n/4)

    (3/4)n log n = cf(n)

    para c = 3/4. Conseqentemente, usando o caso 3, a soluo para a recor-rncia

    T(n) = (n log n)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 121

    Uso do teorema: Exemplo 4

  • 8/7/2019 OtimaApostED2

    122/171

    T(n) = 2T(n/2) + n log n

    Temos que,

    a = 2, b = 2, f(n) = n log n

    Desta forma,

    nlogb a = n

    Aparentemente o caso 3 deveria se aplicar j que f(n) = n log n assintoti-camente maior que nlogb a = n. Mas no entanto, no polinomialmente maior.A frao f(n)/nlogb a = (n log n)/n = log n que assintoticamente menorque

    n

    para toda constante positiva. Conseqentemente, a recorrncia cai na

    situao entre os casos 2 e 3 onde o teorema no pode ser aplicado.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 122

    Uso do teorema: Exerccio 5

  • 8/7/2019 OtimaApostED2

    123/171

    T(n) = 4T(n/2) + n

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 123

    Uso do teorema: Exerccio 6

  • 8/7/2019 OtimaApostED2

    124/171

    T(n) = 4T(n/2) + n2

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 124

    Uso do teorema: Exerccio 7

  • 8/7/2019 OtimaApostED2

    125/171

    T(n) = 4T(n/2) + n3

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 125

    Uso do teorema: Exerccio 8

    O d d l i A d i l i

  • 8/7/2019 OtimaApostED2

    126/171

    O tempo de execuo de um algoritmo A descrito pela recorrncia

    T(n) = 7T(n/2) + n2

    Um outro algoritmo A tem um tempo de execuo descrito pela recorrncia

    T(n) = aT(n/4) + n2

    Qual o maior valor inteiro de a tal que A assintoticamente mais rpido que

    A?

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 126

    Notao assinttica em funes

    N l t t i tti d f l t ti P

  • 8/7/2019 OtimaApostED2

    127/171

    Normalmente, a notao assinttica usada em frmulas matemticas. Porexemplo, usando a notao O pode-se escrever que n = O(n2). Tambm

    pode-se escrever que2n2 + 3n + 1 = 2n2 + (n)

    Como se interpreta uma frmula como esta?

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 127

    Notao assinttica em funes

    N t i tti i h l d di it d

  • 8/7/2019 OtimaApostED2

    128/171

    Notao assinttica sozinha no lado direito de uma equao, como em n =O(n2)

    Sinal de igualdade significa que o lado esquerdo um membro do conjuntoO(n2)

    n O(n2) ou n n2

    Nunca deve-se escrever uma igualdade onde a notao O aparece sozinha

    com os lados trocados Caso contrrio, poderia se deduzir um absurdo como n2 = n de igual-dades como em O(n2) = n

    Quando se trabalha com a notao O e em qualquer outra frmula que en-volve quantidades no precisas, o sinal de igualdade unidirecional Da vem o fato que o sinal de igualdade ("=") realmente significa ou ,

    usados para incluso de conjuntos

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 128

    Notao assinttica em funes

    S t i tti f l i i ifi

  • 8/7/2019 OtimaApostED2

    129/171

    Se uma notao assinttica aparece numa frmula, isso significa que essa no-tao est substituindo uma funo que no importante definir precisamente

    (por algum motivo). Por exemplo, a equao2n2 + 3n + 1 = 2n2 + (n)

    significa que

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

    onde f(n) alguma funo no conjunto (n). Neste caso, f(n) = 3n + 1que de fato est em (n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 129

    Notao assinttica em funes

    O d t i tti d t f j d li i d t lh

  • 8/7/2019 OtimaApostED2

    130/171

    O uso da notao assinttica desta forma ajuda a eliminar detalhes que noso importantes. Por exemplo, pode-se expressar uma equao de recorrncia

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

    Se se deseja determinar o comportamento assinttico de T(n) ento no necessrio determinar exatamente os termos de mais baixa ordem. Entende-se

    que eles esto includos numa funo f(n) expressa no termo (n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 130

    Notao assinttica em funes

    Em alguns casos a anotao assinttica aparece do lado esquerdo de uma

  • 8/7/2019 OtimaApostED2

    131/171

    Em alguns casos, a anotao assinttica aparece do lado esquerdo de umaequao como em:

    2n2 + (n) = (n2).

    A interpretao de tais equaes deve ser feita usando a seguinte regra:

    possvel escolher uma funo f(n) para o lado esquerdo da igualdade detal forma que existe uma funo g(n) para o lado direito que faz com que a

    equao seja vlida O lado direito da igualdade define um valor no to preciso quanto o lado

    esquerdo. Por exemplo,

    2n2 + 3n + 1 = 2n2 + (n) (1)

    2n2 + (n) = (n2). (2)

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 131

    Notao assinttica em funes

    As equaes (1) e (2) podem ser interpretadas usando a regra acima:

  • 8/7/2019 OtimaApostED2

    132/171

    As equaes (1) e (2) podem ser interpretadas usando a regra acima:

    A equao (1) diz que existe alguma funo f(n) (n) tal que 2n2 +3n + 1 = 2n2 + f(n) para todo n.

    A equao (2) diz que para qualquer funo g(n) (n), existe uma funoh(n) (n2) tal que

    2n2 + g(n) = h(n)

    para todo n. Note que esta interpretao implica que 2n2+3n+1 = (n2),que o que estas duas equaes querem dizer.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 132

  • 8/7/2019 OtimaApostED2

    133/171

    Modelagem usando equao de recorrnciaTorre de Hanoi

  • 8/7/2019 OtimaApostED2

    134/171

    Objetivo:

    Transferir toda a torre para uma das outras varetas, movendo um disco decada vez, mas nunca movendo um disco maior sobre um menor

    Solues particulares: Seja T(n) o nmero mnimo de movimentos para transferir n discos de

    uma vareta para outra de acordo com as regras definidas no enunciado doproblema. No difcil observar que:

    T(0) = 0 [nenhum movimento necessrio]

    T(1) = 1 [apenas um movimento]

    T(2) = 3 [trs movimentos usando as duas varetas]

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 134

  • 8/7/2019 OtimaApostED2

    135/171

    Modelagem usando equao de recorrnciaTorre de Hanoi

  • 8/7/2019 OtimaApostED2

    136/171

    Equao de recorrncia para este problema pode ser expressa por:

    T(0) = 0

    T(n) = 2T(n 1 ) + 1, para n > 0

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 136

    Modelagem usando equao de recorrnciaTorre de Hanoi

  • 8/7/2019 OtimaApostED2

    137/171

    Para pequenos valores de n temos:

    n 0 1 2 3 4 5 6

    T(n) 0 1 3 7 15 31 63

    Esta recorrncia pode ser expressa por

    T(n) = 2n 1

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 137

    Modelagem usando equao de recorrnciaTorre de Hanoi

  • 8/7/2019 OtimaApostED2

    138/171

    Provando por induo matemtica temos:

    Caso base. Para n = 0 temos que T(0) = 201 = 0, que o valor presentena equao de recorrncia.

    Induo. A induo ser feita em n. Vamos supor que a forma fechada sejavlida para todos os valores at n 1, ou seja, T(n 1) = 2n1 1.

    Vamos provar que esta forma fechada de fato vlida para T(n).T(n) = 2T(n 1) + 1 = 2(2n1 1) + 1 = 2n 2 + 1 = 2n 1.

    ... A forma fechada proposta tambm vlida para n.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 138

    Modelagem usando equao de recorrnciaEstratgia para resoluo da equao

  • 8/7/2019 OtimaApostED2

    139/171

    A recorrncia da Torre de Hanoi aparece em vrias aplicaes de todos os tipos.

    Normalmente, existem trs etapas para achar uma forma fechada para o valorde T(n):

    1. Analisar pequenos casos. Com isto podemos ter um entendimento melhordo problema e, ao mesmo tempo, ajudar nos dois passos seguintes.

    2. Achar e provar uma recorrncia para o valor de T(n).3. Achar e provar uma forma fechada para a recorrncia.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 139

    Modelagem usando equao de recorrnciaLinhas no plano

  • 8/7/2019 OtimaApostED2

    140/171

    Problema:

    Qual o nmero mximo de regies Ln determinado por n retas no plano?

    Lembre-se que um plano sem nenhuma reta tem uma regio, com uma retatem duas regies e com duas retas tm quatro regies.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 140

  • 8/7/2019 OtimaApostED2

    141/171

    Anlise Amortizada

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 141

    Introduo

    Cenrio:

  • 8/7/2019 OtimaApostED2

    142/171

    Cenrio: Manter uma estrutura de dados sobre uma seqncia de n operaes.

    Custo por operao: Pode ser alto, por exemplo, (n).

    Custo total:

    Pode no ser n custo no pior caso de uma operao.

    Questo: Como fazer uma anlise mais precisa num cenrio como esse?

    Soluo: Anlise amortizada.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 142

    Custo amortizado

    Definio:

  • 8/7/2019 OtimaApostED2

    143/171

    Definio: Custo mdio de uma operao sobre uma seqncia de n operaes, max-

    imizado sobre todos n e todas seqncias.

    Observaes importantes: O custo amortizado no a mesma coisa que a anlise do caso mdio. No feita nenhuma suposio sobre a seqncia de entrada.

    Amortizao ainda um princpio de pior caso.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 143

    Tcnicas de anlise amortizada

    Trs tcnicas que podem ser usadas para analisar tais cenrios so:

  • 8/7/2019 OtimaApostED2

    144/171

    Trs tcnicas que podem ser usadas para analisar tais cenrios so:

    Mtodo Agregado (Aggregate Method). Mtodo Contbil (Accounting Method). Mtodo Potencial (Potential Method).

    Referncia:

    Introduction to Algorithms, 2nd edition. Thomas H. Cormen, Charles E. Leis-erson, Ronald L. Rivest, Clifford Stein. MIT Press, Hardcover, Published July2001, ISBN 0070131511.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 144

    Exemplo: Incrementar um contador binrio

    Exemplo didtico (toy example).

  • 8/7/2019 OtimaApostED2

    145/171

    Exemplo didtico (toy example).

    Estrutura de dados: Arranjo de k bits, usado para armazenar/contar nmeros de 0 a 2k 1 edepois novamente a 0.

    Operao: Incrementar.

    Custo: Nmero de bits trocados. Exemplo: arranjo de 5 bits.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 145

    Exemplo: Incrementar um contador binrio

    Bits Custo

  • 8/7/2019 OtimaApostED2

    146/171

    Bits Custo

    00000

    00001 100010 2

    00011 1

    00100 3

    Custo varia!

    Custo mximo: O(log n).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 146

    Contador binrio: Cdigo

    Contador binrio de k bits.

  • 8/7/2019 OtimaApostED2

    147/171

    Vetor A[0 . . . k 1] Bit menos significativo na posio A[0]. Bit mais significativo na posio A[k 1]. Um nmero binrio x dado por

    k1i=0 A[i] 2i.

    length[A] = k.

    Para somar 1 (mdulo 2k) ao valor do contador, pode-se usar o procedimentoIncrement(A).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 147

    Contador binrio: Cdigo

  • 8/7/2019 OtimaApostED2

    148/171

    Increment(A)

    i

    0

    while (i < length[A]) (A[i] = 1) dobegin

    A[i] 0i i + 1

    end

    if i < length[A]

    then A[i] 1EndIncrement

    Essencialmente o mesmo algoritmo implementado pelo contador Ripple-

    Carry em hardware.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 148

    Mtodo agregado

    Idia:

  • 8/7/2019 OtimaApostED2

    149/171

    Conte o custo total para as n operaes.

    Tcnica de contagem: Ad hoc, ou seja, cada caso um caso.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 149

    Contador binrio

    Custo por linha varia.

  • 8/7/2019 OtimaApostED2

    150/171

    p Difcil de somar.

    Soluo: Conte por coluna, ou seja, quantas vezes o i-simo bit trocado. Some os custos. Exemplo: arranjo de 5 bits (k = 5).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 150

    Contador binrio

    Bits Custo

  • 8/7/2019 OtimaApostED2

    151/171

    0 0 0 0 0

    0 0 0 0 1 10 0 0 1 0 20 0 0 1 1 10 0 1 0 0 3

    ...

    1 1 1 1 1 10 0 0 0 0 5 2 4 8 16 32

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 151

    Contador binrio

    Custo:

  • 8/7/2019 OtimaApostED2

    152/171

    Para uma seqncia de n incrementos (2k), temos:

    Bit de ordem24 23 22 21 20

    2 4 8 16 32

    ou seja, o bit de ordem 2i trocado 2ki vezes. Logo, o custo total detrocas

    ki=1

    2i = 2k+1 2 = 2 2k 2 = 2n 2 = O(n)

    Custo amortizado por troca = O(n)/n = O(1).

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 152

    Mtodo contbil

    Estrutura de dados vem com uma conta bancria.

  • 8/7/2019 OtimaApostED2

    153/171

    cada operao alocado um custo fixo (custo amortizado). Custos devem ser escolhidos cuidadosamente.

    Se o custo real menor que o custo alocado, deposite a diferena na contabancria.

    Se o custo real maior que o custo alocado, retire a diferena da contabancria para pagar pela operao.

    Prove que o saldo nunca fica negativo.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 153

    Mtodo contbil

    Qual o significado do saldo ficar negativo?

  • 8/7/2019 OtimaApostED2

    154/171

    Para a seqncia de operaes at aquele momento, o custo amortizado

    total no representa um limite superior para o custo real total.

    Concluso: Seqncia de n operaes custa no mximo n custo amortizado.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 154

    Contador binrio

    Custo amortizado para trocar 0 1 = 2 crditos.

  • 8/7/2019 OtimaApostED2

    155/171

    Pague 1 crdito pela operao e deposite 1 crdito na conta.

    Custo amortizado para trocar 1 0 = 0 crditos Retire da conta 1 crdito para pagar pela operao.

    Invariante: Cada bit 1 no contador gerou um crdito. Logo, sempre existe crdito para pagar pela operao de trocar 1 0.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 155

    Anlise amortizada

    Custo para resetar os bits no while pago pelos crditos dos bits que foram

  • 8/7/2019 OtimaApostED2

    156/171

    setados.

    No mximo um bit setado. Custo da operao de incremento no mximo 2.

    O nmero de bits 1 no contador nunca negativo. Saldo nunca negativo.

    Para n operaes de incremento, o custo amortizado total O(n), que umlimite para o custo real total.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 156

    Mtodo potencial

    Associa-se uma energia potencial a cada estrutura de dados.

  • 8/7/2019 OtimaApostED2

    157/171

    Energia potencial o potencial para fazer um estrago. Custo amortizado = Custo atual +

    Novo potencial Potencial anterior

    Deve-se pagar para incrementar o potencial da estrutura de dados.

    Se a operao tem um custo cumulativo alto mas reduz bastante o potencial,ento o custo amortizado baixo.

    Como encontrar o potencial? Determine o que torna uma estrutura de dados ruim.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 157

    Regras bsicas para funes potenciais

    Devem ser sempre no negativas.

  • 8/7/2019 OtimaApostED2

    158/171

    Devem comear de zero. Implica uma seqncia de n operaes que custam no mximo n custo

    amortizado.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 158

    Contador binrio

    Estrutura de dados ruim se tem vrios 1s.

  • 8/7/2019 OtimaApostED2

    159/171

    Seja (Contador)= # 1s no contador.

    Potencial aumenta quando h um incremento:= # (0 1) # (1 0)= 1 # (1 0)

    Custo amortizado do incremento:= Custo real (atual) + Aumento do potencial= (1 + # (1 0) + (1 # (1 0)= 2

    Custo amortizado 2 e o custo de n incrementos no mximo 2n.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 159

    A linguagem de programao Pascal

    Os programas apresentados no livro-texto usam apenas as caractersticas

  • 8/7/2019 OtimaApostED2

    160/171

    bsicas do Pascal.

    So evitadas facilidades mais avanadas disponveis em alguns compi-ladores. No so apresentadas a linguagem na sua totalidade, apenas examinamos

    algumas caractersticas. Um programa Pascal dividido nas seguinte partes:

    program {Cabealho do programa}

    label {Declarao de rtulo para goto}

    const {Definio de constantes}

    type {Definio de tipos de dados}

    var {Declarao de variveis}

    procedure ou function {Declarao de subprogramas}begin {Incio do corpo principal do programa}... {Comandos do programa}

    end {Fim do corpo principal do programa}

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 160

    Tipos em Pascal

    Regra geral:

  • 8/7/2019 OtimaApostED2

    161/171

    Deve-se tornar explcito o tipo associado quando se declara uma constante,

    varivel ou funo.

    Isso permite testes de consistncia durante o tempo de compilao.

    A definio de tipos permite ao programador alterar o nome de tipos exis-tentes e criar um nmero ilimitado de outros tipos.

    No caso do Pascal, os tipos podem ser: simples, estruturadose

    apontadores.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 161

    Tipos simples

    So grupos de valores indivisveis (integer, boolean, char e real).

  • 8/7/2019 OtimaApostED2

    162/171

    Tipos simples adicionais podem ser enumerados por meio de:

    Listagem de novos grupos de valores como, por exemplo:type cor = (vermelho, azul, rosa);

    ...

    var c : cor;...

    c := rosa;

    Indicao de subintervalos como, por exemplo:

    type ano = 1900..1999;

    type letra = A..Z;...

    var a : ano;

    var b : letra;

    As atribuies a:=1986 e b:=B so possveis, mas a:=2001 e b:=7 no oso.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 162

    Tipos estruturados

    Definem uma coleo de valores simples, ou um agregado de valores de tipos

  • 8/7/2019 OtimaApostED2

    163/171

    diferentes.

    Existem quatro tipos estruturados primitivos: Arranjos: tabela n-dimensional de valores homogneos de qualquer tipo.

    Indexada por um ou mais tipos simples, exceto o tipo real. Registros: unio de valores de tipos quaisquer, cujos campos podem ser

    acessados pelos seus nomes. Conjuntos: coleo de todos os subconjuntos de algum tipo simples, com

    operadores especiais (interseco), + (unio), (diferena) e in (per-tence a) definidos para todos os tipos conjuntos.

    Arquivos: seqncia de valores homogneos de qualquer tipo. Geral-

    mente associado com alguma unidade externa.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 163

    Tipo estruturado arranjo: Exemplotype cartao = array [1..80] of char;

    type matriz = array [1..5, 1..5] of real;

    type coluna = array [1 3] of real;

  • 8/7/2019 OtimaApostED2

    164/171

    type coluna = array [1..3] of real;

    type linha = array [ano] of char;

    type alfa = packed array [1..n] of char;type vetor = array [1..n] of integer;

    A constante n deve ser previamente declarada

    const n = 20;

    Dada a varivel

    var x: coluna;

    as atribuies x[1]:=0.75, x[2]:=0.85 e x[3]:=1.5 so possveis.

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 164

    Tipo estruturado registro: Exemplotype data = record

    dia : 1..31;

    mes : 1 12;

  • 8/7/2019 OtimaApostED2

    165/171

    mes : 1..12;

    end;

    type pessoa = record

    sobrenome : alfa;

    primeironome : alfa;

    aniversrio : data;

    sexo : (m, f);

    end;

    Declarada a varivel

    var p: pessoa;

    valores particulares podem ser atribudos:

    p.sobrenome := Ziviani;

    p.primeironome := Patricia;

    p.aniversrio.dia := 21;p.aniversrio.ms := 10;

    p.sexo := f;

    UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 165

    Tipo estruturado conjunto: Exemplotype conjint = set of 1..9;

    type conjcor = set of cor;

    type conjchar = set of char;

  • 8/7/2019 OtimaApostED2

    166/171

    type conjchar set of char;

    O tipo cor deve ser previamente definido como

    type cor = (vermelho, azul, rosa

top related