르페어
Re-PairRe-Pair(재귀적 페어링의 줄임말)는 문법 기반의 압축 알고리즘으로, 입력 텍스트가 주어지면 직선 프로그램, 즉 단일 문자열을 생성하는 문맥 없는 문법: 입력 텍스트가 생성된다.문법은 본문에서 발생하는 가장 빈번한 한 쌍의 문자를 재귀적으로 대체함으로써 만들어진다.일단 한 쌍의 문자가 두 번 발생하지 않으면, 그 결과 문자열이 문법의 공리로 사용된다.따라서 출력 문법은 공리를 제외한 모든 규칙에는 오른쪽에는 두 개의 기호가 있을 정도로 되어 있다.
작동 방식
Re-Pair는 NJ. Larsson과 A에 의해 처음 소개되었다.1999년 모팻[1].
그들의 논문에는 알고리즘이 선형적인 시간과 공간 복잡성으로 구현하는 데 필요한 데이터 구조에 대한 상세한 설명과 함께 제시되어 있다.실험 결과, Re-Pair는 높은 압축률을 달성하고 감압에 좋은 성능을 제공하는 것으로 나타났다.그러나 알고리즘의 주요 단점은 입력 크기의 약 5배에 달하는 메모리 소비량이다.이러한 메모리 사용은 압축을 선형 시간 내에 수행하기 위해 필요하지만 알고리즘을 큰 파일을 압축하는 데 비현실적으로 만든다.
오른쪽 이미지는 알고리즘이 어떻게 하는지 문자열 = c b y a 을(를) 압축하는 방법을 보여준다
During the first iteration, the pair , which occurs three times in , is replaced by a new symbol . On the second iteration, the most frequent pair in the string , which is , is replaced by a new symbol . Thus, at the end of the second iteration, the remaining string is . In the next two iterations, the pairs 및 은(는) 각각 기호 3 과(와) 로 대체된다.마지막으로 = 2 R 4 2}}개 문자열은 반복된 쌍을 포함하지 않으므로 출력 문법의 공리로 사용된다.
데이터 구조
선형 시간 복잡성을 달성하기 위해 Re-Pair는 다음과 같은 데이터 구조를 필요로 한다.
- 입력 문자열을 나타내는 시퀀스.시퀀스의 위치 에는 입력 문자열의 i번째 기호와 시퀀스의 다른 위치에 대한 두 개의 참조가 포함되어 있다.이러한 참조는 이전: k {\ 및 m {\ [ ], [ k 및 w[ 에서 동일한 하위 문자열이 시작되고 세 가지 발생 모두 동일한 참조에 의해 캡처된다예: is 문자열을 생성하는 문법의 변수).
- 우선 순위 대기열.큐의 각 요소는 순서대로 연속적으로 발생하는 기호 쌍(단말 또는 이전에 정의된 쌍)이다.쌍의 우선 순위는 나머지 순서에서 쌍의 발생 횟수로 주어진다.새 쌍이 생성될 때마다 우선 순위 대기열이 업데이트된다.
- 이미 정의된 쌍을 추적하기 위한 해시 테이블.이 테이블은 새 쌍이 생성되거나 제거될 때마다 업데이트된다.
해시 테이블과 우선 순위 대기열은 동일한 요소(페어)를 가리키기 때문에, 해시 테이블(h_next)과 우선 순위 대기열(p_next, p_p_prev)에 대한 포인터가 있는 PALE이라는 공통 데이터 구조로 구현할 수 있다.또한 각 PARE는 시퀀스에서 PARE로 대표되는 문자열의 첫 번째(f_pos)와 마지막(b_pos) 발생을 가리킨다.다음 그림은 이 데이터 구조의 개요를 보여준다.
다음 두 그림은 이러한 데이터 구조가 초기화 후와 페어링 프로세스의 한 단계(NULL에 대한 포인터는 표시되지 않음)를 적용한 후 어떻게 보이는지 예를 보여준다.
문법 인코딩
일단 주어진 입력 문자열을 위해 문법이 만들어지면, 효과적인 압축을 이루기 위해서, 이 문법은 효율적으로 암호화되어야 한다.문법을 인코딩하는 가장 간단한 방법 중 하나는 암묵적인 인코딩인데, 이 인코딩은 호출 함수에 의해 구성되어 있다.encodeCFG(X)
아래에 설명된 대로 모든 공리의 기호에 순차적으로 표시하십시오.직관적으로 규칙은 문법의 깊이 첫 번째 통과에서 방문될 때 암호화된다.규칙을 처음 방문할 때 규칙의 오른쪽은 재귀적으로 인코딩되고 새 코드가 규칙에 할당된다.그 시점부터 규칙에 도달할 때마다 할당된 값이 기록된다.
num_message_message = 256 // 기본적으로 확장 ASCII 문자 집합은 문법의 단자다. writeSymbol(심볼 s) { 비트의 = 통나무를 하다(num_message_message); // 초기 8: 확장 ASCII 문자를 설명 글씨를 쓰다 s 에 이진의 사용. 비트의 조각들 } 공허하게 하다 encodeCFG_rec(심볼 s) { 만일 (s 이다 논외의-종말의 그리고 이 이다 그 맨 처음의 시간 심볼 s 등장하다) { 받아들이다 통치를 하다 s → X Y; 글씨를 쓰다 물다 1; encodeCFG_rec(X); encodeCFG_rec(Y); 할당하다 로 심볼 s 가치를 매기다 ++num_message_message; } 다른 { 글씨를 쓰다 물다 0; writeSymbol(종말의/가치를 매기다 맡겨진) } } 공허하게 하다 인코드CFG(심볼 s) { encodeCFG_rec(s); 글씨를 쓰다 물다 1; }
다른 가능성은 규칙 → Z X이(가) 적어도 Y 또는 이(가) - 에 속하고 다른 하나는 ge에 속하도록 문법 규칙을 세대로 구분하는 것이다.neration 과) j i 1 {\j i 그런 다음 이 세대는 0{\세대로 인코딩된다이것은 원래 르페어가 처음 도입되었을 때 제안된 방식이었다.그러나 대부분의 Re-Pair 구현에서는 단순성과 우수한 성능 때문에 암시적 인코딩 방식을 사용한다.게다가, 그것은 즉각적인 감압을 허용한다.
버전
Re-Pair의 구현에는 여러 가지가 있다.이러한 각 버전은 런타임 감소, 공간 소비 감소 또는 압축 비율 증가와 같은 알고리즘의 특정 측면을 개선하는 것을 목표로 한다.
개선 | 연도 | 실행 | 설명 |
---|---|---|---|
구[2] 검색 | 2003 | [1] | 입력 문자열을 일련의 문자로 조작하는 대신, 이 도구는 먼저 문자들을 구(예: 단어)로 분류한다.압축 알고리즘은 Re-Pair로 작동하지만 식별된 구문을 문법의 단자로 간주한다.도구는 어떤 종류의 구문을 고려할지 결정하기 위해 다양한 옵션을 수용하고 결과 문법을 공리를 포함하는 문법과 나머지 규칙과 함께 구분된 파일로 인코딩한다. |
오리지 | 2011 | [2] | 이것은 Re-Pair의 가장 인기 있는 구현 중 하나이다.여기에 기술된 데이터 구조(처음 출판되었을[1] 때 제안된 것)를 사용하고 암묵적 인코딩 방식으로 결과 문법을 인코딩한다.대부분의 후기 버전의 Re-Pair는 이 버전부터 구현된다. |
인코딩[3] | 2013 | [3] | 이 구현에서는 암묵적 인코딩 방식 대신 각 규칙(변수 길이 문자열로 표시됨)을 고정 길이 코드로 인코딩하는 가변 길이 대 고정 길이 방법을 사용한다. |
메모리 사용량[4] | 2017 | [4] | 알고리즘은 두 단계로 수행된다.1단계에서는 고주파 쌍, 즉 /3 회 이상 발생하는 쌍을 고려하며, 2단계에서는 저주파 쌍을 고려한다.두 단계 사이의 주요 차이점은 해당 우선순위 대기열의 구현이다. |
압축[5] | 2017 | [5] | 이 버전은 교체할 다음 쌍을 선택하는 방법을 수정한다.단순히 가장 빈번한 쌍을 고려하는 대신에, 그것은 입력 문자열의 Lempel-Ziv 인수화와 일관성이 없는 쌍을 처벌하는 경험적 접근법을 채택한다. |
압축[6] | 2018 | [6] | 이 알고리즘은 최대 반복을 먼저 대체해 Re-Pair에서 생성되는 문법 크기를 줄인다.쌍이 알고리즘의 현재 단계에서 가장 빈번한 쌍으로 식별되면, MR-repair는 쌍을 확장하여 교체할 쌍과 동일한 횟수로 발생하는 가장 긴 문자열을 찾는다.제공된 구현은 단순히 텍스트에 규칙을 나열함으로써 문법을 암호화하므로, 이 도구는 순수하게 연구 목적을 위한 것이며, 압축에는 그대로 사용할 수 없다. |
참고 항목
참조
- ^ a b N. J. & Moffat, A. (2000년) 라르손.오프라인 사전 기반 압축.IEEE 88(11) 1722-1732의 절차.
- ^ R. Wan. "압축된 문서 검색 및 검색"2003년 12월 호주 멜버른 대학교의 박사 논문.
- ^ 요시다 사토시, 키다 타쿠야, Re-Pair 알고리즘을 통한 유효 가변 길이 대 고정 길이 코딩, 2013년 데이터 압축 컨퍼런스(DCC 2013), 페이지 532, 미국 유타 스노버드, 2013년 3월.
- ^ 빌, P, 괴르츠, I. L, & Prezza, N. (2017, 4월)공간 효율적인 리페어 압축.2017년 (DCC) (pp. 171-180).IEEE.
- ^ 가크조르즈, M, & Jeż, A.(2017년, 4월)Re-Pair 문법 압축기의 개선.2017년 데이터 압축 컨퍼런스(DCC) (pp. 181-190).IEEE.
- ^ 후루야, 나, 다카기, T, 나카시마, Y, 이나나가, S, 반나이, H, & 키다, T. (2018)MR-RePair: Maximal Repeat에 기초한 문법 압축.arXiv 사전 인쇄 arXiv:1811.04596.