Partitionieren einer Schlüsselsuche

Ich muss eine Reihe von 8 Zeichenfolgen von aaaaaaaa bis zzzzzzzz durchlaufen, ähnlich wie bei einem Brute-Force-Angriff. Im Moment habe ich das folgende schreckliche Durcheinander verschachtelter Schleifen, um es zu tun:

int start = 97;
int range = 25;
int a;
for(a = start; a <= start+range; a++) { //1
    strb[0] = a;
    for(b = start; b <= start+range; b++) { //2
        strb[1] = b;
    for(c = start; c <= start+range; c++) { //3
            strb[2] = c;
            for(d = start; d <= start+range; d++) { //4
                strb[3] = d;
                for(e = start; e <= start+range; e++) { //5
                    strb[4] = e;
                    for(f = start; f <= start+range; f++) { //6
                        strb[5] = f;
                        for(g = start; g <= start+range; g++) { //7
                            strb[6] = g;
                            for(h = start; h <= start+range; h++) { //8
                                strb[7] = h;
                                check(str);
                            tot++;
                            }
                        }
                    }
                }
            }
        }
    }
}

Obwohl dieser Code für den gesamten Suchbereich gut funktioniert, muss ich die Suche auch in kleinere Teile partitionieren, um eine gleichzeitige Suchoperation mit mehreren Threads auszuführen. Z.B. Ich möchte in der Lage sein, nur nach dem 3. 1/25 des Suchraums zu suchen, oder sagen wir, dem 2. 1/15.

Ich muss diese verschachtelten Loops irgendwie zu einem entwickeln, um das zu erreichen, aber ich konnte nicht herausfinden, wie. Ich benutze C. Jede Hilfe wird geschätzt, danke im Voraus.

0
Um eine rekursive Programmierung zu vermeiden, lernen Sie, wie man eine Schleife macht. Es ist einfacher, eine for-Schleife zu verstehen als eine rekursive und die Verwendung von Ressourcen einfacher.
hinzugefügt der Autor fernando.reyes, Quelle
Um "schreckliches Durcheinander von verschachtelten Schleifen" zu vermeiden, lernen Sie das rekursive Programm kennen.
hinzugefügt der Autor EoiFirst, Quelle

1 Antworten

Was Sie brauchen, ist nur ein Iterator, der in alphabetischer Reihenfolge funktioniert.

calculateNext(char strb[8]){
int i;
  for(i=7; i<=0; i++){
    if(strb[i]<'z'){
      strb[i]++;
      break;
    } else {
       strb[i]='a';
       strb[i-1]++;
    }
  }
}

Ich bin mir nicht sicher, ob das völlig funktioniert, aber die allgemeine Idee ist, dass, wenn das letzte Element z ist, dann aufs nächste summieren, wenn nicht, dann summiere es und iteriere.

0
hinzugefügt