> Java > java지도 시간 > 본문

효율적인 알고리즘 개발 - Big O 표기법을 사용하여 알고리즘 효율성 측정

王林
풀어 주다: 2024-07-18 15:44:28
원래의
998명이 탐색했습니다.

알고리즘 설계는 문제 해결을 위한 수학적 프로세스를 개발하는 것입니다. 알고리즘 분석은 알고리즘의 성능을 예측하는 것입니다. 앞의 두 장에서는 고전적인 데이터 구조(리스트, 스택, 큐, 우선순위 큐, 세트, ​​맵)를 소개하고 이를 적용하여 문제를 해결했습니다. 이 장에서는 다양한 예제를 사용하여 효율적인 알고리즘 개발을 위한 일반적인 알고리즘 기술(동적 프로그래밍, 분할 정복 및 역추적)을 소개합니다.

Big O 표기법은 입력 크기에 따라 알고리즘 시간 복잡도를 측정하는 함수를 얻습니다. 함수에서 곱셈 상수와 비지배 항을 무시할 수 있습니다. 두 가지 알고리즘이 검색(선형 검색 대 이진 검색)과 같은 동일한 작업을 수행한다고 가정합니다. 어느 것이 더 낫습니까? 이 질문에 대답하려면 이러한 알고리즘을 구현하고 프로그램을 실행하여 실행 시간을 얻을 수 있습니다. 하지만 이 접근 방식에는 두 가지 문제가 있습니다.

  • 첫째, 컴퓨터에서는 많은 작업이 동시에 실행됩니다. 특정 프로그램의 실행 시간은 시스템 부하에 따라 다릅니다.
  • 둘째, 실행 시간은 특정 입력에 따라 달라집니다. 예를 들어 선형 검색과 이진 검색을 생각해 보세요. 검색하려는 요소가 목록의 첫 번째 요소인 경우 선형 검색이 이진 검색보다 빠르게 요소를 찾습니다.

실행 시간을 측정하여 알고리즘을 비교하는 것은 매우 어렵습니다. 이러한 문제를 극복하기 위해 컴퓨터 및 특정 입력과 독립적으로 알고리즘을 분석하는 이론적 접근 방식이 개발되었습니다. 이 접근 방식은 입력 크기 변경이 미치는 영향을 대략적으로 계산합니다. 이런 식으로 입력 크기가 증가함에 따라 알고리즘의 실행 시간이 얼마나 빨리 증가하는지 확인할 수 있으므로 성장률을 검토하여 두 알고리즘을 비교할 수 있습니다.

선형 검색을 고려해 보세요. 선형 검색 알고리즘은 키를 찾거나 배열이 소진될 때까지 키를 배열의 요소와 순차적으로 비교합니다. 키가 배열에 없으면 n 크기의 배열에 대해 n 비교가 필요합니다. 키가 배열에 있으면 평균적으로 n/2 비교가 필요합니다. 알고리즘의 실행 시간은 배열의 크기에 비례합니다. 배열의 크기를 두 배로 늘리면 비교 횟수도 두 배로 늘어날 것으로 예상됩니다. 알고리즘은 선형 속도로 증가합니다. 성장률은 n 정도입니다. 컴퓨터 과학자들은 Big O 표기법을 사용하여 "크기 순서"를 나타냅니다. 이 표기법을 사용하면 선형 검색 알고리즘의 복잡도는 O(n)이며 "n의 순서"로 발음됩니다. 시간복잡도가 O(n)인 알고리즘을 선형 알고리즘이라고 부르며, 선형 성장률을 보입니다.

동일한 입력 크기라도 입력에 따라 알고리즘의 실행 시간이 달라질 수 있습니다. 실행 시간이 가장 짧은 입력을 최적의 입력이라고 하고, 실행 시간이 가장 긴 입력을 최악의 입력이라고 합니다. 최선의 사례 분석과
최악 사례 분석은 최상의 입력과 최악의 입력에 대한 알고리즘을 분석하는 것입니다. 최상의 경우와 최악의 경우 분석은 대표적인 것이 아니지만 최악의 경우 분석은 매우 유용합니다. 알고리즘은 최악의 경우보다 결코 느려지지 않을 것임을 확신할 수 있습니다.
평균 사례 분석은 동일한 크기의 가능한 모든 입력 중에서 평균 시간을 결정하려고 시도합니다. 평균 사례 분석은 이상적이지만 수행하기 어렵습니다. 왜냐하면 많은 문제의 경우 다양한 입력 인스턴스의 상대적 확률과 분포를 결정하기 어렵기 때문입니다. 최악의 경우 분석은 수행하기 쉽기 때문에 일반적으로 최악의 경우에 대해 분석을 수행합니다.

선형 검색 알고리즘은 목록에 있는 것으로 알려진 것을 거의 항상 찾는 경우 최악의 경우 n 비교, 평균 경우 n/2 비교가 필요합니다. Big O 표기법을 사용하면 두 경우 모두 O(n) 시간이 필요합니다. 곱셈 상수(1/2)는 생략될 수 있습니다. 알고리즘 분석은 성장률에 중점을 둡니다. 곱셈 상수는 성장률에 영향을 미치지 않습니다. n/2 또는 100_n_의 성장률은 아래 표 성장률에 설명된 대로 n과 동일합니다. 따라서 O(n) = O(n/2) = O(100n)입니다.

Image description

n개의 요소 배열에서 최대 개수를 찾는 알고리즘을 생각해 보세요. n이 2인 경우 최대 수를 찾으려면 한 번의 비교가 필요합니다. n이 3이면 두 번의 비교가 수행됩니다. 일반적으로 n개의 요소 목록에서 최대 개수를 찾으려면 n - 1번의 비교가 필요합니다. 알고리즘 분석은 큰 입력 크기에 대한 것입니다. 입력 크기가 작으면 알고리즘의 효율성을 추정하는 데 의미가 없습니다. n이 커질수록 n - 1이라는 표현의 n 부분이 복잡성을 지배하게 됩니다. Big O 표기법을 사용하면 지배적이지 않은 부분(예:
에서 -1)을 무시할 수 있습니다. 표현식 n - 1) 중요한 부분을 강조표시합니다(예: 표현식 n - 1의 n). 따라서 이 알고리즘의 복잡도는 O(n)입니다.

Big O 표기법은 입력 크기와 관련하여 알고리즘의 실행 시간을 추정합니다. 시간이 입력 크기와 관련이 없는 경우 알고리즘은 O(1) 표기법을 사용하여 일정한 시간을 취한다고 합니다. 예를 들어 배열의 특정 인덱스에서 요소를 검색하는 메서드
배열의 크기가 커져도 시간이 늘어나지 않기 때문에 일정한 시간이 걸립니다.

다음 수학적 합계는 알고리즘 분석에 유용한 경우가 많습니다.

Image description

시간 복잡도는 Big-O 표기법을 사용하여 실행 시간을 측정한 것입니다. 마찬가지로 Big-O 표기법을 사용하여 공간 복잡도를 측정할 수도 있습니다. 공간 복잡도는 알고리즘이 사용하는 메모리 공간의 양을 측정합니다. 이 책에 제시된 대부분의 알고리즘의 공간 복잡도는 O(n)입니다. 즉, 입력 크기에 대한 선형 성장률을 나타냅니다. 예를 들어 선형 검색의 공간 복잡도는 O(n)입니다.

위 내용은 효율적인 알고리즘 개발 - Big O 표기법을 사용하여 알고리즘 효율성 측정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!