Sunday 29 April 2018

Run length compression binário opções


Eu tenho um formulário web, para o conteúdo do qual eu gostaria de gerar uma representação curta no Base64. A forma, entre outras coisas, contém uma lista de 264 valores binários, a maior parte dos quais vão ser 0 em qualquer momento. (Representam regiões num mapa geográfico). Mesmo em Base64, este número de 264 bits gera uma cadeia longa e intimidante. Eu quero implementar a codificação run-length, tão eficientemente quanto possível. Você pode me ajudar com este Ive googled binário RLE, mas não encontraram nada de uso. O que eu tentei este remoto RLE na cadeia binária usando contagens decimais e A como um separador denotando uma mudança entre 0 e 1, em seguida, convertendo o resultado da base 11 para base 64. Por exemplo: que por sua vez torna-se melhor, mas Eu ainda não posso ajudar, mas duvido se estou fazendo algo errado - está usando o dígito A como um separador é a melhor maneira de fazer isso Graças à comingstorm. Eu encurtei a corda comprimida um pouco mais. Como eu mencionei nos comentários, casos de uso real geralmente resultaria em uma seqüência ainda mais curta. Como você está codificando bits, você provavelmente quer usar um RLE baseado em bits em vez de um baseado em bytes. Neste contexto, você deve considerar Elias gamma codificação (ou alguma variante do mesmo) para codificar eficientemente seus comprimentos de execução. Uma primeira aproximação razoável para o formato de codificação pode ser: primeiro bit igual ao primeiro bit da seqüência de caracteres não compactada (para definir a polaridade inicial) restantes: Elias codificados comprimentos de sucessivos bits executados (alternando 1 e 0) Como você sabe quantos bits Estão em sua seqüência de caracteres descompactada, você não precisa de um código de terminação você pode apenas adicionar qualquer preenchimento binário necessário como bits arbitrários. Observe que é sempre possível para a compactação de comprimento de execução expandir sua seqüência de bits se você estiver preocupado com isso, você pode adicionar outro bit inicial para indicar se seus dados estão no formato compactado ou descompactado, limitando sua sobrecarga de compressão a 1 bit. Suppose Nos é dado um arquivo ou uma mensagem de origem que tem muitos caracteres redundantes. Por exemplo, um arquivo MS Word médio tem muitos bytes 255 consecutivos e caracteres NULL. É possível representar estes bytes consecutivos ou executa em uma forma mais compacta? De fato, uma técnica de compressão foi projetada para resolver este problema específico. Ele é chamado Run-Length Encoding ou RLE. Seu nome descreve com precisão o processo porque codifica uma execução de bytes para a seguinte forma de 2 bytes: comprimento, com comprimento representando o número de execuções de um único byte e o que significa que podemos codificar até 255 execuções consecutivas. Esta técnica é a mais simples em técnicas de codificação de comprimento de execução. Como exemplo, considere a seguinte fonte de dados ou seqüência de 24 letras: String de entrada. Abbbbbbbbbbefffgggghhijk Para codificar a seqüência acima, a saída seria,,,,,,,, e. O formulário comprimido total para esta fonte é apenas 18 bytes. Isso nos economiza exatamente 6 bytes, com uma taxa de compressão de 25. Tecnicamente, um byte de comprimento melhor poderia significar quantos mais segue, para que pudéssemos realmente gravar no máximo 256 bytes: o indicador de byte mais as possíveis 255 execuções. Assim, a letra a seria então codificada como em vez de. Uma desvantagem desse tipo de RLE é que, se houver apenas um único byte para codificar, você terá que adicionar um byte extra para o byte de comprimento, como o do exemplo anterior quando codificamos as letras ae e. É bom assumir que existem apenas determinadas secções da origem de dados que têm estas execuções. Embora pudéssemos codificar apenas 256 execuções de um único byte, bytes consecutivos mais de 256 oftentimes não ocorrem na maioria dos arquivos que ele funciona perfeitamente bem para arquivos com caracteres redundantes suficientes ou bytes. Podemos melhorar esta técnica limitando o código de comprimento a apenas 4 bits. Com esta disposição, podemos codificar apenas um máximo de 16 execuções de um byte, o que é adequado para a compressão simples, uma vez que os arquivos reais geralmente não contêm muitos bytes redundantes. Arquivos de texto. Uma maneira de melhorar o método byte-length é na área de compactação de arquivos de texto. Dada a natureza dos arquivos de texto (ASCII) em que os bytes individuais podem realmente ser codificados em apenas 7 bits (ou seja, bit-7, ou o oitavo bit, de todos os bytes em um arquivo de texto é 0), podemos usar bit - 7 como um sinal para o descodificador se um byte é repetido ou não. Se houver uma execução de um byte, vamos definir os bytes bit-7 para 1. Assim, se o descodificador vê um byte que é maior do que 127, isso significa apenas que há uma execução de bytes eo decodificador irá prontamente escrever O número de bytes. Arquivos binários. Outra forma inteligente de codificação de comprimento de execução é codificar se e somente se houver uma execução. Ou seja, não codificar um byte adicional para um único byte não redundante: codificar apenas os bytes redundantes. Isso é feito codificando duas vezes o byte e depois codificando o comprimento byte: length. Dessa forma, não incorrer um byte de comprimento para os bytes que ocorrem apenas de forma independente em um fluxo de dados. Assim, na fase de descompressão, a presença de um byte duplo nos alerta que há exatamente uma execução de bytes. Portanto, significa que há 10 execuções de byte b. Segue-se que devemos então escrever os oito bytes seguintes após os dois. O exemplo anterior seria então codificado como este: Esta codificação precisa apenas de 17 bytes para a saída. Observe que as letras ae e agora são codificadas como estão, com bytes simples. Para arquivos muito grandes, essa técnica é mais poderosa do que a técnica byte-length. Esse método pode registrar no máximo 257 bytes consecutivos (2 (0..255)). Outro inconveniente que incorrer a partir desta nova técnica, no entanto, é o símbolo adicional codificado. Se houver apenas duas execuções de um símbolo, precisamos de um byte adicional, codificando a execução com três bytes em vez de apenas dois bytes. Em geral, no entanto, isso é mais eficaz quando olhamos para os dados como um único arquivo grande que pode naturalmente ter uma série de bytes idênticos. RLE. ZIP - inclui implementações C de codificação de comprimento de execução para arquivos de texto e binários. YES CHAR especifica que as observações em um conjunto de dados de saída SAS recém-criado são compactadas (registros de comprimento variável). SAS usa RLE (Run Length Encoding) para compactar observações. Este algoritmo de compressão é melhor para dados de caracteres. NO especifica que as observações em um conjunto de dados SAS recém-criado são descompactadas (registros de comprimento fixo). BINARY especifica que as observações em um conjunto de dados de saída SAS recém-criado são compactadas. SAS usa RDC (Ross Data Compression) para esta configuração. Esse método é altamente efetivo para compactar blocos de dados binários de médio a grande (várias centenas de bytes ou maiores) (ou seja, variáveis ​​numéricas). Como a função de compressão opera em um único registro de cada vez, o comprimento do registro precisa ser várias centenas de bytes ou maior para a compactação efetiva. Especifique COMPRESS somente para conjuntos de dados de saída, ou seja, conjuntos de dados nomeados na instrução DATA de uma etapa DATA ou na opção OUT de um procedimento SAS. O tipo de registro se torna um atributo permanente do conjunto de dados. Para descomprimir observações, use uma etapa DATA para copiar o conjunto de dados e use COMPRESSNO para o novo conjunto de dados. Quando COMPRESSYESCHAR, SAS comprime o tamanho do conjunto de dados com codificação run-length. A codificação de comprimento de execução comprime o conjunto de dados reduzindo caracteres consecutivos repetidos para representações de dois ou três bytes. Quando compressão COMPRESSBINARY, SAS combina run-length codificação e compactação de janela deslizante para compactar o conjunto de dados. Use SASToolkit para especificar seu próprio método de compactação. Nota: A compressão das observações não é suportada por todos os motores. Na versão 8, conjuntos de dados criados com os mecanismos que estavam disponíveis em versões anteriores do SAS, como os motores TAPE e XPORT, ainda são acessados ​​por esses mecanismos. Portanto, se a compactação não estava disponível para esses mecanismos, também não estará disponível quando você acessa esses conjuntos de dados na Versão 8. As vantagens obtidas com a opção de conjunto de dados COMPRESS incluem: requisitos de armazenamento reduzidos para o conjunto de dados menos operações de entrada e saída necessárias Para ler ou escrever para o conjunto de dados durante o processamento. As desvantagens de usar a opção de conjunto de dados COMPRESS incluem: não pode comprimir em todos (pode realmente tornar o arquivo maior), mas uma mensagem detalhando a quantidade de compressão é fornecida mais recursos de CPU são necessários. Por padrão, novas observações são acrescentadas aos conjuntos de dados compactados existentes. Se você desejar rastrear e reutilizar espaço livre, use a opção de conjunto de dados REUSE quando você cria um conjunto de dados SAS compactado. REUSEYES diz ao SAS para escrever novas observações para o espaço que é liberado quando você exclui outras observações. A opção de conjunto de dados COMPRESS substitui a opção de sistema COMPRESS. PERFORMANCE NOTA: Utilizar esta opção aumenta o tempo de CPU para ler um conjunto de dados devido a sobrecarga de descomprimir o registo. Além disso, alguns motores não suportam compressão de observações. Ao usar configurações de opção COMPRESSYES e REUSEYES, as observações não podem ser endereçadas pelo número de observação. Observe que REUSEYES tem precedência sobre POINTOBSYES. Por exemplo: resultados em um conjunto de dados que tem POINTOBSNO. Como POINTOBSYES é o usar como padrão quando você usar compactação, REUSEYES faz POINTOBS para alteração para NO.

No comments:

Post a Comment