[[email protected]]. soma de subconjuntos dado um conjunto de inteiros, existe algum subconjunto dele...
TRANSCRIPT
![Page 2: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/2.jpg)
CIn - UFPE
Soma de subconjuntosDado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’ ?
![Page 3: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/3.jpg)
CIn - UFPE
Soma de subconjuntosDado 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}
![Page 4: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/4.jpg)
CIn - UFPE
Soma de subconjuntosDado 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} :)
![Page 5: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/5.jpg)
CIn - UFPE
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(2N), já que precisamos gerar todos os subconjuntos possíveis.
:(
![Page 6: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/6.jpg)
CIn - UFPE
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(2N), já que precisamos gerar todos os subconjuntos possíveis.
:(
• Ou poderíamos usar programação dinâmica para resolver este problema.
:)
![Page 7: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/7.jpg)
CIn - UFPE
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
![Page 8: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/8.jpg)
CIn - UFPE
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.
![Page 9: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/9.jpg)
CIn - UFPE
Programação Dinâmica• Tabela para os 0 primeiros elementos
Note que não precisamos representar “valores” maiores que o nosso “valor objetivo”.
0 1 2 3 4 5
0 true false false false false false
1
2
3
4
5
Quantidade de
elementos
Valores
![Page 10: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/10.jpg)
CIn - UFPE
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.
![Page 11: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/11.jpg)
CIn - UFPE
Programação Dinâmica• Tabela para os 1 primeiros elementos
0 1 2 3 4 5
0 true false false false false false
1 true true false false false false
2
3
4
5
Quantidade de
elementos
Valores
![Page 12: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/12.jpg)
CIn - UFPE
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.
![Page 13: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/13.jpg)
CIn - UFPE
Programação Dinâmica• Tabela para os 2 primeiros elementos
0 1 2 3 4 5
0 true false false false false false
1 true true false false false false
2 true true false true true false
3
4
5
Quantidade de
elementos
Valores
![Page 14: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/14.jpg)
CIn - UFPE
Programação Dinâmica• Tabela para os 3 primeiros elementos
0 1 2 3 4 5
0 true false false false false false
1 true true false false false false
2 true true false true true false
3 true true false true true false
4
5
Quantidade de
elementos
Valores
![Page 15: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/15.jpg)
CIn - UFPE
Programação Dinâmica• Tabela para os 4 primeiros elementos
0 1 2 3 4 5
0 true false false false false false
1 true true false false false false
2 true true false true true false
3 true true false true true false
4 true true true true true true
5
Quantidade de
elementos
Valores
![Page 16: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/16.jpg)
CIn - UFPE
Programação Dinâmica• Tabela para os 5 primeiros elementos
0 1 2 3 4 5
0 true false false false false false
1 true true false false false false
2 true true false true true false
3 true true false true true false
4 true true true true true true
5 true true true true true true
Quantidade de
elementos
Valores
![Page 17: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/17.jpg)
CIn - UFPE
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.
![Page 18: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/18.jpg)
CIn - UFPE
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.
:)
![Page 19: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/19.jpg)
CIn - UFPE
Programação Dinâmica• Qual seria a complexidade deste algoritmo?
N elementos
Valor procurado V
O ( N*V) => O (N) ?
![Page 20: [ibfs@cin.ufpe.br]. Soma de subconjuntos Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’](https://reader035.vdocuments.pub/reader035/viewer/2022070311/552fc140497959413d8dea5f/html5/thumbnails/20.jpg)
CIn - UFPE
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.