Num relance:
"Noise" e "Signal to Noise Ratio" do JSON
O limite superior teórico da quantidade de ruído, expressão polonesa inversa
Teoria da Informação e Tecnologia de Compressão: String vs. String de Byte
Melhor árvore binária, FPS / 2.0
Codificação Huffman
Pacote de Mensagens
Árvore Huffman para Message Pack
Separador de prefixo VS
Defeito no Message Pack, bug no ambiente do host
O limite de serialização, dois axiomas básicos
Compressão extrema UTF-8
Número racional: mudança de tipo de comprimento variável
Método de compressão de dicionário
Mutilação da cauda
Ultra Pack e o princípio da substituição do espaço-tempo
Metafísica do motor V8 (o que está acontecendo sob o capô)
" Não falo de tecnologia aqui, apenas de pensamento. "
Que absurdo.
Originalmente, esse ppt deveria ser exibido na conferência FEConf da empresa, mas a nova epidemia de coronavírus no início do ano deu isso aos pombos. Diz-se que na primavera de 16XX, uma trágica praga estourou na área de Londres, e então o grande Deus Newton produziu uma série de grandes realizações acadêmicas, incluindo o teorema binomial e cálculo quando ele estava isolado em casa, o que levou à primeira teoria humana. Explosão da física ...
Não houve nenhum progresso na física teórica para os humanos por quase 100 anos , e todas as aplicações ainda são baseadas na teoria da relatividade e na mecânica quântica do início do século passado. Por isso, eu e outros animais sociais, incentivados pela campanha "Emergência de Reserva Teórica" no Weibo e nos Momentos, também tentamos usar o tempo de isolamento em casa para fingir que estamos nos dedicando à ciência, especialmente à pesquisa teórica que está fora do interesse de aplicação.
Minha direção de pesquisa é a teoria da informação de Shannon (da seção evolutiva na estação B, é dito que a evolução é baseada na teoria da informação ????), eu quero ter uma melhor compreensão da informação, entropia e vida, e me reduzir através da aprendizagem Entropia de informação, sobre a relação entre informação e entropia, consulte o artigo anterior "Informação e Entropia [Parte 1] A vida se alimenta de informação" . Este artigo é o segundo da série.O tema é sobre o algoritmo de compressão de informação na teoria da informação.O ppt que foi preparado para a palestra da empresa há um ano está totalmente traduzido em um artigo, e o conteúdo está mais voltado para software de computador.
01
-
Ruído JSON
Tema: Procurando os limites da serialização.
O que é serialização? A serialização é um tipo de conversão sem perdas de dados multidimensionais em dados lineares unidimensionais. É um método de codificação. A razão pela qual é convertido em unidimensional é para melhor armazenamento e transmissão. Para saber mais sobre serialização, consulte este artigo .
A teoria da informação acredita que "codificação" é o processo de conversão de informações de um formato ou formato para outro. Por exemplo, a codificação de caracteres é a conversão de informações em formato de texto em formato de bytecode. Pelo contrário, a codificação de base64 é o processo de conversão do formato de bytecode. Converta para o formato de texto. "Decodificar" é o processo reverso de codificação.
Explicação do termo: codificação
Então JSON é um formato de serialização tão popular. JSON suporta os quatro tipos básicos de números reais, strings, booleanos e nulos e os dois tipos compostos de listas e dicionários. É muito fácil de usar e, claro, tem suas deficiências. JSON A "relação sinal-ruído" é muito baixa , mas é difícil dizer quanto.
De acordo com a visão da teoria da informação, dados = informação + ruído. A fórmula dessa teoria no formato de serialização baseado em texto é: JSON = bit de tipo + bit de informação . O bit de informação é a quantidade efetiva de informação contida em json, e o bit de tipo é todo o ruído restante, incluindo aspas duplas, vírgulas, colchetes, chaves, etc.
O ruído em json é compactável e algumas otimizações podem ser vistas rapidamente: se você remover as aspas duplas da "chave" no par de valores-chave, substitua true e false pelas letras t e f. Irá produzir ambigüidade.
Há uma jogabilidade mais sofisticada: substitua todos os parênteses em json por expressões polonesas reversas . Também é uma forma eficaz de reduzir o volume.
Além disso, o tipo de número real é armazenado na forma de caracteres decimais, o que não apenas causa muito ruído, mas também aumenta o tempo de conversão.
Se você olhar com atenção, poderá encontrar muitos dados redundantes em json, que podem ser compactados continuamente, mas onde está o limite dessa compactação? Deve haver um limite, json não pode ser compactado infinitamente.
02
-
Existe um limite para a compactação de dados?
Um velho chamado González na Espanha projetou um algoritmo de compactação json, que também é baseado em texto. Diz-se que ele pode compactar json profundamente aninhado para 55%. Por exemplo, há um json como este:
{
"type": "world",
"name": "earth",
"children": [
{
"type": "continent",
"name": "America",
"children": [
{
"type": "country",
"name": "Chile",
"children": [
{
"type": "commune",
"name": "Antofagasta"
}
]
}
]
},
{
"type": "continent",
"name": "Europe"
}
]
}
Esta string é obtida através do meu "algoritmo de compressão":
type|world|name|earth|children|continent|America|country|Chile|commune|Antofagasta|Europe^^^$0|1|2|3|4|@$0|5|2|6|4|@$0|7|2|8|4|@$0|9|2|A]]]]]|$0|5|2|B]]]
E a taxa de compressão é incrível, ultrapassando até MessagePack, que será discutido mais tarde, mas após um estudo cuidadoso, descobriu-se que ele realmente usa o hábito das pessoas de usar json para compactar . Por exemplo, as pessoas costumam usar TypedArray (com lista de tipos), como json-schema Da mesma forma, os atributos dos objetos da lista são restritos: o irmão González coleta e usa os mesmos nomes-chave que aparecem com frequência, como nome, id e filhos, o que diminui o acoplamento e diminui o volume.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
Introdução ao TypedArray
Mas esse tipo de algoritmo de compressão usando o hábito não dura, afinal, porque o hábito vai mudar, então não é recomendado. Em certas situações, ou em uma equipe fixa, este algoritmo ainda é útil.
Mas não se pode dizer que usando este formato hoje, pensando em um algoritmo de compressão melhor amanhã, e mudando para um novo formato, quão melhor é esse "melhor", como quantificá-lo e qual é o limite superior, essas são as preocupações da teoria da informação. Para encontrar esse limite, é necessário estudar o formato "fundamental" da informação: um formato binário, não um formato de texto baseado em um formato binário. As melhorias e otimizações no formato de texto nunca podem atingir o limite da compressão da informação . Portanto, a contradição central na evolução dos formatos de serialização é: formato de texto vs. formato digital.
Em suma, o formato de texto é um formato de transição "preguiçoso" no desenvolvimento dos tempos . Devido às características simples e extensíveis do formato de texto, muitos formatos de serialização anteriores, http e até famílias de protocolo IP ainda mantêm o formato de texto. Especialmente o protocolo http / 1.X, que ocupa mais de 90% do tráfego da Internet. Como o cabeçalho e o corpo (json) do http / 1.1 estão todos em formato de texto, o http também encontrou um gargalo de desempenho: em termos de tempo, compilação e análise do texto http Uma perda de tempo; em termos de espaço, um grande número de campos no cabeçalho http desperdiçam espaço.
03
-
Teoria da Informação e Tecnologia de Compressão
Mas a partir de http / 2.0 (doravante referido como h2), essa atmosfera doentia começou a mudar.Para cabeça e corpo, h2 usa algoritmos de compressão diferentes para melhorar a eficiência. Para cabeçalhos estáticos, h2 usa codificação de comprimento fixo para compactar, ou seja, atribuir um número fixo a cada cabeçalho comumente usado, como content-type: text / html. Para o cabeçalho dinâmico, você pode personalizar os valores de cabeçalho e valor, e h2 usa a codificação de comprimento variável ASCII: codificação Huffman.
Até agora, a parte principal do http foi totalmente digitalizada, e a parte do corpo é definida pelo usuário e ainda mantém o formato de texto json, mas w3c apela a todos para usar alternativas json, mas não há nenhuma declaração direta sobre quais alternativas, vamos Sinta-se à vontade para escolher o formato de serialização binário.
Nota: O processo de alteração do formato do texto para um formato binário é chamado de "digitalização" porque o formato binário é mais parecido com um "formato digital".
04
-
Árvore binária ótima
Como o w3c recomenda o uso do formato de serialização binária codificado por Huffman, é necessário entender a estrutura de dados de Huffman: a árvore binária ideal.
A forma mais direta de projetar um conjunto de códigos é a codificação de comprimento fixo, ou seja, o comprimento de cada tipo / caractere é fixo, como a codificação ASCII de 8 bits de comprimento fixo. Conforme mostrado na figura, projetar 5 tipos de caracteres com codificação de comprimento fixo requer pelo menos 3 bits de comprimento de codificação. Na figura, cada folha de uma árvore binária completa com uma profundidade de 3 é um caractere, mas as 3 folhas restantes são desperdiçadas porque não são usadas.
Neste momento, o comprimento do caractere usado com mais frequência pode ser comprimido de 3 para 1. O significado disso é sacrificar o número de códigos sem sentido para salvar o comprimento dos códigos significativos. Uma árvore binária ótima é gerada após atribuir um comprimento de codificação de 1 bit ao caractere com a maior frequência de uso.
05
-
Codificação Huffman
Esta "codificação de árvore binária ideal" é na verdade um sinônimo de "codificação de Huffman". A codificação de Huffman é uma codificação de comprimento variável, ou seja , o comprimento de cada objeto de codificação é diferente, mas qualquer arranjo e combinação não causará ambigüidade . Mas o custo de mudar da codificação de comprimento fixo para a codificação de comprimento variável é: aumento do volume (perda da profundidade total das folhas). Portanto, quando a frequência de uso de todos os objetos é constante (ou a frequência é imprevisível), é mais eficiente usar a codificação de comprimento fixo, que significa " um determinado perímetro e a maior área quadrada ".
Obviamente, o algoritmo de geração da própria árvore de Huffman é baseado na frequência de uso de diferentes objetos, da folha à raiz da árvore, de modo que a árvore binária é ótima e os detalhes do algoritmo são omitidos.
<Para ser continuado>
Prévia do próximo episódio: "Procurando os limites da serialização"