El 9 de febrero de 2018, 19:31, Manuel A. Estevez Fernandez< stvz...@gmail.com> escribió:
> Gracias por el dato, voy a intentarlo. > Saludos. > > ????? ¿A quién contestas? > > > Manuel Alejandro Estévez Fernández > > > > El 9 de febrero de 2018, 8:06, Daπid <davidmen...@gmail.com> escribió: > >> La forma eficiente de resolver el problema es usando programación >> dinámica (dynamic programming), y es equivalente a uno de los problemas >> clásicos: dar cambio en monedas. Hay mucha documentación al respecto, sobre >> todo en inglés. >> >> Un par de enlaces, sin garantía de calidad: >> >> https://interactivepython.org/runestone/static/pythonds/Recu >> rsion/DynamicProgramming.html >> https://es.wikibooks.org/wiki/Programaci%C3%B3n_din%C3%A1mic >> a/Problema_de_las_monedas_con_programaci%C3%B3n_din%C3%A1mica >> >> Si te interesa, mi recomendación es que estudies programación dinámica en >> general, en cuanto lo pilles, aplicarlo a tu problema es fácil. >> >> /David. >> >> 2018-01-12 21:35 GMT+01:00 Manuel A. Estevez Fernandez <stvz...@gmail.com >> >: >> >>> Hola a todos, tengo la siguiente necesidad: >>> >>> Encontrar una combinación de valores pertenecientes a una colección cuyo >>> resultado sea un numero determinado. >>> >>> Algo así: >>> id target valores >>> 1 100 20 >>> 1 100 30 >>> 1 100 50 >>> 1 100 15 >>> 1 100 45 >>> 1 100 60 >>> 2 150 75 >>> 2 150 75 >>> 2 150 100 >>> 3 1500 900 >>> 3 1500 500 >>> 3 1500 600 >>> 3 1500 1000 >>> 3 1500 750 >>> 3 1500 200 >>> 3 1500 300 >>> 3 1500 10 >>> 3 1500 30 >>> 3 1500 50 >>> >>> Toda esta información la tengo en un archivo csv. El cual leo y genero >>> un diccionario: >>> >>> { >>> id : { target : target , values : [ valores ] } >>> , id : { target : target , values : [ valores ] } >>> } >>> >>> con el siguiente codigo realizo un matriz de verdad de la longitud de la >>> cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 >>> con ese vale. >>> >>> import numpy as np >>> import itertools >>> >>> for id in in diccionario : >>> for tup in itertools.product([0,1] , repeat=len(diccionario[id]['va >>> lues'])): >>> resultado = np.sum( np.dot( np.array(list(tup)) , np.array( >>> diccionario[id]['valores'] ) ) ) >>> if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( >>> diccionario[id]['target'] + 1) : >>> print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', >>> diccionario[id]['valores'] >>> break >>> >>> >>> >>> La problematica que tengo es que obviamente entre mas grande sea la >>> cantida de valores la combinaciones serán muchas más. >>> >>> Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de >>> como empezar. >>> >>> No sé como hacerlo o si sea posible lo siguiente: >>> Lanzar un proceso por ID. >>> -Generar una segmentación de la matriz de verdad y asignarla un >>> subproceso >>> -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se >>> detengan los subprocesos >>> -Avanzar al siguiente ID. >>> >>> Saludos y gracias de antemano. >>> >>> >>> >>> Manuel Alejandro Estévez Fernández >>> >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >>> >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> >> > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > > -- usuario linux #274354 normas de la lista: http://wiki.debian.org/es/NormasLista como hacer preguntas inteligentes: http://www.sindominio.net/ayuda/preguntas-inteligentes.html
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es