주요 내용
컴퓨터과학
점근적 표기법
지금까지 선형 검색과 이진 검색법을 추측에 필요한 최대 횟수를 세는 것으로 분석해 보았습니다. 그런데 정말 알고 싶은 부분은 이 알고리즘이 얼마나 오래 걸리느냐 는 것이죠. 몇 번 인지보다는 실제 소요 시간 이 중요합니다. 선형 검색과 이진 검색의 실행 시간은 추측을 하고, 그 추측을 확인하는 시간도 관련 있지만 그 외에 고려해야 할 것도 있습니다.
알고리즘의 실행 시간은 컴퓨터가 알고리즘 코드를 실행하는 속도에 의존합니다. 이 속도는 컴퓨터의 처리속도, 사용된 언어 종류, 프로그래밍 언어를 컴퓨터가 실행할 수 있는 코드로 바꾸는 컴파일러의 속도 등에 달려있습니다.
알고리즘의 실행 시간에 대해 두 부분으로 나누어 생각해 봅시다. 우선, 입력값의 크기에 따른 알고리즘의 실행 시간을 알아야 합니다. 이건 직관적으로 이해가 될겁니다. 배열의 크기가 커지면 선형 검색과 이진 검색의 최대 추측 횟수가 함께 증가한다는 사실은 이미 확인했습니다. GPS를 생각해 봅시다. GPS가 만일 모든 골목길이 아니라 고속도로만 찾으면 길을 훨씬 금방 찾을 수 있을겁니다. 이처럼 입력값의 크기에 대한 함수 로 알고리즘 실행 시간을 생각할 수 있습니다.
두 번째는 입력값의 크기에 따라 이 함수가 얼마나 빨리 커지는지 알아보는 것입니다. 이것은 실행 시간의 성장률(rate of growth)이라고 부릅니다. 프로그램을 쉽게 유지할 수 있도록 불필요한 부분은 버리고 가장 중요한 부분만 추려내서 함수를 간소화해야 합니다. 예를 들어 입력값 크기가 인 알고리즘이 이라는 기계 명령을 받는다고 가정해 보겠습니다. 값이 어느 정도 커지면(이 경우는 20), 은 나머지 항목인 보다 커집니다. 아래 차트에서 값이 0부터 100일 때의 과 의 값을 볼 수 있습니다.
계수인 6과 나머지 항목인 을 빼고 생각하면 이 알고리즘의 실행 시간은 으로 기하급수적으로 커지는 것을 볼 수 있습니다. 여기서 계수는 별로 중요하지 않습니다. , , 에서 실행 시간이 라면 이 보다 크며, 이 커질수록 그 차이가 커지는 의 값은 항상 존재합니다. 예를 들어, 와 의 차트를 살펴봅시다. 의 계수는 10으로 나눴으며 나머지 항목의 두 상수의 값을 10배로 만들었습니다.
중요하지 않은 항과 상수 계수를 제거하면 이해를 방해하는 불필요한 부분이 없어져서 알고리즘의 실행 시간에서 중요한 부분인 성장률에 집중할 수 있습니다. 상수 계수와 중요하지 않은 항목을 제거한 것은 점근적 표기법(asymptotic notation)이라 합니다. 이제 점근적 표기법의 세 가지 형태를 살펴봅시다. 바로 big- 표기법, big-O 표기법, and big- 표기법입니다.
위 자료는 다트머스 대학교 컴퓨터 과학과의 토마스 콜먼(Thomas Cormen) 교수, 데빈 발컴(Devin Balkcom) 교수, 칸아카데미 컴퓨팅 커리큘럼 팀이 공동으로 저술했으며, 본 내용물의 저작권은 CC-BY-NC-SA 라이선스를 적용합니다.
대화에 참여하고 싶으신가요?
- 점근적 표기법의 점근적이라는 뜻은 정확히 어떻게 되나요(추천 8 번)
- 점근(漸近)이란 점점 가까워 지는 모양을 뜻합니다.
점근적 표기법 이라 함은 주워진 함수가 있을때, 보다 간단한 함수로 만들어 표시함을 뜻합니다.(추천 4 번)
- 성장률이 뭔가요, 또 점근적표기법이뭔가요.(추천 3 번)
- 으 머리야...
이 빅-오-표기라는게 그니깐 함수의 성장률을 지표로 해서 서로 다른 함수들의 성능?을 비교 하는건가요? 그러면 이 성장률이란게 그 수학에서 말하는 변화율인건가요(추천 1 번) - 위 내용 중에서 0.6n**2 + 1000n + 3000 에서 0.6을 10으로 나눴다는 표현이 있는데, 나눈 것이 아니라 곱했다는 표현이 맞는 것 아닌가요? 제가 뭘 오해하고 있다면 알려주시면 감사하겠습니다. :)(추천 1 번)
- 입력값의 크기가 n이므로 입력값의 크기를 제곱(두 번 곱한 것, 즉 n*n)을 의미합니다!(추천 1 번)