시간 복잡도에 대해 뭔가 헷갈립니다.
이진탐색트리의 시간복잡도가 O(log n) 이라고 하는데
이게 최악의 경우? 즉 마지막 한개가 남을때까지를 보면
저런결과가 나온다고 하는데 (맞나요? 아니라면 다시 알려주시면 감사하겠습니다...)
최악의 경우가 아닌 평균의 시간복잡도를 구하려면 어떻게 해야하나요??
답변자님,
정보를 공유해 주세요.
이진 트리에서 탐색할 때 평균 시간 복잡도는 O(log n)이 됩니다. 균형 이진 트리인 경우가 이에 속합니다.
그리고 최악의 경우에는 이진 트리가 사슬과 같이 연결된 형태로 이 경우에는 연결리스트와 같이 동작하기 때문에 시간 복잡도가 O(n)이 되게 됩니다.
평균 시간복잡도를 제대로 계산하기 위해서는 확률 분야에서 사용하는 테크닉을 이용해 계산을 해야 합니다.
아래는 영문으로 된 평균 시간 복잡도를 계산하는 방식입니다. 간략하게 설명하면 1번에 찾을 수 있는 확률, 2번 만에 찾을 수 있는 확률, ..., 이렇게 계산을 해서 기댓값을 구하는 방식으로 하시면 되겠습니다.
P.S. 위 답변에서 Big-O notation에 대해서 잘못된 내용을 알려주고 있어서 정정합니다.
Big O notation의 경우 해당 시간 복잡도를 n에 대한 식 f(n)으로 표기를 하였을 때 충분히 큰 n에 대해서 f(n) <= c*g(n) (c는 상수) 이 될 때 O(f(n)) = g(n) 으로 표기합니다.
즉 Big O notation은 최악의 경우를 기술하는데 사용하는 것이 아니라 해당 시간 복잡도가 Big O notation의 결과의 함수에서 계산한 시간 복잡도보다 더 적게 걸린다는 것을 의미합니다.
여기서 중요한 것은 "충분히 큰 n"이라는 부분인데, 그 이유는 n이 작은 경우에는 컴퓨터의 성능이 빠르기 때문에 계산 시간이 얼마 걸리지 않으므로 무시할 수 있고, n이 커지게 되면 그만큼 시간이 걸리기 때문에 n이 큰 경우에 시간이 대략 어느정도까지 걸릴 수 있다라는 것을 짐작하기 위한 지표로 사용합니다.
2019.09.19.
-
채택
질문자가 채택한 답변입니다.
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.
O는 빅-오 표기법이라고 합니다. 최악의 경우를 뜻합니다.
Ω는 빅-오메가 표기법이라고 합니다. 빅-오 반대로 최선의 경우를 뜻합니다.
θ는 빅-세타 표기법이라고 합니다. 위의 두 경우의 중간정도를 뜻합니다.
아래는 참조한 사이트입니다.
2019.09.19.
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.