대O부호-소개
9104 단어 beginnerswebdevalgorithms
진지하게 하자.
오래전, 10x 엔지니어가 등장하기 전에 소프트웨어 엔지니어는 프로그래밍 기술로 현실 문제를 해결하는 방법을 찾았다.서로 다른 엔지니어들이 서로 다른 해결 방안/알고리즘을 제시하여 이런 문제들을 해결하였다.이러한 솔루션의 복잡성과 효율성을 비교해야 합니다.이런 수요는 큰 O 기호를 탄생시켰다.그럼 큰 O 기호는 뭘까요?
큰 O 기호는 무엇입니까?
대O 기호는 컴퓨터 과학에서 알고리즘의 성능이나 복잡성을 묘사하는 데 쓰인다.
계산법이 컴퓨터 프로그램에 있는 것은 요리책에 있는 것과 같다.다른 식단은 특정한 식사를 하는 데 도움을 줄 수 있지만, 항상 같은 결과를 낳는 것은 아니다.그것들은 항상 같은 절차, 성분이 있고 같은 시간을 소비하지도 않는다.어떤 레시피는 다른 레시피보다 빠르고 효과가 더 좋다.
마찬가지로 서로 다른 알고리즘은 특정한 컴퓨터 프로그램을 실현할 수 있다.그러나 이들의 효율은 같지 않고 운행 시간도 다르다.우리는 큰 O를 사용하여 알고리즘의 효율을 평가한다.
예를 들어, 우리는 순서를 고려할 것이다.병합 정렬, 거품 정렬, 빠른 정렬, 삽입 정렬 등 많은 정렬 알고리즘이 있다.너는 어느 것이 더 효율적이고 어느 것이 더 복잡하지 않은지 어떻게 알았니?이것이 바로 큰 O 기호가 존재하는 원인이다.
너는 왜 우리가 부호를 필요로 하는지 생각할 수 있다.우리는 왜 알고리즘을 운행하는 데 필요한 시간을 고려하지 않습니까?다음은 여러 가지 이유 중 두 가지입니다.
이제 알았으면 좋겠어.네 머릿속에 생길 수 있는 다음 질문은'내가 이걸 왜 알아야 돼?'
너는 왜 신경을 쓰느냐?
일반적인 운영 복잡성
자료 출처:https://www.bigocheatsheet.com
1.O(1) - 고정 실행 시간
이런 상황에서 주어진 입력 데이터 집합이 어떻든 알고리즘은 같은 시간에 실행된다.
하나의 예는 주어진 데이터의 첫 번째 요소를 되돌려 주는 것이다. 다음과 같다.
function returnFirst(elements) {
return elements[0]
}
주어진 입력 크기와 상관없이 실행할 때 일정합니다.2.O(n) - 선형 런타임
실행할 때 입력 데이터 집합의 크기와 비례하여 증가하면 선형 운행이 발생한다.n은 입력 데이터 세트의 크기입니다.
이 방면의 좋은 예는 다음과 같은 예시 중의 교체를 사용하여 데이터가 집중된 특정 값을 검색하는 것이다.
function constainsValue(elements, value) {
for (let element in elements) {
if (element === value) return true;
}
return false
}
우리는 수조의 모든 원소를 순환하는 데 필요한 시간이 수조의 크기가 증가함에 따라 증가하는 것을 보았다.그런데 만약에 원소가 수조의 마지막 원소에 도달하기 전에 발견된다면?운영 시 복잡성이 변경됩니까?기억해라, 큰 O 기호는 최악의 상황을 고려했다.이 예에서는 배열의 모든 요소를 순환합니다.이것이 바로 알고리즘이 운행할 때의 복잡성을 결정하는 원인이다.
3.O(n^2) - 2차 실행 시
O(n^2)는 입력 데이터 집합 크기의 제곱과 운행 시간을 정비례하는 알고리즘을 나타낸다.
이 방면의 한 예는 데이터 집합이 중복 항목을 포함하는지 확인하기 위해 플러그인을 교체하거나 순환하는 것이다.
function constainsDuplicate(elements) {
for (let element in elements) {
for (let item in elements){
if (element === item) return true;
}
}
return false
}
더 깊은 차원의 플러그인 교체는 O(n^3), O(n^4) 등 운행시 복잡성을 발생시킨다4.o(logn) - 대수 실행 시
이런 상황에서 입력 데이터 집합의 크기가 어떻든 알고리즘 운행에 필요한 운행 시간은 평온해질 것이다.
흔히 볼 수 있는 예는 2진법 검색과 같은 검색 알고리즘이다.2진 검색의 사상은 전체 데이터를 처리하는 것이 아니다.반면 매번 교체할 때마다 완성되는 작업량을 절반으로 줄인다.원하는 결과에 도달하는 데 필요한 조작 수는 입력 크기의 대수를 기수 2로 한다.
이러한 운행 시 복잡성에 대한 더 많은 정보는 본고 말미의 참고 자료를 볼 수 있다.
5.o(n log n) - 선형 알고리즘이 실행될 때
여기서 알고리즘의 운행 시간은 대수 연산 n회에 달려 있다.
대부분의 정렬 알고리즘의 운행 시 복잡도는 O (n logn) 이다
6.O(2^n) - 지수 런타임
이런 상황은 알고리즘에서 발생하는데 데이터 집합의 크기가 한 번 증가할 때마다 운행 시간이 배로 증가한다.작은 데이터 집합에 대해서 말하자면, 이것은 보기에 괜찮을 것이다.그러나 데이터량이 늘어나면서 이 알고리즘을 실행하는 데 걸리는 시간이 급격히 늘었다.
흔히 볼 수 있는 예는 피보나 계수의 귀속 해결 방안을 찾는 것이다.
function fibonacci(num) {
if (num <= 1) return 1;
return fibonacci(num - 2) + fibonacci(num - 1)
}
7시(n!) -계단 운행 시
이런 상황에서 알고리즘은 곱하기 시간으로 운행한다.비 마이너스 정수 (n!) 의 곱하기n보다 작거나 같은 정수의 곱셈입니다. 이것은 매우 나쁜 운행 시간입니다.
주어진 데이터 집합에 대한 변환을 실행하는 모든 알고리즘은 O (n!) 의 예이다
결론
본고는 당신이 큰 O 기호의 개념을 이해하는 데 도움을 줄 수 있기를 바랍니다.
다음은 이 주제에 대한 더 많은 정보를 찾을 수 있는 자원들입니다.
읽어주셔서 감사합니다.😊.
Reference
이 문제에 관하여(대O부호-소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sarah_chima/the-big-o-notation-an-introduction-34f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)