2014-06-08 3 views
0

나는 0과 n 사이의 숫자로 채워지는 2 차원 배열 String compressedColors[][]을 가지고 있습니다. 여기서 n은 이미지의 색상 수입니다. 이제 필자의 배열을 파일에 더 많이 압축하려고하고 있는데, 하나의 아이디어는 연속적인 동일한 요소를 일종의 곱셈 연산자로 대체하는 것입니다. 이 연속 idenitcal 요소의 많은 수를 위해 일해야배열 조작 비트

compressedColors[0][0]=="1"

compressedColors[0][1] == "1"

compressedColors[0][0]=="2*1"

compressedColors[0][1] == ""

이되고, 나는 단지 원하는 : 마찬가지로 내가 좋아하는 것 배열의 두 번째 차원을 가로 지르는 압축. 두 행이 0으로 채워지면 compressedColors[x][0]에 2 개의 별도 n*0 값이 필요합니다.

나는 이것이 많은 것을 요구하고 있다는 것을 알고있다. 그러나 나는 이것을 어떻게 달성 할 수 있을까? 나는 어디서부터 시작해야할지 모르겠다. ... 고마워!

+0

정말로 0..n 값에 문자열이 필요합니까? 왜 int 나 BigInteger 같은 것이 아닌가? –

+0

이것은 런 - 길이 인코딩과 비슷하지만 어려운 방법입니다 (왜 문자열입니까?) – harold

+0

저는 파일에 쓰고 있습니다. 아이디어는 파일에 사전을 인쇄하는 것이 었습니다. .n은 RGB 기본 36 색), 그리고 나서 모든 내 번호 – Nathan

답변

1

필자는 최소한 문제에 대한 해결책을 얻는 방법을 알려주는 예제를 작성했습니다. 지금이 기능을 테스트 할 기회가 없었으므로 수정하지 않고 작동하는지 확신 할 수 없습니다.

public static String[][] compress(String[][] sArray){ 
    for(String s[] : sArray){ 
     int current = 0; 
     while(current <= s.length){ 
      int sequentials = 1; 
      while(s[current].equals(s[current+sequentials])){ 
       s[current+sequentials] = ""; 
       sequentials++; 
       if(current+sequentials>s.length) 
        break; 
      } 
      if(sequentials > 1) s[current] = sequentials+"*"+s[current]; 
      current++; 
     } 
    } 
    return sArray; 
} 
+0

아아 실제로 좀 더 구체적인 질문을 올렸습니다. P :이 문제를 살펴보고 해결할 수 있는지 알아 봅니다. 감사합니다. 감사합니다. – Nathan

1

질문에 답하려면 압축 및 압축 해제를 모두 구현해야합니다.

압축 알고리즘 (감사 기간 "실행 - 길이 인코딩"에 대한 @harold)과 같이 될 것이다 : 압축을, 그리고

// for an uncompressed image of height h and width w, stored in int colors[][] 

    for row = 0 to height 
    for column = 0 to width 

     // gets the value 
     value = colors[row][column] 

     // calculates how long the value repeats 
     runLength = 0 
     nextValue = value 
     i = 0 
     while(nextValue == value) 
     i++ 
     runLength++ 
     nextValue = colors[row][column + i] 

     // sets the runlength and the value 
     compressedColors[row][column] = runLength 
     compressedColors[row][column + 1] = value 

     // moves to next different value 
     column = column + runLength 

을, 당신은 실행으로 모든 홀수 열을 해석 할 필요가 -length와 모든 짝수 열을 값으로 사용합니다.