J'ai lu le sujet:Comment calculer la notation Big-O sur le code suivant
Big O, how do you calculate/approximate it?
Et ne suis pas sûr de ce que la notation Big-O pour la fonction suivante serait:
static int build_nspaces_pattern(const char * const value, char *pattern,
size_t sz_pattern) {
static char val_buffer[1025];
char *ptr, *saveptr;
size_t szptrn;
ptrdiff_t offset;
val_buffer[0] = '\0';
strncat(val_buffer, value, sizeof(val_buffer) - 1);
val_buffer[sizeof(val_buffer) - 1] = '\0';
pattern[0] = '^'; pattern[1] = '('; pattern[2] = '\0';
for (ptr=strtok_r(val_buffer, ",", &saveptr);
ptr!=NULL;
ptr=strtok_r(NULL, ",", &saveptr)
) {
szptrn = sz_pattern - strlen(pattern) - 1;
if (sanitize(ptr) != 0) {
return -1;
}
strncat(pattern, ptr, szptrn);
szptrn -= strlen(ptr);
strncat(pattern, "|", szptrn);
}
offset = strlen(pattern);
pattern[offset-1] = ')'; pattern[offset] = '$'; pattern[offset+1] = '\0';
return 0;
}
Sanitize est O (n), mais la boucle for s'exécutera k fois (k est le nombre de virgules dans la chaîne). Donc, k * O (n) est toujours O (n), serait-ce O (n^2), O (k.n) ou autre chose?
Merci.
Cette question serait plus facile à répondre si vous fournissez une version pseudo-code simplifiée de votre algorithme. –
N'oubliez pas de prendre en compte les opérations de chaîne - elles peuvent ou non faire une différence dans votre calcul (par exemple, strtok, strlen, strncat, etc.) – MahlerFive