Codigos que hayais hecho y que hayan consumido "potencia"

Iniciado por crazykenny, 13 Abril 2011, 17:18 PM

0 Miembros y 1 Visitante están viendo este tema.

crazykenny

Hola; solo es para proponer una cosa, si os parece bien, claro esta.
Dicho sea de paso, si este no es el lugar del tema, ¿me lo podriais mover al lugar pertinente, si no es molestia, claro esta?. Lo digo porque no se si ponerlo aqui o en offtopic, pero como el tema es de programacion, pues he decidido ponerlo aqui.
Bueno, y yendo al grano, se me ha ocurrido la idea de que, entre todos, pongamos algun codigo que, en un determinado momento, haya "requerido", por decirlo asi, muchos recursos del ordenador, o que, en cierta manera, pues el programa se ejecute con cierta lentitud, o bien la maquina, o bien que consuma mucha RAM, entre otras cosas.
Yo, por mi parte, en los codigos que he hecho hasta ahora, como mucho se me ha ralentizado el programa en cuestion unos 117 segundos y pico, en el sentido de estar ahi parado ejecutandose sin hacer nada, por el mero hecho de que no paraba de crear una matriz en cuestion para luego volver a pasar los datos de esta a la anterior con un numero mas, para asi poder insertarle un nuevo valor; desde luego, a ver, lo unico que me "consumia", por asi decirlo, son accesos a la memoria, inncecesarios, por cierto, porque justo hace un rato modifique el codigo para que no tuviese que estar todo el rato creando una matriz detras de otra, y tener tantos accesos a memoria, y asi poder pasar de esperar 117 segundos y pico, a como mucho 3 o 4 segundos, estirando mucho. Por otra parte, cabe destacar que, en las matrices en cuestion, deben haber datos de mas de, no se, 1200 cartas de magic y yugioh, con datos del tipo de, cuanto cuestan bajarse, el idioma en el que estan, fuerza, resistencia, tipo de carta, etc, y destacar que, puesto que hay muchas cartas en español (mas de 1000), ha hecho que, con el codigo inicial de crear matrices, pues no paraba de copiar los numeros de las cartas (mas que nada dicho numero es para "señalar" cuantas cartas tengo, y tambien con este numero, si accedo al numero 23 me aparecen los datos de una, y si accedo al 24, me sale otra, y basicamente, estan ordenadas con ese numero de la primera carta insertada a la ultima) de una matriz a otra, y por eso me tardo 117 segundos en "guardar" los datos de mas de 1100 cartas en español, y decir que no guardaba todos los datos, sino solo su numero, aunque por suerte, lo de "reordenarlas" en una matriz nueva, por sorpresa para mi, apenas tardo el programa, del tipo de 1 o 2 segundos a mucho tirar.
Bueno, mi codigo (o la parte de codigo que ralentiza el programa) es este;
Citar
         xdat#=-1
         For trcx#=0 To productos#
            poorrand#=0
            For trewor#=0 To base_term#
               If searching#(trewor#,0)=1
                  opcion_yy#=searching#(trewor#,1)
                  opcion_yz#=datos_de_productos$(trcx#,trewor#)
                  If opcion_yz#=opcion_yy#
                     poorrand#=poorrand#+1
                  EndIf
               EndIf
            Next
            If poorrand#=opciones_xx#
               If xdat#=-1
                  xdat#=xdat#+1
                  Dim predecesor#(xdat#)
                  predecesor#(xdat#)=trcx#
                  Goto predicin
               EndIf
               If xdat#>-1
                  Dim predecesor_b#(xdat#)
                  For trex#=0 To xdat#
                     opciones#=predecesor#(trex#)
                     predecesor_b#(trex#)=opciones#
                  Next
                  xdat#=xdat#+1
                  Dim predecesor#(xdat#)
                  xdat#=xdat#-1
                  For trex#=0 To xdat#
                     opciones#=predecesor_b#(trex#)
                     predecesor#(trex#)=opciones#
                  Next
                  xdat#=xdat#+1
                  predecesor#(xdat#)=trcx#
               EndIf
               .predicin
            EndIf
         Next
         If xdat#=-1
            Goto probe_dev
         EndIf
         Dim predecesor_b#(xdat#)
         For tr#=0 To xdat#
            .rechoice
            opciones#=Rand(0,xdat#)
            If predecesor#(opciones#)=-1
               Goto rechoice
            EndIf
            predecesor_b#(tr#)=predecesor#(opciones#)
            predecesor#(opciones#)=-1
         Next
Me disclpo por el error o posible error en lo que respeta a colocar en un sitio inadecuado lo que es este tema.
Gracias por vuestra atencion.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

