Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Outra posible solución en PHP #26

Merged
merged 1 commit into from
Jun 7, 2017

Conversation

felixgomez
Copy link
Contributor

@felixgomez felixgomez commented May 22, 2017

Esta vez probo sorte coa implementación dun algoritmo de programación dinámica, que disfrutei implementando, con máis de un quebradeiro de cabeza.

Da bos resultados en listas obtidas a partires de números en intervalos acotados: por exemplo (-1000, 1000). Hai que xogar co tamaño do intervalo para obter máis ou menos número de cases. Canto máis grande sexa o intervalo máis grande será a táboa a reducir e menor o número de cases que se podan conseguir en 300s.

Para executar o código e probar os límites:

$ php -d memory_limit=-1 src/DPMatrixLimitChecker.php

Actualmente estou comprobando sobre listas aleatorias entre esos valores para diferentes lonxitudes. Por exemplo para listas de valores aleatorias no intervalo (-500, 500):

Polo de agora vai polo Case#119 (no Case#117 tarda pouco porque atopou un cero).

Case #115
[-230,-483,-471,-273,473,-455,446,277,39,168,-85,151,-189,190,-430,-214,-251,-70,348,-310,-411,-411,393,407,-353,-499,439,498,-318,-79,-176,-18,-349,-123,-236,90,-260,29,-420,105,65,470,-206,49,148,-82,-357,-343,55,175,47,453,74,-399,399,-480,-344,-35,190,143,35,178,124,230,313,89,170,-35,-313,5,-479,-182,-316,-491,-27,57,-161,374,-326,-327,412,323,-325,-478,-290,76,239,-67,443,-452,-291,278,-97,-427,-290,-43,-345,287,189,31,-483,142,-317,-264,-232,218,31,239,-481,-222,-310,105,-117,35,378]
CASE: OK
Elapsed time: 143.05458307266 (s)
-----------
Case #116
[334,-340,-42,338,-26,325,439,91,361,-94,-322,-341,-403,-360,43,-265,-404,443,-95,452,100,-268,-414,154,-219,125,206,-497,150,-26,-392,300,-412,-113,344,-496,411,3,-238,-117,-458,-481,169,-196,-357,-149,-373,-395,-455,45,4,332,240,112,-215,-21,474,-285,339,270,64,171,191,-82,-431,500,-326,282,336,-112,203,-302,337,-324,-201,500,297,33,489,53,-214,457,-125,252,52,162,413,417,-306,185,467,-482,143,492,38,-135,-346,-38,-376,-152,245,-257,-348,-60,423,-485,283,-448,235,445,-29,-339,436,-381,-389,-496]
CASE: OK
Elapsed time: 182.40541601181 (s)
-----------
Case #117
[365,296,423,295,362,-199,-203,-40,-118,-169,-420,248,-107,442,331,-282,-416,26,-162,-460,-281,-77,229,-135,20,25,485,-47,163,40,-382,237,254,-77,48,-55,249,-55,-19,364,13,-388,-411,360,-352,153,-165,487,468,-150,18,-279,-302,-415,44,190,254,-401,-196,205,150,-245,422,7,410,363,-492,234,-22,-147,240,416,148,-432,-347,320,-324,279,-391,-464,-247,-20,29,0,-86,231,-371,273,61,-284,-274,-336,-357,-246,260,82,377,119,-59,-238,456,458,-157,459,-450,443,-135,144,-299,46,203,456,-332,239,-145,-175,234]
CASE: OK
Elapsed time: 2.8133392333984E-5 (s)
-----------
Case #118
[407,214,329,321,-51,-140,-314,-407,-43,-165,-462,9,36,-57,21,452,312,-285,393,-74,-160,-413,-137,-478,-78,23,-368,-9,-475,115,-172,172,494,-398,-81,-426,452,160,43,346,-209,157,-466,227,393,257,-31,-453,18,-450,335,-269,-258,-67,-50,-428,159,496,-272,410,-76,124,18,-83,399,-238,-103,-301,51,331,439,-241,22,-313,-140,-393,-57,209,106,405,334,122,342,-367,-318,-179,-141,-263,-207,-312,-495,-310,126,-185,479,374,-252,26,431,217,232,63,220,460,148,-361,262,-382,316,-412,337,24,142,-449,-8,-363,33,361]
CASE: OK
Elapsed time: 157.26905608177 (s)
-----------
Case #119
[-148,223,325,285,483,-106,117,186,-243,-107,-472,-248,42,-119,439,-254,431,-299,370,70,176,-404,222,-415,-320,-457,-475,-203,135,-147,193,-252,64,-385,198,-181,-464,-365,-397,469,-468,-144,379,446,212,-346,-308,-109,-489,-304,480,-484,-285,-397,254,187,-57,243,194,-82,226,310,-122,-151,234,213,435,-182,225,322,127,360,460,-148,-96,362,79,-180,228,80,-102,-438,242,369,-239,-443,-471,-387,-200,-316,332,-314,-141,428,75,-328,-48,-7,334,-432,349,-486,245,-215,455,74,-291,-228,-259,-277,106,-65,-300,-96,42,30,-215,-182,-312]
CASE: OK
Elapsed time: 178.54043698311 (s)

Tamén se engade o algoritmo de forza bruta sen optimizar os subconxuntos, que ten un límite en 300 segundos de uns 30 elementos de lonxitude, que ven sendo o habitual. Para executar este último test

$ phpunit
PHPUnit 6.1.0 by Sebastian Bergmann and contributors.

....................                                              20 / 20 (100%)

Time: 1.98 seconds, Memory: 160.01MB

OK (20 tests, 20 assertions)

@antonmry
Copy link
Member

Sí señor, é unha solución moi orixinal

@rubenrua
Copy link
Contributor

rubenrua commented May 23, 2017

Me ha gustado, te voy a copiar una idea para mejorar un poco mi algoritmo de fuerza bruta.

rubenrua added a commit to rubenrua/reto that referenced this pull request May 23, 2017
Peque referenced this pull request May 24, 2017
@tomasalmeida tomasalmeida merged commit 20c0413 into VigoTech:master Jun 7, 2017
@felixgomez felixgomez deleted the reto_vigojug_210705_php branch June 18, 2017 11:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants