어떤 코드는 엄청나게 빠르게 실행되는 반면 다른 코드는 크롤링되는 이유가 궁금하신가요? Big O 표기법을 입력하세요 - 비밀 언어 개발자가 알고리즘 효율성을 논의하기 위해 사용하는 것입니다. 간단하게 풀어보겠습니다.
Big O 표기법은 입력 크기가 커짐에 따라 코드 성능이 어떻게 확장되는지 설명합니다. 더 많은 작업을 수행할 때 코드에 걸리는 시간을 측정하는 것으로 생각하십시오.
공연의 성배. 입력량이 아무리 많아도 작업에 소요되는 시간은 동일합니다.
function getFirstElement(array) { return array[0]; // Always one operation }
일반적으로 매번 문제를 반으로 나누는 알고리즘에서 볼 수 있습니다. 이진 검색이 전형적인 예입니다.
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; }
성능은 입력 크기에 따라 선형적으로 확장됩니다. 각 요소를 한 번씩 살펴봐야 하는 알고리즘에서 흔히 볼 수 있습니다.
function findMax(array) { let max = array[0]; for (let i = 1; i < array.length; i++) { if (array[i] > max) max = array[i]; } return max; }
병합 정렬, 퀵 정렬과 같은 효율적인 정렬 알고리즘에서 자주 볼 수 있습니다.
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); }
중첩 루프에서 흔히 발생합니다. 입력 크기가 커짐에 따라 성능이 빠르게 저하됩니다.
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; }
가능한 경우 중첩 루프를 피하세요
적절한 데이터 구조 선택
공간과 시간의 균형
// 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('');
Big O를 이해하면 도움이 됩니다.
Big O Notation은 학문적으로 보일 수도 있지만 더 나은 코드를 작성하기 위한 실용적인 도구입니다. 이러한 기본 사항부터 시작하면 더욱 효율적인 알고리즘을 작성할 수 있습니다.
알고리즘 최적화에 대한 경험은 어떻습니까? 아래 댓글로 여러분의 생각과 질문을 공유해주세요!
위 내용은 초보자를 위한 Big O 표기법: 실용 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!