2012-03-01 2 views
0

많은 메모리를 차지하지 않고 짧은 시간에 두 개의 문자열을 효율적으로 비교할 수있는 알고리즘을 찾고 있습니다. 그래서 내가 현재하고있는 것은 문자열을 먼저 압축 한 다음 압축 된 문자열을 비교하는 것입니다 (메모리 오류를 피하기 위해 문자열은 매우 길 수 있습니다.)C/C++에서 인코딩 된 문자열 압축 알고리즘

문자열에 [0-9], x, o의 문자가 포함되어 있습니다. ,엑스.

이제 압축 규칙은 특정 반복 토큰 만 압축해야하는 것과 같습니다. 예를 들어 'O'는 토큰의 단부이며 하나 개 이상의 숫자 (0-9}의 시퀀스의 끝에 항상 제공, 'X'등과 승산

예 보여주는 것이다 : 1. 8o8o80을해야 3x80 2. 8oXXXX로 압축 할 수가있는 경우

가 궁금 .. 3. 64o8o8o16o16o이 64o2x8o2x16o 등해야 804xX로 압축해야한다 등의 압축 문자열에 대한 기존의 알고리즘?

도움의 어떤 종류를 주셔서 감사합니다 이 문제를 해결할 수 있습니다. 감사합니다.

+0

어떻게 비교 한 후 비교하는 것이 단순히 비교하는 것보다 빠를 수 있습니까? – Jon

+0

순진한 비교는 무엇이 잘못 되었습니까? 그것은 이미 두 문자열에 의해 사용되는 것보다 더 많은 메모리를 사용하지 않으며, 더 빠를 수 있습니다. (잠재적으로 더 정확한) ... – Nim

+0

@Jon : 압축되지 않은 문자열에 대해 메모리 오류가 발생하는 것처럼 빠르지 만 메모리가 효율적이지 않습니다. . – Raj

답변

1

run length encoding algorithm을 찾고 있습니다. 일부 구현을 찾을 수 있습니다. here

+0

예,하지만 이상한 "터미네이터"문자가있어서 알고리즘을 수정해야 할 수도 있습니다. – vulkanino

+0

스태커 감사합니다. 그러나 RLE의 기본 구현에서 토큰은 char이지만 나에게는 char 집합입니다. 그리고 그 골동품에는 숯을 끝내는 개념이 없습니다. – Raj

+0

내 기대에 부합하는 적절한 압축 알고리즘을 찾을 수 없습니다. 그래서 나는 나를 위해 일하는 것을 구현할 것이다. – Raj