내가 작업하고있는 프로젝트의 경우 O (n) 공간에서 Burrows-Wheeler의 MoveToFront 변환을 구현해야합니다. 그러나 어떤 이유로 든 내 코드는 대부분의 값에 대해 작동하지만 모든 값에 대해서는 작동하지 않습니다.Burrows-Wheeler 앞으로 이동
public byte[] transform (byte[] input)
{
if (input.length == 0)
return input;
IndexedByte[] bytes = new IndexedByte[input.length];
for (int i = 0; i < input.length; i++)
{
bytes[i] = new IndexedByte(input[i],i);
}
for (int i = 0; i < input.length -1; i++)
{
bytes[i].next = bytes[i+1];
}
bytes[input.length - 1].next = bytes[0];
Arrays.sort(bytes);
byte[] newBytes = new byte[input.length];
for (int i = 0; i < bytes.length; i++)
newBytes[i] = bytes[i].b;
int[] indexes = new int[input.length];
for (int i = 0; i < indexes.length; i++)
indexes[i] = (bytes[i].origIndex + (input.length - 1)) % input.length;
int x = 0;
String str = new String(input);
for (int i = 0; i < input.length; i++)
{
if (bytes[i].origIndex == 0)
{
x = i;
break;
}
}
byte[] header = intToByteArray(x);
byte[] result = new byte[indexes.length+header.length];
for (int i = 0; i < header.length; i++)
result[i] = header[i];
for (int i = 0; i < indexes.length; i++)
result[i+header.length] = input[indexes[i]];
return result;
}
내가 잘못 여기서 뭘하는지에 대한 조언 :
내 구현은 다음과 같이 보입니다? 영숫자가 아닌 문자가 발견되면 (즉, 인코딩 자체가/* 등으로 표시 될 때) 이것이 작동하지 않는 것으로 보입니다.
'String str = new String (input);'줄은 불필요하지만 문제가되지 않을 것입니다. –
intToByteArray 코드를 포함하고 싶을 수도 있습니다 –
죄송합니다, 미안 해요 : http://pastebin.com/d6726a4ab – Jason