본문 바로가기

분류 전체보기

(154)
BigInteger 클래스 - 아주 큰 정수를 표현하기 (스크랩) https://library1008.tistory.com/34
압축 (4) 보호되어 있는 글입니다.
압축 (3) Compression (3) HuffmanCoding- Huffman Coding 알고리즘은 트리들의 집합을 유지한다.- 매 단계마다 가장 빈도가 작은 두 트리를 찾는다.- 두 트리를 하나로 합친다. 이 때 부모 노드는 두 자식 노드를 합한 값이다.- 위 연산에 가장 적합한 자료구조는 최소 힙(minimum heap)이다.- 힙에 저장된 각 원소들은 하나의 트리이다. (노드 또는 런이 아니다.) 최소 힙위 트리의 각 구성요소들은 전부 트리들이다. (single node tree) 그렇기 때문에 위 트리는 5개의 single node tree가 있다고 할 수 있다. 왼쪽 트리는 개념적인 구조이며 오른쪽 배열은 트리를 실제로 구현한 것이다.extractMin작업을 하게 될 경우 루트가 항상 가장 작기 때문에..
압축 (2) Compression (2) Huffman Method with Run-Length Encoding- Huffman과 Run-Length를 적절히 결합한 알고리즘이다.- 파일을 구성하는 각 런들을 하나의 super-symbol로 본다. 그 후 이들에 대해 Huffman Coding을 적용하게 된다.- Ex) 문자열 AAABAACCAABA는 5개의 super-symbol인 AAA, B, AA, CC, A로 구성된다.위 그림은 각 슈퍼 심볼의 빈도와 길이를 표시한 테이블이다. Run과 Frequency 찾기- 압축할 파일을 처음부터 끝까지 읽어 파일을 구성하는 런들과 이들 각각의 등장횟수를 구한다.- 각 런들을 표현할 하나의 class Run을 우선 정의한다. 클래스 run은 적어도 세개의 데이터 맴버인 s..
압축 (1) Compression (1) Huffman Coding- 가장 대표적인 데이터 압축 알고리즘 중 하나이다. 또한 무손실 압축 알고리즘이기도 하다.- 압축의 방식에는 무손실과 손실 압축이 있다.- 이미지나 소리, 동영상 등의 멀티미디어 데이터들은 원본에 비해 약간의 손실이 있더라도 사람이 인지하기 힘들기 때문에 손실 압축 기법을 주로 이용하며 이 방식은 압축률 측면에서 효율적인 알고리즘이다.- 텍스트나 수치 데이터의 경우에는 데이터의 손실이 있으면 의미가 완전히 달라지기 때문에 무손실 압축 기법을 사용해야만 한다.위 그림은 문자가 5개 있을 경우를 가정하였으며 각 문자는 빈도의 퍼센티지로 표현하고 있다. 이렇게 표현해도 상관이 없는 이유는 허프만 코드 자체가 실제 빈도가 아니라 상대적 빈도에 의해 결정되는..
최단 경로 (3) Shortest Path (3) Floyd-Warshall Algorithm- all-to-all 최단 경로 알고리즘들 중 가장 유명하다.- Floyd 알고리즘은 동적 계획법(Dynamic Programming) 전략에 기반하고 있다.- 가중치 방향 그래프 G = (V, E) (V = {1, 2, ... , n})- 모든 노드 쌍들간 최단 경로의 길이를 구한다.- $d^k$[i, j]중간에 노드 집합 {1, 2, ... , k}에 속한 노드들만 거쳐서 노드 i에서 j까지 가는 최단 경로의 길이를 뜻한다.1) $d^0$[i, j]는 k가 0인 경우로 공집합을 의미한다. 또한 중간에 지날 수 있는 노드가 없다는 것으로 직접 연결된 엣지가 있지 않다면 길이를 ∞로 생각한다.2) $d^n$[i, j]는 k가 n..
최단 경로 (2) Shortest Path (2) Bellman-Ford Algorithm- 벨만 포드 알고리즘은 엣지들의 relax 순서가 고정되어 있지 않아 이 순서에 따라 중간 과정이 여러 분기로 나누어지게 된다.- Worst Case에 근접한 실행 예- 슈도 코드 BELLMAN-FORD (G, w, s)INITIALIZE-SINGLE-SOURCE(G, s);for i = 1 to |V[G]| - 1 // |V[G]|는 n과 같은 의미이기 때문에 n - 1번 반복하라는 뜻과 같다.for each edge (u, v) ∈ E[G]RELAX (u, v, w); // 여기까지가 벨만-포드 알고리즘의 핵심 부분for each edge (u, v) ∈ E[G]if d[v] > d[u] + w(u, v) // 음수 사이클이 존..
최단 경로 (1) Shortest Path (1) 최단 경로- 가중치(방향) 그래프 G = (V, E), 즉 모든 엣지에 가중치가 있다.- 경로 p = $v_0$, $v_1$, ... , $v_k$)의 길이는 경로상 모든 엣지들의 가중치들 총 합이다.- 노드 u에서 v까지의 최단 경로 길이를 δ(u, v)라고 표시한다. 최단 경로 문제의 유형- Single-source (one to all)하나의 출발 노드 s로부터 다른 모든 노드까지의 최단 경로를 찾는 문제.Ex) Dijkstra algorithm- Single-destination모든 노드로부터 하나의 목적 노드까지의 최단 경로를 찾는 문제single source와 본질적으로 거의 동일한 문제이다.- Single-pair (실질적으로 가장 유용한 문제, one to ..