skapunky

Nada, demasiado codigo para tu proposito, imagina esto en pascal por ejemplo:


Do
(aquí lo que sea, crear archivos, escribir testo en un txt...)
loop

Repeat
(aquí lo que sea, crear archivos, escribir testo en un txt...)
Until 2=3

Si te fijas són 2 ejemplos de bucles infinitos, es decir, el ordenador se cuelga. La idea es que haces una repetición con una lógica que nunca se pueda dar.
Killtrojan Syslog v1.44: ENTRAR

crazykenny

No, si skapunky, tienes razon, que los programas que hago, como norma, tienen muchas lineas de codigo para lo que quiero hacer, excepto para lo mas basico, en el sentido de, por ejemplo, guardar categorias en una matriz, y aun asi, a partir de la segunda categoria, se me alarga un poco el codigo, mas que nada porque no se me "ocurren" cosas mas cortas, y es mas, con el codigo que he puesto aqui, es el unico que he podido, como lo diria, "optimizar", en el sentido de que, a ver, este codigo, cuando llevas "un monton" de productos, o datos, con un parametro en comun (pongamos, yo que se, 1200 como es mi caso), pues tarda 117 segundos en cargarlos todos en memoria, en el sentido de que no para de ampliar la matriz principal a base de volcar sus datos en otra secundaria, para luego, la matriz principal, volverla a crear con un valor mas alto, en el sentido de que antes de volcar los datos a la matriz secundaria, por ejemplo, tiene un valor 100, y cuando ha volcado los datos, aumento en uno el numero que indica el tamaño de la matriz para hacerla mas grande, y asi volver a volcar los datos de la matriz secundaria en la principal, y, bueno, pues que cuando ya tienes una cantidad "grande" de parametros con otros parametros en comun, pues lo que pasa es que el programa no para de acceder a memoria y reservarla una vez detras de otra, y claro, en caso de hacer esto unos cuantos centenares de veces, pues como que ralentiza mucho el programa en el sentido de acceder mucho a memoria y reservar cada vez mas y volcar los datos de un lado a otro sin parar a base de usar FOR/NEXT, y claro, eso se nota, por lo que tuve que modificar el codigo, y ahora, pese a que tambien el codigo modificado es algo "largo", mas o menos como este que muestro, pues bueno, en vez de tardar 117 segundos como hace este codigo en preparar los datos, pues tarda 3 o 4 a mucho estirar; eso si, esto, en mi programa, reconozco que no es necesario si lo que quieres es mostrar todas las cosa con un determinado parametro, pero si que es una forma de hacer que el sistema te las ordene aleatoriamente los datos guardados en una matriz partiendo de la que aparece en mi codigo, aunque tambien podria hacer un bucle FOR/NEXT, con una matriz, en la cual pondria el valor 1 si una cosa tiene X valores y 0 si no los tiene, y luego acceder a esta a base de random, y cada vez que se "muestre algo", pues modificar el 1 por el 0, aunque eso quizas me pueda consumir algo de tiempo en el sentido de estar comprobando con un bucle FOR/NEXT cada vez que se muestra algo para ver si aun quedan cosas que se puedan mostrar en la matriz, no se, se me ocurre.
Por otra parte, en serio, no es por ofender, skapunky, pero, ¿alguien mas quiere enseñar codigos que consuman mucho en algun sentido, como ahora, muchos accesos a RAM, CPU, tarjeta grafica, entre otras cosas?.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

pucheto

#3
Cualquier solucion por battracking a algun problema NP.
Unos divertidos de optimizar son los algoritmos de IA para juegos por turnos(tipo ajedrez por ejemplo, pero la idea seria algo mas simple)... Arrancas con el algoritmo de minmax, le agregas la poda alfa-beta, heuristicas para podar antes, q se pueda ejecutar de forma concurrente, etc...

crazykenny

Una pregunta, pucheto, ¿Que es battracking?.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Akai

Creo que se refería a Backtracking o búsqueda con retroceso.

Encontrarás información en la wikipedia, pero básicamente consiste en encontrar la solución a problemas que dependan de decisiones pudiendo volver atrás si en algún momento se descubre que en un paso anterior se ha tomado una decisión que imposibilita la solución.

Los sudokus, el problema de las n reinas y otros por el estilo son problemas de backtracking.

Por así decirlo, backtracking es el término medio entre fuerza bruta y voraces.

crazykenny

Ok, gracias por la aclaracion Akai; personalmente, en algunos temas de informatica quizas pueda saber algo, pero en lo que es mayoritariamente metodos de programacion como Backtracking, pues ni idea.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/