일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- primitive type
- java
- 인프런
- API
- python
- PowerMock
- ECMAScript2015
- nginx
- ubuntu
- Lodash
- ATOM
- NPM
- {}
- AWS
- Coveralls
- node.js
- GIT
- javascript
- Code-coverage
- 개인정보수정
- Unit-test
- Travis CI
- Gitbook
- sinopia
- Linux
- RESTful
- sanghaklee
- REST
- JaCoCo
- dict
Archives
- Today
- Total
이상학의 개발블로그
[티아카데미] 알고리즘 기초 본문
알고리즘 : 문제를 해결하는 최적화된 방법
컴퓨터 알고리즘 : 컴퓨터를 이용한 알고리즘
컴퓨터 언어 : 컴퓨터와 대화하기 위한 언어
컴퓨터 알고리즘 : 컴퓨터를 이용하여 주어진 문제를 풀기 위한 절차
컴퓨터 프로그램 : 컴퓨터가 특정 작업을 수행하기 위해 짜여진 명령의 순서
친구 A가 택시로 T아카데미에 가는 과정
- 택시가 있는 도로로 나간다
- 손을 들어 택시를 부른다
- 목적지를 말한다
- 돈을 낸다
- 내린다
컴퓨터 알고리즘 설명 4단계
- 문제 정의(Problem Definition) : 문제를 정의하고 이를 컴퓨터가 이해할 수 있는 형태로 변경. 입력, 출력
- 알고리즘 설명(Algorithm Description) : 컴퓨터가 수행해야 할 내용을 하나씩 차례대로 정의한 것
- 정확성 증명(Correctness Proof) : 과정의 결과가 예상한 결과로 항상 나오는가?
- 성능 분석(Performance Analysis) : 알고리즘의 문제를 풀기 위해 필요한 시간, 공간, 자원의 양
상대시간으로 계산한다. 절대 시간으로 하면 기기에 의존된다.
같은 알고리즘도 어떤 곳에서 수행하는냐에 따라 시간이 달라질 수도 있기 때문에
수행연산의 횟수를 비교하는 방식으로 성능을 분석한다.
시간을 비교하면 기기에 의존된다.
수행시간 : 입력 크기가 커지면 시간이 많이 든다. 그래서 임의의 큰 수 (n) 으로 가정한다.
성능 분석의 비교 대상
- 산술 연산(Arithmetric Calculation)
- Add, Multiply
- 데이터 입출력(Data Movement)
- Copy, Move
- 제어연산(Access Control)
- If, While
빅오
- 점근적 상한 : 주어진 함수가 아무리 나빠도 비교하는 함수와 같거나 좋다는 뜻. 아무리 느려도 기준함수 보다는 빠르다. 주어진 시간내에 해결할 수 있다.
- 기준 함수보다 빠르다.
오메가
- 점근적 하한 : 주어진 함수가 아무리 빨라도 비교하는 함수와 같거나 나쁘다는 뜻. 아무리 빨라도 기준함수 보다는 느리다. 가장 좋은 경우에 해당하는 것을 설명할 때
- 기준함수보다 느리다.
세타
- 상한과 하한의 교집합
- 대부분 차수는 동일하고 계수만 다름
정렬 문제
- 입력 ex) 1,4,6,3
- 출력 ex) 1,3,4,6
선택 정렬
가장 작은 수와 정렬되지 않은 리스트가 주어졌을 때
맨 마지막 정렬하지 않는다.
- 정렬되지 않은 숫자 중 가장 작은 수 선택
- 선택한 숫자를 정렬된 첫 수와 자리 변경
- 정렬 표시. 지금 자리를 바꾼 숫자 값(박스를 치는 행위)
- (n-1)숫자를 옮길 때까지 1-3 반복
삽입 정렬
Key값과 정렬된 리스트가 주어졌을 때, key값을 정렬된 리스트의 알맞은 위치에 삽입
맨 처음 정렬하지 않고 처음 1개의 수가 정렬된 리스트라 생각하고 한다.
문제 리덕션 : 현재 주어진 문제를 알고리즘에 맞게 풀 수 있도록 변경
합병 정렬
두 개의 정렬된 배열이 주어졌을 때, 정렬된 하나의 배열로 합병
- Divide, theta(1): 배열을 나누는 과정으로 상수
- Conquer, theta(2T(n/2)) : 두개의 하위 배열 푸는 과정
- Combine, theta(n) :
Heap 정렬
- 힙 구조의 특성을 이용
- 수행시간은 합병정렬과 동일(nlgn)
Heap의 형태
- 완전 이진 트리에 가까운 형태
- 이진트리는 각 노드이 자식수가 2이하인 경우
Heap특성
- 최대 힙 : 부모 노드의 값은 항상 자식 노드의 값보다 크다. 루트 노드의 값이 가장 크다. 하위 트리도 각각 루트 노드가 가장 크다.
- 최소 힙 : 자식 노드의 값은 항상 부모 노드의 값보다 크다. 루트 노드이 값이 가장 작다. 하위 트리도 각각 루트 노드가 가장 작다.
노드의 높이
- 현재 노드에서 Leaf까지 내려갈 때 가장 단순하게 내려가는 간선의 수
- 루트 노드부터 트리의 높이 : theta(lgn).
Max-Heapify
1.완전이진 2.부모가 자식보다 큼
- 노드가 입력될 때 노드의 좌 우 하위 트리들은 max-heap 특성을 유지하지만 노드의 값이 하위 트리 값보다 작거나 같아서 max-heap 특성을 만족하지 않을 때 max-heap 특성이 유지되도록 연산
- 자식중에 가장 큰 값을 부모로 대체하는 과정 반복
Max-Heapify 수행시간
- n을 하위 트리의 노드의 개수라 할때
- 트리의 높이는 총 노드의 개수 n이라 하면 lgn이 되므로 수행시간은 bigO(nlgn)
최대값 추출(Extract-Max)
- Heap에서 가장 큰 값을 제거하 Max-Heap 구조를 복원하는 연산
퀵 정렬
- divide & conquer
- partition 이용
- partition에 걸리는 시간 : theta(n)
- partition 횟수 : 경우에 따라 다름
Quiz : 데이터가 1000만개가 있을 때 가장 큰 값을 BigO(n)에 찾는 방법은?
한번씩 쭉 읽으면 됨
Quiz : 데이터가 1000만개 있을 때 7번째 큰 값을 BigO(n)에 찾는 방법은?
한번 쭉 읽고 최대값 지우고를 7번 반복한다.
Quiz : 데이터가 100만개 있을 때 중간 값을 BigO(n)에 찾는 방법은?
'교육 > 강의' 카테고리의 다른 글
[학교-알고리즘] 분할 정복(Divide and Conquer) - 이진 검색과 병합 정렬(MergeSort) (0) | 2016.04.15 |
---|---|
[학교-알고리즘] 점근적 표기법과 시간 복잡도 (0) | 2016.04.14 |
[학교-알고리즘] 알고리즘과 순차검색 이진검색 피보나치 슈도코드 (0) | 2016.04.14 |
[티아카데미] 알고리즘 기초 2 (2) | 2016.04.12 |
Comments