들어가기 전에
빅 오 표기법을 활용하여 알고리즘의 효율성을 비교해봅시다.
학습 목표
빅 오 표기법을 올바르게 사용하여 알고리즘의 효율성을 비교할 수 있습니다.
핵심 단어
- 알고리즘 비교
- 빅 오 표기법
강의 듣기
들어가기 전에
빅 오 표기법을 활용하여 알고리즘의 효율성을 비교해봅시다.
학습 목표
빅 오 표기법을 올바르게 사용하여 알고리즘의 효율성을 비교할 수 있습니다.
핵심 단어
강의 듣기
빅 오 표기법 예시
아래의 식이 옳은지 판단해봅시다.
문제 1.
n\textstyle ^4\textstyle ^/\textstyle ^3n4/3 = O( nlognnlogn )
힌트) 알고리즘에서는 n이 무한으로 커진 경우를 가정하고 비교한다는 규칙과 log 함수를 포함할 경우 밑은 무시한다는 규칙을 사용하여 풀 수 있습니다.
문제 2.
3n^3+4n^2+5n+63n3+4n2+5n+6 = θ( n^3)n3)
힌트) 낮은 차수의 항들은 무시한다는 규칙과 모든 상수를 삭제한다는 규칙을 사용하여 풀 수 있습니다.
문제 3.
n(n-1)/2 = O(n^2)n(n−1)/2=O(n2)
문제 4.
2^n = w(n)2n=w(n)
문제 5.
n^3 = O(n^2)n3=O(n2)
문제 6.
n^2 = O(n^3)n2=O(n3)
풀이)
문제 1.
적당히 큰 수인 1000을 n에 대입하면, 좌변은 10000이고 우변은 log의 밑이 10일 때 O(3000)입니다. 그래프를 그리면 아래와 같고, 10000은 3000 이하가 아니기 때문에 이 식은 잘못되었습니다.
문제 2.
낮은 차수의 항들을 무시하면, 3n^33n3 =θ( n^3n3 )입니다. 그리고 모든 상수를 삭제하면 n^3n3 =θ( n^3n3 ). 따라서, 이 식은 참입니다.
문제 3.
낮은 차수의 항들을 무시하면, n^2/2n2/2 =θ( n^2n2 )입니다. 그리고 모든 상수를 삭제하면 n^2n2 =θ( n^2n2 ). 따라서, 이 식은 참입니다.
문제 4.
적당히 큰 수인 1000을 n에 대입하면, 좌변은 2^1000이고 우변은 ω(1000)입니다. 그래프를 그리면 아래와 같고, 1000은 1000 이상이기 때문에 이 식은 참입니다.
문제 5, 6.
n^2n2 은 n^3n3 보다 느리게 증가합니다. 따라서, 문제 5는 거짓, 문제 6은 참입니다.
문제 1과 문제 3의 경우, 엄밀하게 풀기 위해서는 로피탈 규칙을 사용해야 합니다. 하지만 본 강의에서는 적당히 큰 수를 대입하는 방법으로도 풀 수 있는 문제들만 다룹니다.
생각해보기
1) 문제 1에서 n=1을 대입하면 어떻게 되나요? 적당히 큰 수를 대입해야 하는 이유는 무엇인가요?
comment
상수는 무시하며, 알고리즘 성능에 큰 비교가 어렵다. 큰 값을 대입하여 그래프를 넣어서 확인해본다.
n=1을 대입한다면 알고리즘간의 차이를 구분하기 어렵습니다. 알고리즘의 성능을 비교할려면 input이 클때 성능을 비교하는게 맞을듯 합니다.
알고리즘은 많은 양의 데이터를 처리할 때의 시간을 계산 하기 위한 용도로써 너무 작은 수를 이용한다면 비교를 할 수 없기 때문이다.
알고리즘 복잡도를 계산하는 이유는 많은 데이터를 처리할 때 얼마나 효율적인 알고리즘이냐에 따라서 엄청난 시간적 차이가 생긴다.
컴퓨터는 충분히 빠르기 때문에 작은 데이터에 대해서는 사람이 느끼기에 큰 시간적 차이가 아닐 수도 있지만 큰 수 일때는 같은 데이터 양으로도 몇 초만에 풀릴 문제일지, 무한에 가까운 시간이 소요될 지 결정하는 중요한 요소가 되기 때문에 큰 수를 고려하는 것이 의미있는 복잡도 계산이다.
1) 문제 1에서 n=1을 대입하면 어떻게 되나요? 적당히 큰 수를 대입해야 하는 이유는 무엇인가요?
문제 1에서 n=1을 대입하면 n^(4/3)이 n log n보다 큰 값을 가지게 된다. 적당히 큰 수를 대입해야 하는 이유는 n이 커질 수록 복잡도가 상승하는 그래프를 그리는데, n이 작은 경우와 n이 적당히 큰 경우에 비교하는 알고리즘들의 복잡도가 다를 수 있기 때문이다.
알고리즘의 시간 복잡도를 비교할 때는 n이 큰 경우(무한에 가까워지는 경우)를 가정해야 한다. 1처럼 작은 수를 대입한 경우 실제시간 복잡도와는 동떨어진 결과가 나올 수 있다.
둘을 비교했을때 전자는 n(횟수)에 1을 대입하면 time값이 1이 나오고 후자는 0이 나온다 .
따라서 nlogn 이 더 빠른 시간복잡도를 가지게된다.
이 예제에서는 그렇지만 어떤 함수 두개를 비교할때 적당히 큰수를 비교하지않고 애매한 수를 비교할 경우 중간에 교수님이 잠깐 말씀하신 것과 같이 그래프가 역전되는 가능성이 있을 수 있기 때문에 큰 값을 넣어 비교해야한다.