![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
tengo que probarlo, se ve mas corto y con muy buena pinta.
|
|
#2
|
||||
|
||||
|
Bueno, tuve que mirarlo y tracear porque a simple vista habia cosas que no tenia claras y luego de tracear me sorprendio los tiempos que obtenia y entonces pensé "claro, el empieza de izquierda a derecha el incremento y yo al contrario y como la palabra buscada era F1ACA pues el llegaba antes a la A que yo a la F" entonces decidí dar la vuelta a la cadena tal como ACA1F y mi sorpresa incrementa al ver que casi no cambió el tiempo ya que subió unos 100 milisegundos
.Con esto solo puedo felicitar al maestro Escafandra por un codigo tan bueno como este. Una cosa mas, le vi un fallo y es que no tiene control de fin de busqueda y si no encuentra la cadena sigue incrementando hasta llegar a desbordar el array por lo que le hice algunos pequeños cambios, el principal para subsanar ese problema y otros para hacerlo mas entendible para mi. Otra cosa, me dio por probar cambiar los for que inicializan la cadena de tope y la cadena inicial por dos memset y vi que los tiempos se incrementaban solo con eso asi que lo dejé con los for. Supongo que memset hace algo mas internamente que ralentiza un poco el proceso. Aquí el código final: Código PHP:
Clic aqui para ver imagen Alucinante la mejora. Mil gracias amigos. Última edición por aguml fecha: 23-10-2014 a las 18:17:30. |
|
#3
|
||||
|
||||
|
Otro posible (aunque no se hasta que punto probable) fallo. El contador que se usa en el for principal puede llegar a desbordarse (en mi maquina quizas en un par de eones jejeje) ya que incrementa continuamente y dependiendo de lo grande del serial a buscar podria ocurrir.
Lo he solucionado poniendo la siguiente linea al final del for que se encarga del acarreo: Código PHP:
|
|
#4
|
||||
|
||||
|
Cita:
Saludos. Última edición por escafandra fecha: 23-10-2014 a las 19:23:56. |
|
#5
|
||||
|
||||
|
Pues si, yo la comprobacion de tope la dejaré por si alguna vez se mete un serial incorrecto pero con lo que me indicas te digo que ha pasado de 188 milisegundos a 156 en el mismo ejemplo que estaba viendo. O sea que en un serial mayor se notaria aun mas.
|
|
#6
|
||||
|
||||
|
¿Probaste la última versión que te puse?
Saludos. |
|
#7
|
||||
|
||||
|
si si, esa misma pero con la comprobacion de cadena final y en vez de usar como comprobacion de salida la funcion strcmp uso un bool que se pone a true cuando la encuentra o cuando llegue al final y en vez de usar un entero para indicar si es la primera pasada yo uso un bool. Tambien supongo que para medir el largo del serial, del rango,y como contador se podrian usar char para ahorrar recursos ¿No?
|
|
#8
|
||||
|
||||
|
La velocidad se consigue por el hecho de trabajar con cadenas estilo C y es independiente de si vas de izquierda a derecha o al revés. Si eliminas comprobaciones y condicionales superfluos también aceleras el proceso. El hecho de no comprobar que se terminaron las combinaciones de caracteres no es casual, ya que si la cadena cumple la condición de contener solo los caracteres existentes en Rango, el resultado lo encuentra sí o sí, por lo tanto no puene entrar en un bucle infinito y ganamos rendimiento.
Una cosa que hace perder rendimiento es usar el resto de la división en el bucle principal, que es el más largo. Si lo eliminamos, le procesador hará menos cálculos, perdemos un poco de elegancia en el código pero ganamos algo de tiempo. Como ejemplo pongo lo siguiente: Código PHP:
Un paso más puede ser escribirlo en asm, no lo he hecho pero es muy probable que incremente algo la velocidad |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Seleccionar un determinado rango de caracteres en un memo | ErikMdqqq | C++ Builder | 7 | 02-08-2013 03:51:49 |
| Es posible crear bucle controlado | José Luis Garcí | Varios | 5 | 05-07-2011 10:04:54 |
| Crear codigo de Fuerza Bruta | kurono | Varios | 12 | 31-01-2011 16:46:26 |
| Como crear un bucle con TEdit's | axlrafael | OOP | 12 | 08-05-2008 19:22:48 |
| Cerrar Form "fuerza bruta" | MaMu | Varios | 3 | 22-05-2007 19:59:50 |
|