달리는 길이 변환?

네이버 영어사전

  • 여기서 Run 은 “동일한 값이 반복되는 sequence” 를 의미한다.
  • 즉, Run Length Encoding 은 “동일한 값이 반복되는 sequence 의 길이” 로 encoding 하는 것을 의미한다.

예시

  • 이거봐라:
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
  • 이걸 같은애들끼리 묶으면,
(WWWWWWWWWWWW)(B)(WWWWWWWWWWWW(BBB)(WWWWWWWWWWWWWWWWWWWWWWWW)(B)(WWWWWWWWWWWWWW)
  • 그리고 숫자로 바꾸면 된다.
12W1B12W3B24W1B14W
  • 위와 같이 그냥 일렬로 쭉 적거나, 아니면 배열을 두개로 나눌 수도 있다.
[W, B, W, B, W, B, W]
[12, 1, 12, 3, 24, 1, 14]

언제쓰면 좋을까?

  • 당연히 어떤 값이 “연속해서 반복적으로” 등장할 때 좋다.
  • 따라서 어떤 값이 반복적으로 나오긴 하지만 연속해서 나오지는 않을때 (WBWBWBWBWBWBWB...) 와
    • 이 경우 순서를 바꿔도 된다면, 이것을 정렬해버린 다음 encoding 하면 아주 행복할 것이다. (BBB...WWW...)
    • 이렇게 정렬해버리는 꼼수를 MS SQL Server Columnstore Index 에서 사용한다고 한다.
  • Unique value 가 너무나 많을 때 (ABCDEFGHIJK...) 사용하면 쥐약일 것이다.
    • 이 경우의 대표적인 예가 SQL 에서 PK 이다.

One Value

  • 만약 모든 값이 하나의 값으로 동일하다면, 당연히 길이는 빼고 그냥 해당 값으로 퉁치면 될 것이다.
  • 이러한 특별 케이스의 RLE 를 One Value 라고 부르기도 한다.