Olá amigos, tudo bem com vocês?

Chegou a hora de prosseguirmos no assunto que comecei a abordar lá no artigo de Janelas Deslizantes Parte 1 (caso não tenha lido, recomendo ir lá dar uma olhada nele para facilitar o entendimento do que vou discutir abaixo)

De volta para a biblioteca

Vamos imaginar que você está na mesma biblioteca do primeiro artigo e se depara com o anúncio de uma promoção inusitada: “Qualquer sequência de 3 volumes de uma determinada enciclopédia X, sairá pelo preço de um volume só“.

Biblioteca

Imagem de uma biblioteca por dentro

Cada volume desta enciclopédia X tem a seguinte quantidade de páginas:

Volume 1 100 Páginas
Volume 2 30 Páginas
Volume 3 50 Páginas
Volume 4 200 Páginas
Volume 5 10 Páginas
Volume 6 20 Páginas

Dado que todos os volumes têm o mesmo valor financeiro, podemos concluir que é uma grande vantagem adquirir os volumes 2, 3 e 4  uma vez que eles possuem a maior quantidade total de páginas somadas (30 + 50 + 200 = 280 páginas).

Perceba que para um total de 6 volumes, o trabalho de somar os subconjuntos de 3 livros não chega a ser muito exaustivo. Basta realizar inicialmente a soma das páginas dos volumes 01, 02 e 03 repetir essa operação para os volumes 02, 03 e 04 e assim sucessivamente.

Contudo, para processar uma quantidade maior de itens (300 volumes por exemplo) esta operação poderia se tornar um pouco mais complexa e novamente a estratégia de usar um computador com um algoritmo eficiente surge como uma boa alternativa.

O grande diferencial do Algoritmo de Janelas Deslizantes Fixas é que ao invés de somar os 3 elementos da próxima subsequência, ele poupa trabalho ao simplesmente extrair o primeiro elemento da subsequência atual e somar o da próxima.

Basicamente estamos trocando a soma de subsequências, por apenas duas operações (uma soma e uma subtração).

Explicando com números

Vejamos em detalhes, para melhorar o entendimento:

A soma de 100 + 30 + 50 páginas é igual a 180, correto?

Janela Fixa

Conjunto de 3 números sinalizados pela cor verde em diferentes momentos

Se somarmos a este resultado mais 200 paginas (do primeiro volume da próxima subsequência) e removermos 100 páginas (do primeiro volume da subsequência atual) o resultado será de 280 páginas.

180 + 200 – 100 =  280 páginas. Mesmo valor valor encontrado na soma de 30 + 50 + 200.

Visualmente seria como andar entre os números com uma marcação fixa.

Num conjunto de dados mais extenso, com subsequências maiores, essa compensação de esforço é bastante perceptível.

Conclusão

Embora a ideia por trás desse algoritmo (que alguns consideram apenas uma técnica) possa parecer simples, ela oferece uma solução elegante e eficiente para realizar “deslocamentos” em conjuntos de dados durante diferentes tipos de análise.

O algoritmo de compressão de dados LZ77, que monta um dicionário para encontrar padrões num conjunto de bytes, é um exemplo de implementação que utiliza a técnica de Sliding Window Fixa em sua essência.

Caso queira mais detalhes sobre ele, recomendo esse vídeo abaixo:

Além disso, ele também é aplicado em sistemas das áreas de Finanças, Monitoramento de redes, Processamento de sinais…entre outros.

Espero que este artigo tenha sido útil para você. Um abraço e obrigado pela leitura.

Referências

https://www.freecodecamp.org/news/sliding-window-technique/

https://www.devzery.com/post/sliding-window

https://www.geeksforgeeks.org/window-sliding-technique/