Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #29  
Antiguo 23-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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:
bool FuerzaBruta(charSerialcharSalidacharRango)
{
  
int L strlen(Serial);
  
int R strlen(Rango);
  
int ni;

  for(
n=0n<Ln++) Salida[n] = *RangoSalida[n] = 0;
  
  
int r=00;
  do{
    *
Salida Rango[r];
    
//acarreo
    
for(int c=0Salida[c]==*Rango && f>0c++){
      for(
i=0Rango[i] && Rango[i]!=Salida[c+1]; i++);
      
Salida[c+1] = Rango[(i+1)%R];
    }
    
f=1;
    
r++; if(r==Rr=0;
  }while(
strcmp(SalidaSerial));
  return 
true;

Cambio el tipo de bucle a do while, lo que me obliga a incrementar el índice r y añado otra variable (f) para detectar que no es la primera vez que pasamos por el primer carácter de Rango. No compruebo que se terminaron las combinaciones porque encontraré el Serial obligatoriamente.

Un paso más puede ser escribirlo en asm, no lo he hecho pero es muy probable que incremente algo la velocidad
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 08:51:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi