A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’

Apresentações semelhantes


Apresentação em tema: "Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’"— Transcrição da apresentação:

1

2 Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’ ?

3 Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’ ? •Exemplo: Dado o seguinte conjunto de inteiros, pergunta-se se existe algum subconjunto tal que sua soma seja 15. • { 1, 3, 7, 6, 8}

4 Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’ ? •Exemplo: Dado o seguinte conjunto de inteiros, pergunta-se se existe algum subconjunto tal que sua soma seja 15. • { 1, 3, 7, 6, 8} • Sim, o subconjunto {1, 6, 8} :)

5 Solução •Mas como fazer isto ? • Poderíamos montar todos os subconjuntos possíveis do conjunto e testar se sua soma é o valor esperado. Mas essa solução tem complexidade O(2 N ), já que precisamos gerar todos os subconjuntos possíveis. :(

6 Solução •Mas como fazer isto ? • Poderíamos montar todos os subconjuntos possíveis do conjunto e testar se sua soma é o valor esperado. Mas essa solução tem complexidade O(2 N ), já que precisamos gerar todos os subconjuntos possíveis. :( • Ou poderíamos usar programação dinâmica para resolver este problema. :)

7 Programação Dinâmica • Partindo do princípio que resolver o problema para um conjunto de tamanho N-1 é mais fácil do que para um de tamanho N e de que resolver o problema para um valor v’-1 é mais fácil do que resolver para um valor v’ (Subproblemas), então podemos usar a idéia de: • Resolver a versão mais simples do problema. •Expandir até resolver o problema inicial :P

8 Programação Dinâmica • Conjunto { 1, 3, 7, 2, 6} e valor procurado 5. •Vamos criar um array bidimensional sum, tal que: sum[i][j] me diz se eu posso gerar o valor j usando os i primeiros elementos do conjunto. Inicialmente, vamos usar os 0 primeiros elementos do conjunto para gerar o valor 0. sum[0][0] = true; //Já que usando 0 elementos, a soma deles é 0. [trivial] Agora, vamos usar os 0 primeiros elementos para gerar o valor 1. sum[0][1] = false; //Já que a soma de 0 elementos é 0. Para todos os outros valores, sum[0][i] será false.

9 Programação Dinâmica • Tabela para os 0 primeiros elementos Note que não precisamos representar “valores” maiores que o nosso “valor objetivo” truefalse Valores

10 Programação Dinâmica • Conjunto { 1, 3, 7, 2, 6} e valor procurado 5. •Agora, vamos fazer o mesmo processo feito antes, mas agora para os 1- primeiros caras: • Para todo valor v’’ do array, faremos: • Se eu já conseguia gerar este valor usando os 0 primeiros elementos, então eu ainda posso gerar este valor com os 1 primeiros elementos. E como eu já conseguia gerar este valor v’’, então, agora eu posso gerar este valor v’’ somado ao valor do primeiro elemento do conjunto. • Ou seja, usando os 1 primeiros elementos, eu poderei gerar o 0 e o 1. * Usar não significa necessariamente que eu estou somando ele. Significa que eu já analisei a possibilidade de usá-lo e não usá-lo.

11 Programação Dinâmica • Tabela para os 1 primeiros elementos truefalse 1true false Valores

12 Programação Dinâmica • Conjunto { 1, 3, 7, 2, 6} e valor procurado 5. •Semelhantemente, faremos para todos os k primeiros caras, até usarmos todos os elementos do conjunto. • Para todo valor v’’ do array, faremos: • Se eu já conseguia gerar este valor usando os k-1 primeiros elementos, então eu ainda posso gerar este valor com os k primeiros elementos. E como eu já conseguia gerar este valor v’’, então, agora eu posso gerar este valor v’’ somado ao valor do k-ésimo elemento do conjunto.

13 Programação Dinâmica • Tabela para os 2 primeiros elementos truefalse 1true false 2true falsetrue false Valores

14 Programação Dinâmica • Tabela para os 3 primeiros elementos truefalse 1true false 2true falsetrue false 3true falsetrue false 4 5 Valores

15 Programação Dinâmica • Tabela para os 4 primeiros elementos truefalse 1true false 2true falsetrue false 3true falsetrue false 4true 5 Valores

16 Programação Dinâmica • Tabela para os 5 primeiros elementos truefalse 1true false 2true falsetrue false 3true falsetrue false 4true 5 Valores

17 Programação Dinâmica • Pela resultado final da tabela, podemos ver que há um subconjunto do conjunto inicial, tal que, sua soma é igual ao valor procurado 5.

18 Programação Dinâmica • Pela resultado final da tabela, podemos ver que há um subconjunto do conjunto inicial, tal que, sua soma é igual ao valor procurado 5. • Analisando um pouco mais a tabela, podemos ver que o valor 5 já poderia ser gerado usando os 4 primeiros elementos da tabela. :)

19 Programação Dinâmica • Qual seria a complexidade deste algoritmo?  N elementos  Valor procurado V  O ( N*V) => O (N) ?

20 Programação Dinâmica • Qual seria a complexidade deste algoritmo?  N elementos  Valor procurado V  O ( N*V) => O (N) ?  Não exatamente.  Pois V não é uma constante, pois mudando a entrada o seu valor muda.  Mas V está atrelado ao valor então dizemos que o algoritmo é pseudo-polinomial.

21


Carregar ppt "Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’"

Apresentações semelhantes


Anúncios Google