Logo Hardware.com.br
Felipe Fontes
Felipe Fonte... Veterano Registrado
1.4K Mensagens 15 Curtidas

Duvida algoritmo

#1 Por Felipe Fonte... 27/06/2011 - 06:19
Galera, eu estou quebrando a cabeça num problema... vamos ver se alguém consegue me dar uma luz anjinho.gif

O problema é o seguinte: Eu tenho uma lista de valores entre zero e um, que já estão ordenados (fiz um heapsort).

Esses termos são combinados de M em M e os valores multiplicados dão o "valor" da combinação...

A questão é: Como determinar as N combinações de maior valor sem ter de calcular todas as combinações??

Não sei se fui claro, então vou fazer um pequeno exemplo:

A=0.2
B=0.3
C=0.5

Seja M=2, as combinações são:
AA=0.2*0.2=0.04
AB=0.2*0.3=0.06
AC=0.2*0.5=0.1
BA=0.3*0.2=0.06
BB=0.3*0.3=0.09
BC=0.3*0.5=0.15
CA=0.5*0.2=0.1
CB=0.5*0.3=0.15
CC=0.5*0.5=0.25

Se eu quisesse as N=3 maiores combinações, seriam CC,CB,BC.

Espero que tenha dado pra entender...

PS: Sim, estou trabalhando com probabilidades, então a soma sempre da 1.
Felipe Fontes
Felipe Fonte... Veterano Registrado
1.4K Mensagens 15 Curtidas
#3 Por Felipe Fonte...
27/06/2011 - 11:16
jcferranti disse:
criar um novo vetor com os resultados, ordená-lo e pegar os 3 maiores valores. Pode ser assim?


Justamente o que eu quero evitar é o calculo de todos os valores...

O exemplo que eu dei tem dimensões pequenas, mas de fato no que eu preciso as dimensões são bem maiores.

Com as dimensões ideais, o numero de combinaçoes seria da ordem de 16^294=7.0222e+305. Só estocar um vetor desse tamanho ja é um problema... de_olho.gif
And the heavens shall tremble

"Life can only be understood backwards, but it must be lived forwards." Soren Kierkegaard
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#4 Por tpcvasco
27/06/2011 - 12:03
Felipe, vc entendeu errado oq o jcferranti quis dizer. Ele não falou para vc calcular todos os valores das combinações e ordenar. Ele disse para vc pegar o valor das letras (A, B, C etc) e ordenar (q pelo q eu entendi, vc já fez) e simplesmente fazer as combinações necessárias com os maiores.
Se vc notar bem, o uso dos maiores valores garante q serão as maiores combinações. Note que, no seu exemplo acima, todas as respostas possuem a letra C, q é o maior número dos 3.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
Felipe Fontes
Felipe Fonte... Veterano Registrado
1.4K Mensagens 15 Curtidas
#5 Por Felipe Fonte...
27/06/2011 - 12:48
tpcvasco disse:
Felipe, vc entendeu errado oq o jcferranti quis dizer. Ele não falou para vc calcular todos os valores das combinações e ordenar. Ele disse para vc pegar o valor das letras (A, B, C etc) e ordenar (q pelo q eu entendi, vc já fez) e simplesmente fazer as combinações necessárias com os maiores.
Se vc notar bem, o uso dos maiores valores garante q serão as maiores combinações. Note que, no seu exemplo acima, todas as respostas possuem a letra C, q é o maior número dos 3.


Realmente, colocando assim o problema é trivial... fiquei_vermelho.png

Vlw, pode fechar...
And the heavens shall tremble

"Life can only be understood backwards, but it must be lived forwards." Soren Kierkegaard
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#6 Por jcferranti
27/06/2011 - 13:44
tpcvasco disse:
Se vc notar bem, o uso dos maiores valores garante q serão as maiores combinações. Note que, no seu exemplo acima, todas as respostas possuem a letra C, q é o maior número dos 3.

nnem tanto assim, veja que CA não está entre os maiores, ele terá que testar todos que possuem C para achar os 3 maiores resultados.

uma outra opção é que enquanto calcula os resultados ele vá alimentando 3 variáveis. sempre que um numero for maior que alguma delas, abre-se espaço para ele, descartando-se o menor entre os 3.
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#7 Por tpcvasco
27/06/2011 - 17:23
jcferranti disse:
nnem tanto assim, veja que CA não está entre os maiores


Sim, mas antes de CA existiram o CC e o CB, q tb faziam parte do grupo dos maiores. É só uma questão então, na verdade, de fazer as combinações M usando os primeiros valores, e não todos eles.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal