NAVER

질문 이진탐색트리의 시간복잡도가 궁금합니다
비공개 조회수 1,727 작성일2019.09.19

시간 복잡도에 대해 뭔가 헷갈립니다.

이진탐색트리의 시간복잡도가 O(log n) 이라고 하는데
이게 최악의 경우? 즉 마지막 한개가 남을때까지를 보면
저런결과가 나온다고 하는데 (맞나요? 아니라면 다시 알려주시면 감사하겠습니다...)

최악의 경우가 아닌 평균의 시간복잡도를 구하려면 어떻게 해야하나요??

프로필 사진

답변자님,

정보를 공유해 주세요.

2 개 답변
2번째 답변
프로필 사진
humit
태양신 eXpert
C, C++ 20위, 웹프로그래밍 47위, 프로그래밍 28위 분야에서 활동
본인 입력 포함 정보

이진 트리에서 탐색할 때 평균 시간 복잡도는 O(log n)이 됩니다. 균형 이진 트리인 경우가 이에 속합니다.

그리고 최악의 경우에는 이진 트리가 사슬과 같이 연결된 형태로 이 경우에는 연결리스트와 같이 동작하기 때문에 시간 복잡도가 O(n)이 되게 됩니다.

평균 시간복잡도를 제대로 계산하기 위해서는 확률 분야에서 사용하는 테크닉을 이용해 계산을 해야 합니다.

아래는 영문으로 된 평균 시간 복잡도를 계산하는 방식입니다. 간략하게 설명하면 1번에 찾을 수 있는 확률, 2번 만에 찾을 수 있는 확률, ..., 이렇게 계산을 해서 기댓값을 구하는 방식으로 하시면 되겠습니다.

https://cs.stackexchange.com/questions/32090/proving-that-the-average-case-complexity-of-binary-search-is-olog-n

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.

  • 채택

    질문자가 채택한 답변입니다.

이 답변의 추가 Q&A
질문자와 답변자가 추가로 묻고 답하며 지식을 공유할 수 있습니다.
도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.
1번째 답변
프로필 사진
비공개 답변
식물신

O는 빅-오 표기법이라고 합니다. 최악의 경우를 뜻합니다.

Ω는 빅-오메가 표기법이라고 합니다. 빅-오 반대로 최선의 경우를 뜻합니다.

θ는 빅-세타 표기법이라고 합니다. 위의 두 경우의 중간정도를 뜻합니다.

아래는 참조한 사이트입니다.

https://vaert.tistory.com/117

2019.09.19.

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.