2018-3-18 TIL Algorithm
알고리즘 복잡도 분석
알고리즘이란 문제해결 전략이다.
- 자료구조 : array, list, stack, queue
- 알고리즘 : 문제해결방법 (자료구조를 바탕으로 문제를 해결한다)
기본 자료구조
- 배열
ex) int a[] = new int[5] // a = int의 배열이다. 타입과 갯수가 정해져 있다. // 크기가 고정되어있지만, 읽을때 엄청 빨리 읽는다. O(1)읽기
- 리스트 : LinkedList(참조 혹은 포인터) O(n)번만에 읽을 수 있다. O(1)만에 추가가 된다. 읽기는 오래걸리지만 쓰기는 굉장히 빠르다. 각각의 노드마다 주소값이 저장되어있기때문에 공간의 낭비가 심하다.
- 스택 : LIFO
- 큐 : FIFO
- 트리 : 일방향(싸이클이 없다)
- 그래프 : 그래프는 트리랑 구조가 유사한데, 각 노드들이 연결되어있다? 그래프는 트리의 일종이지만 싸이클이 생기지 Object를 통해 만든다. key의 중복이 안된다. key로 값을 읽어 오고 싶을때 사용.
배열과 해시를 이용하면 대부분의 코딩문제들이 해결된다.
정렬
- 선택 정렬
- 버블 정렬
- 삽입 정렬
- 쉘 정렬
- 퀵 정렬
- 기수 정렬
- 힙 정렬
- 병합 정렬
- 외부 정렬
동작코드를 다 외어야 된다.
트리와 검색
- 순차 검색
- 2진 검색
- BST 검색
- AVL 트리
- 레드블랙 트리
- MST
- B TREE
그래프와 탐색
- 전위 중위 후위
- 다익스트라 최단거리
- 플로이드 알고리즘
- A* 알고리즘
알고리즘 전략
- 휴리스틱 알고리즘
- 그리디 알고리즘
- 몬테카를로 알고리즘
- 분할 정복
- 다이나믹 프그로래밍
- 백 트래킹
정렬
-
정렬을 할때는 비교기준이 있어야한다. 그 비교기준을 내가 세운다.
arr = [1, 11, 2, 20, 3, 5, 9]; arr.sort(function(a, b) { return a-b; });
b = [ { name: 'honux', money: 100, score: 100 }, { name: 'crong', money: 50, score: 500 }, { name: 'jimmy', money: 999, score: 10 } ] b.sort((a, b) => (b.score - a.score) );
Written on March 18, 2018