Subset Sum Algoritmos e Estruturas de Dados – IF672

21
CIn - UFPE Subset Sum Algoritmos e Estruturas de Dados – IF672 [[email protected]]

description

Subset Sum Algoritmos e Estruturas de Dados – IF672. [[email protected]]. Soma de subconjuntos. Dado um conjunto de inteiros, existe algum subconjunto dele tal que a soma dos seus elementos seja um valor v’ ?. Soma de subconjuntos. - PowerPoint PPT Presentation

Transcript of Subset Sum Algoritmos e Estruturas de Dados – IF672

Page 1: Subset  Sum Algoritmos e Estruturas de Dados – IF672

CIn - UFPE

Subset SumAlgoritmos e Estruturas de Dados – IF672

[[email protected]]

Page 2: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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

345

Quantidade de

elementos

Valores

Page 10: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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

345

Quantidade de

elementos

Valores

Page 12: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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

345

Quantidade de

elementos

Valores

Page 14: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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 false45

Quantidade de

elementos

Valores

Page 15: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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 false4 true true true true true true5

Quantidade de

elementos

Valores

Page 16: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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 false4 true true true true true true5 true true true true true true

Quantidade de

elementos

Valores

Page 17: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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: Subset  Sum Algoritmos e Estruturas de Dados – IF672

CIn - UFPE

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

Page 20: Subset  Sum Algoritmos e Estruturas de Dados – IF672

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.

Page 21: Subset  Sum Algoritmos e Estruturas de Dados – IF672

CIn - UFPE

Subset SumAlgoritmos e Estruturas de Dados – IF672

[[email protected]]