Mit Codeänderungen, die die order of complexity nicht beeinflussen, müssen alle möglichen Verbesserungen Profiling (Tests, die die Leistung messen) zu überprüfen.
Im folgenden ist noch ein O (n * m), noch mit reduziertem Koeffizient, während es durch b[]
schnellen Schritt kann, wenn a[]
Werte wiederholt, die auch in b[]
existieren. Dies beschleunigt die innere b[]
Schleife, in der die meiste Zeit verbraucht wird.
Blick auf die a[]
Muster für verschiedene Werte so j
kann schneller vorangetrieben werden.
Beispiel:
#define x 0
bool Pattern3(const int *a, size_t size_a, const int *b, size_t size_b) {
static const unsigned char deltas[2][2][2][2] = { //
// What type of pattern is a[0], a[1], a[2]?
{ { { 1, 1 }, // X Y Z
{ 1, 1 } }, // X Y Y
{ { 1, 2 }, // X Y X
{ x, x } } }, // not possible
{ { { 2, 1 }, // X X Y
{ x, x } }, // not possible
{ { x, x }, // not possible
{ 2, 3 } } } }; // X X X
for (unsigned i = 0; i + 2 < size_a; i++) {
const unsigned char *delta23 = deltas[a[0] == a[1]][a[0] == a[2]][a[1] == a[2]];
for (unsigned j = 0; j + 2 < size_b;) {
if (a[0] != b[j]) {
j++;
} else if (a[0 + 1] != b[j + 1]) {
j += delta23[0];
} else if (a[0 + 2] != b[j + 2]) {
j += delta23[1];
} else {
return true;
}
}
a++;
}
return false;
}
Weitere kleinere Änderungen, die helfen können.
In den obigen, tauschen a,b
, wenn size_a > size_b
.
Verwenden Sie const
, da weniger Compiler darauf optimiert werden können.
// int consecutiveInts(int *a, int sizeA, int *b, int sizeB){
int consecutiveInts(const int *a, int sizeA, const int *b, int sizeB){
Iterate von 2.Stellen Sie die Indizierung entsprechend ein.
Ich würde einige Tests vor den Schleifen, so dass es nicht nutzlos Schleife. Prüfen, ob A- und B-Größe zum Beispiel größer als 3 sind. – Badda
Vielleicht möchten Sie Ihre Beispiele vollständiger aufschreiben und Kritik bei [codereview.se] nachfragen. Lesen Sie zuerst [Ein Leitfaden zur Code Review für Stack Overflow Benutzer] (// codereview.meta.stackexchange.com/a/5778), da einige Dinge dort anders gemacht werden! –
Verwenden Sie dynamische Programmierung. – haccks