밑변환 공식에 의해 밑이 서로 다른 로그는 상수배 차이나므로 big O 표기법에서는 어떤 밑을 쓰든 상관 없습니다.
밑변환 공식에 의해 밑이 서로 다른 로그는 상수배 차이나므로 big O 표기법에서는 어떤 밑을 쓰든 상관 없습니다.
그럼 대략적인 추측에서 더 확실하게 확인하려면 어떻게 해야하나요?
합이 0인 네 정수
https://www.acmicpc.net/proble...
문제의 경우에
16000개의 숫자를 정렬해서 문제를 푸는 분들이 많은데,
그럼 nlogn 으로 계산했을 떄는 아슬아슬하게 통과하지만
nlog(2)n 으로 햇을 때는 시간초과가 날것으로 보이거든요
흠
비유를 한 번 해볼까요. 질문자님이 어떤 집에서 청소를 하는데, 작은 방을 청소하는 작업이 있고 큰 방을 청소하는 작업이 있습니다. 큰 방을 청소하는 건 작은 방을 청소하는 시간의 10배가 걸린다고 해봅시다. 각각의 작업을 n번 하는 건 둘 다 O(n) 시간이 걸립니다.실제로는 시간 차이가 10배나 나는데, 점근 표기법으로는 똑같이 써도 된다는 뜻입니다. 마음대로 의미를 붙여서, 큰 방 청소는 작은 방 청소의 10배가 걸리니까 큰 방 청소를 n번 하는 건 O(10n)이라고 써도 됩니다. 아무 의미가 없습니다.
중요한 건 여기서는 큰 방 청소가 작은 방 청소의 10배 걸린다는 걸 알고 있지만, 어떤 코드에서 계산한 단위 연산이 실제로 소모하는 시간이 얼마인지는 정확히 모른다는 것입니다. 이건 시간 복잡도와는 완전히 별개입니다. 다만 이 값이 대부분의 알고리즘에서 터무니없이 크거나 작지는 않으니까 대략적인 선을 정해놓고 그 정도로 생각하면 얼추 비슷하다고 하는 것입니다. 실제로 어떤 코드가 얼마나 걸릴지는 알고리즘 자체와는 별개로, 컴파일러와 컴퓨터 구조 및 운영체제에 대한 깊은 이해를 바탕으로 계산을 해야만 정밀한 예측이 가능한 것입니다.
그렇군요 감사합니당
결국 해보는건
복잡도로 어림잡아놓고
시행착오를 통해서 감을 익히는게 맞군요
댓글을 작성하려면 로그인해야 합니다.
jsjsjs0775 4년 전
자료구조에서 정렬 알고리즘의 복잡도를 nlog2(n) 으로 배웟는데
c++ 의 STL sort는 nlog(n)로 작동한다고 설명되어있는데
밑의 (base)의 값이 왜 차이나는 것인가요?