Vous êtes-vous déjà demandé pourquoi certains codes s'exécutent à une vitesse fulgurante tandis que d'autres codent ? Entrez Big O Notation - le langage secret utilisé par les développeurs pour discuter de l'efficacité des algorithmes. Décomposons-le en termes simples.
Big O Notation décrit comment les performances de votre code évoluent à mesure que la taille d'entrée augmente. Pensez-y comme à mesurer combien de temps votre code prend lorsque vous lui donnez plus de travail à faire.
Le Saint Graal de la performance. Quelle que soit l'ampleur de votre contribution, l'opération prend le même temps.
function getFirstElement(array) { return array[0]; // Always one operation }
Généralement observé dans les algorithmes qui divisent le problème en deux à chaque fois. La recherche binaire est un exemple classique.
function binarySearch(sortedArray, target) { let left = 0; let right = sortedArray.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (sortedArray[mid] === target) return mid; if (sortedArray[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }
Les performances évoluent linéairement avec la taille d'entrée. Courant dans les algorithmes qui doivent examiner chaque élément une fois.
function findMax(array) { let max = array[0]; for (let i = 1; i < array.length; i++) { if (array[i] > max) max = array[i]; } return max; }
Souvent vu dans les algorithmes de tri efficaces comme le tri par fusion et le tri rapide.
function mergeSort(array) { if (array.length <= 1) return array; const mid = Math.floor(array.length / 2); const left = mergeSort(array.slice(0, mid)); const right = mergeSort(array.slice(mid)); return merge(left, right); }
Commun dans les boucles imbriquées. Les performances se dégradent rapidement à mesure que la taille d'entrée augmente.
function bubbleSort(array) { for (let i = 0; i < array.length; i++) { for (let j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { [array[j], array[j + 1]] = [array[j + 1], array[j]]; } } } return array; }
Évitez les boucles imbriquées lorsque cela est possible
Choisissez les structures de données appropriées
Compromis espace/temps
// Looks like O(n), actually O(n²) array.forEach(item => { const index = anotherArray.indexOf(item); // indexOf is O(n) });
// Poor performance let result = ''; for (let i = 0; i < n; i++) { result += someString; // Creates new string each time } // Better approach const parts = []; for (let i = 0; i < n; i++) { parts.push(someString); } const result = parts.join('');
Comprendre Big O vous aide :
Big O Notation peut sembler académique, mais c'est un outil pratique pour écrire un meilleur code. Commencez par ces bases et vous serez sur la bonne voie pour écrire des algorithmes plus efficaces.
Quelle est votre expérience en matière d'optimisation d'algorithmes ? Partagez vos réflexions et vos questions dans les commentaires ci-dessous !
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!