Lay (LZW) é um algoritmo de compressão de dados sem perdas, desenvolvido por Abraham Lempel e Jacob Ziv em 1984. 🏵 A sigla "Lay" significa "Lempel-Ziv-Welch", em homenagem a seu criador e o cientista de computação Terry Welch, que desenvolveu uma 🏵 implementação eficiente do algoritmo.

O algoritmo funciona construindo uma tabela de cadeias de caracteres à medida que lê a entrada. Inicialmente, 🏵 a tabela contém apenas as cadeias de caracteres vazias e os caracteres individuais. Para cada caractere lido, o algoritmo procura 🏵 a cadeia de caracteres mais longa na tabela que é um prefixo da cadeia de entrada atual e em seguida, 🏵 emite a próxima entrada como um par (comprimento da cadeia prefixo, novo caractere). Em seguida, a tabela é atualizada adicionando 🏵 a nova cadeia de caracteres formada pelo prefixo e o novo caractere.

O processo continua até que a entrada seja esgotada, 🏵 momento em que o algoritmo emite o último par e termina. O resultado é uma sequência de pares (comprimento, caractere) 🏵 que representam a entrada original comprimida.

A descompressão funciona basicamente da mesma forma, construindo a tabela à medida que lê a 🏵 entrada. Inicialmente, a tabela contém apenas as cadeias de caracteres vazias e os caracteres individuais. Para cada par (comprimento, caractere) 🏵 lido, o algoritmo constrói a cadeia de caracteres prefixada pelo comprimento lido e adiciona o caractere ao final da cadeia. 🏵 Em seguida, a tabela é atualizada adicionando a nova cadeia de caracteres formada.