2014-05-16 4 views
0

데이터를 더 많은 팩터 매너에 저장하는 데 관심이 있습니다. 0에서 2 사이의 숫자를 쉽게 저장할 수 있다는 것을 알고 있습니다.^(x) -1 비트 연산자를 사용하여,하지만 난 6 또는 뭔가의 최대 같은 더 홀수에 관심이 있어요. 나는 약 1 주일 동안 내 마음 속으로 그것을 들먹이며 지금 약 1 시간 동안 인터넷 검색을 해왔지만 실제로 아무 도움도 찾을 수 없다. 내가 알고리즘 또는 뭔가를 찾고 있어요여러 값을 하나의 데이터 형식으로 묶음

난에 돌진 단지 뇌 해요 ... 나에게 가장 0과 1 32ish 사이의 임의의 숫자 사이에 데이터를 포장하는 방법을 알아낼

에 도움이 이것은 또한 이와 같은 압축이 심지어보아야 하는지를 알고 싶습니다. 내가 이것을 조사하고있는 이유 중 하나는 거대한 배열 등입니다. 미안 해요, 이건 어리석은 질문이라면, 내 뇌는 최근에 아주 날카로웠다. 또한

, 최대 값의 예 : 1,5,8,3,12,19

내가 생각하고 있었는데 체결 된 클래스가 될 것 같은 뭔가 : 도움을

public class MyObject{ 
    private long packed; 
    ... 
    public int getA(){...} 
    public void setA(){...} 
    public int getB(){...} 
    public void setB(){...} 

감사합니다 , ~ vzybilly ~

+0

왜 하시겠습니까? –

+0

데이터의 유용성을 유지하면서 극단적 인 데이터 압축에 관심이 있습니다. 기하 급수적으로 늘어나는 생각이 들기 때문에 원하는 데이터를 보유하는 새로운 클래스를 만들 수있는 클래스를 만들고 싶었습니다. 나는 또한 온라인 채팅을 기억하고 있었는데, 0 ~ 2, 0 ~ 5를 4 비트로 저장하는 동안 저장했다.하지만 그 일을 잊어 버렸고, 내 최고는 5 비트였다. 추가 25 % – vzybilly

+0

@vzybilly 데이터 요구 사항이 기하 급수적으로 증가하는 경우 비트 압축은 최상의 선형 압축률만을 얻기 때문에 많은 도움이되지 않습니다. – awksp

답변

0

일반적인 질문으로 프로그래머에게는 어쩌면 수학자/정보 이론가에게는 흥미롭지 않습니다. 특정 예는 기억이 풍부한 오늘날의 세계에서는 중요하지 않지만 재미있게 놀 수 있지만 당신과 컴퓨터가하는 다른 모든 일은 더 희귀합니다.

로트 번호의 시퀀스를 1-6 범위에 저장해야한다고 가정 해 봅시다. 이 중 12 개를 32 비트 정수로 맞출 수 있습니다 (6^12 < 2^32). 하지만 이제는 데이터에 액세스 할 때마다 추가 연산이 있습니다. 기본적으로 엔트리 모듈 6^n + 1에 6^n이 얼마나 있는지 봅니다. 이는 사용하는 표현에 따라 속도와 크기면에서 균형이 맞기 때문입니다. "최고"라는 말은 실제로 의미가 있습니다.

공간을 절약하는 것이 자유롭고, 훌륭하고 우아 할 때가 아니라는 것을 말하는 것은 아닙니다. 그러나 문제를 해결할 능력이있는 사람이 요청해야하는 문제입니다. 그것.

+0

나는 필요하지 않을 수도 있지만, 기술 습득에 관심이있다. 지금 당장 도움이 될 것입니다. 나는 또한 그것들을 함께 묶어서 묶는 것과 같은 것을 알고 있지만 더 컴팩트 한 방법을 찾고있었습니다. – vzybilly

+0

기본적으로, 여러분은 1-6 값의 그룹을 기본 6에 더 큰 숫자로 저장합니다. 당신은하지 않습니다. 시프 팅 및 ORing; 당신은 곱셈과 모딩을하고 있습니다. –

+0

어떻게 데이터를 저장/검색 할 것인가? 그게 내가 관심있는 것보다 더 많은 것 같아.나는 그것을 할 수없는 몇 가지 방법을 시험해보고 테스트 할 수 없는지 알게 될 것이다. – vzybilly

관련 문제