일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- jaypark.dating
- 인하대학교
- tacotron
- 개발자회고
- 2019회고
- 놀이동산의슈퍼컴퓨터를작동시켜라
- 프로그래머스
- 인하멘토링
- 나는리뷰어다
- 로그남기기
- 서버로그
- 심플소프트웨어
- 신영준
- Xangle
- graphicdriver
- 결과를얻는법
- 봉사활동
- CrossAngle
- 한빛미디어
- 노트북덮개
- 프로그라피
- 인천남중
- 개발자를위한파이썬
- 우분투비트확인
- 서구동구예비군훈련장
- texttospeech
- 타코트론
- machinelearning
- intell
- 쇠막대기
- Today
- Total
jc.jang
코딩 인터뷰 완전 분석 - big O 본문
주제
-
알고리즘의 효율성을 나타내는 지표에 대해 알아보자.
노트
-
big O에 대해 학습하고 예제를 풀던 중 좋은 예제라고 생각되어 정리하려고 한다.
-
여러 개의 문자열로 구성된 배열이 주어졌을 때 각각의 문자열을 먼저 정렬하고 그다음에 전체 문자열을 사전 순으로 다시 정렬하는 알고리즘이 있다고 가정하자. 이 알고리즘의 수행 시간은 어떻게 되겠는가?
-
이 big O에 대한 개념이나 쉬운 예제들을 이해하는데 큰 어려움은 없었다. 하지만 이 문제는 일종의 버릇처럼 대답하던 나의 답변을 고쳐준 좋은 예제였다.
-
시간 복잡도를 표현할 때 N을 사용하기보다는 의도가 드러나도록 변수명을 설정하라.
-
가장 길이가 긴 문자열의 길이를 s라 하자.
-
배열의 길이를 a라 하자.
-
이제 알고리즘의 시간 복잡도에 대해 알아보자.
-
하나의 문자열을 정렬하는데 드는 시간은 O(s*logs)이다.
-
quick sort의 평균적인 시간을 고려해보면 문자열 s가 분할되는 깊이는 logs이고 각 단계에서 s번의 비교가 진행된다. 따라서 하나의 문자열을 정렬하는데 드는 시간은 O(s*logs)이다.
-
이러한 문자열이 a개 있으므로 각각의 문자열을 먼저 정렬하는 시간은 O(aslogs)이다.
-
전체 문자열을 사전 순으로 다시 정렬 하는데 드는 시간은 얼마나 걸릴까?
-
quick sort의 시간 복잡도가 O(nlogn)이므로 O(aloga)가 걸린다.
-
라고 생각하면 문자열이라는 특성을 고려하지 않은 답변이다.
-
위에서 말한 정렬하는데 드는 시간은 각 원소를 비교하는 시간이 계산되지 않았다.
-
서로 다른 두 문자열을 비교하는데 O(s)의 시간이 소요되므로 전체 문자열을 사전 순으로 다시 정렬하는데 드는 시간은 O(saloga)이다.
-
따라서 각각의 문자열을 먼저 정렬하는데 드는 시간 O(a_s_logs)과 전체 문자열을 사전순으로 다시 정렬하는데 드는 시간 O(s_a_loga)을 더하면 O(a*s(loga+logs))가 된다.
'개발 > 코딩인터뷰완전분석' 카테고리의 다른 글
스택 - 프로그래머스 쇠막대기 (0) | 2019.10.25 |
---|---|
코딩인터뷰 완전분석 - 읽은 내용 기록 (0) | 2019.10.24 |
알고리즘 - 큐 (0) | 2019.10.10 |
알고리즘 - 스택 (0) | 2019.10.09 |
코딩 인터뷰 완전 분석 - 행동 문제 (0) | 2019.10.02 |