2016-08-22 4 views
1

2 차원 SQUARE 배열이 1과 0 인 생물학적 샘플을 포함하는 large set of data을 보내야합니다. 예를 들어 말 이 그래서 -이진 행렬 압축

[ 
    [0,1,0], 
    [1,0,0], 
    [0,0,0] 
] 

는 3 차원이다. 광산은 60-70으로 120 행/열 (최대)로 갈 것으로 예상됩니다. Ajax/API를 통해 이것을 보내야하고 데이터베이스에 저장해야합니다. 나는 Json으로 연재 할 수 있었다. 그러나 이런 일을 처리하는 최적의 방법이 있는지 찾고 있었다. 일련의 적절한 압축/압축 해제와 마찬가지로? 내가 생각할 수있는

한 가지 방법은 다음과 같습니다

  1. 는 6 자리의 클러스터에 문자열로
  2. 나누기를 숫자에 가입하세요. 111111 빈 = 63 12월 (AZ, AZ, 0-9, _ = 26 + 26 + 10 + 1)
  3. 영숫자 부호화 (a-ZA-Z0-9_) 각 클러스터 변환 문자열
  4. 로 합류

이 솔루션은 얼마나 현명하고/어리석은/최적입니까? 이미 더 좋은 점이 있습니까?

+0

매트릭스가 거의 0 인 경우 1의 좌표를 보낼 수 있습니다. – samgak

+0

데이터 구조가 고정되어 있으면 매우 긴 바이너리 숫자로 직렬화 한 다음 GMP를 사용하여 옥텟으로 변환 한 다음 다시 base64 인코딩 된 문자열로 변환하여 전송하십시오. –

+0

콘텐츠에 대한 추가 정보를 제공해야합니다. 1과 0의 분포가 무작위로 나타 납니까? 그것은 1 이상의 0에 편향되어 있습니까? 패턴이 반복됩니까? 세 가지 차원이 있지만 두 개를주었습니다 (60-70 및 120). 세 번째 란 무엇입니까? –

답변

0

데이터 구조를 JSON으로 변환 한 다음 gzdeflate()과 같은 표준 압축 알고리즘을 사용하면 얻을 수있는만큼 간단하고 뛰어난 압축률을 얻을 수 있습니다. 아마 그것보다 더 복잡하게 만들 이유가 없습니다.

(출력은 이진 데이터입니다. 처리 할 수없는 채널을 통해 전송해야하는 경우 base64_encode 수 있으며 그 결과는 여전히 행렬의 원본 JSON보다 작습니다. 의미있는 크기).

, 1 S 및 0들 중 하나의 문자열로 매트릭스 "편평"(그것이에게 약간 더 압축 비율을 제공 할 수있다 압축 전에 문자열과 함께 원래 매트릭스의 크기)를 저장하지만에서 코드를 복잡하게 만드는 비용.

질문에서 설명한 것처럼 매트릭스에서 영숫자 인코딩을 수행하면 이 압축률이 상당히 낮아집니다 (). DEFLATE 알고리즘이 데이터의 패턴을 감지하기가 매우 어려울 수 있습니다 클러스터의 크기와 완벽하게 "정렬"하십시오.

관련 문제