Maison > Article > développement back-end > Pièges courants et stratégies d'optimisation de la complexité temporelle C++
Il est crucial de comprendre le piège de la complexité temporelle. Les stratégies d'optimisation incluent : 1. Utiliser le bon algorithme 2. Réduire les copies inutiles ; Des exemples pratiques explorent les méthodes d'optimisation pour calculer la somme des carrés d'un tableau, convertir une chaîne en majuscules et rechercher des éléments dans un tableau non ordonné.
Pièges courants et stratégies d'optimisation dans la complexité temporelle C++
Pièges courants en matière de complexité temporelle :
Stratégie d'optimisation :
Cas pratique :
Piège : Le code suivant a pour but de calculer la somme des carrés de chaque élément du tableau.
int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } int sum = 0; for (int i = 0; i < n; i++) { sum += pow(arr[i], 2); } cout << sum << endl; return 0; }
Problème : Le code qui semble ne boucler qu'une seule fois parcourt en fait deux fois chaque élément du tableau : une fois pour l'entrée et une fois pour calculer la somme des carrés.
Optimisation : Optimisez ce code en calculant simultanément la somme des carrés dans l'étape de saisie.
int main() { int n; cin >> n; int arr[n]; int sum = 0; for (int i = 0; i < n; i++) { cin >> arr[i]; sum += pow(arr[i], 2); } cout << sum << endl; return 0; }
Trap : Le code suivant convertit une chaîne en majuscule.
string toUpperCase(string s) { int n = s.length(); for (int i = 0; i < n; i++) { s[i] = toupper(s[i]); } return s; }
Problème : Ce code copie la chaîne à chaque itération.
Optimisation : Utilisez les paramètres de référence pour éviter les copies inutiles.
void toUpperCase(string& s) { int n = s.length(); for (int i = 0; i < n; i++) { s[i] = toupper(s[i]); } }
Trap : Le code suivant recherche des éléments dans un tableau non ordonné.
int findElement(int arr[], int n, int x) { for (int i = 0; i < n; i++) { if (arr[i] == x) { return i; } } return -1; }
Problème : La complexité temporelle du parcours d'un tableau non ordonné est O(n).
Optimisation : Optimisez ce code en triant le tableau, réduisant ainsi la complexité temporelle à O(log n).
int findElement(int arr[], int n, int x) { sort(arr, arr + n); // O(n log n) int l = 0, r = n - 1; while (l <= r) { int mid = (l + r) / 2; if (arr[mid] == x) { return mid; } else if (arr[mid] < x) { l = mid + 1; } else { r = mid - 1; } } return -1; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!