====== Trabalho II: Correção de Erros ====== ==== Motivação ==== Bits podem ser muito voláteis. Em primeiro momento essa afirmação pode parecer um pouco estranha, porém quanto mais distante da CPU, maior é a probabilidade que erros acontecerem no transporte de informação. Inúmeros fatores podem influenciar na probabilidade de o valor de um bit ser perdido ou modificado, a tecnologia de codificação, o meio em que o bit será transportado, a distância entre a origem e o destino, fatores naturais como raios cósmicos também podem ser culpados pela troca do valor dentro de uma mensagem. Se pensarmos sem muita atenção, o problema de um bit ser trocado dentro de uma mensagem pode parecer algo insignificante. Porém, pensando sobre a lógica do mundo moderno em que não apenas computadores se utilizam da rede para comunicação, mas também carros em alta velociade, sistemas de segurança, e robôs em cirurgias milimétricas, um único bit pode ser a diferença entre a vida e a morte de um grande número de pessoas. ==== Desafio ==== Diante disso, cabe a você estudante de computação apresentar não só uma forma de detectar que se aconteceu algum erro entre a mensagem que foi enviada e a que foi recebida pelo destino, mas também apresentar uma forma de corrigir (dentro dos limites do algoritmo escolhido) a mensagem recebida sem que seja necessário o reevio da mensagem completa. ==== Requisitos ==== * Cabe ao estudante apresentar um algoritmo de detecção de erro e um algoritmo de correção de erros. * Os algoritmos podem ser implementados dentro do trabalho I, ou de forma independente. * Caso seja escolhido implementar de forma independente, a linguagem da implementação pode ser escolhida pelos alunos * O trabalho precisa ser versionado e estar disponível em alguma ferramenta que utilize git (recomenda-se o [[https://gitlab.c3sl.ufpr.br/|GitLab do C3SL]]) * Quaisquer escolhas feitas pelos alunos deverão ser explicadas durante a apresentação do trabalho. * Valor: **1,0**. ==== Exemplos de algoritmo de detecção de erro ==== * [[https://en.wikipedia.org/wiki/Parity_bit| Paridade]] * [[https://en.wikipedia.org/wiki/Checksum| Checksum]] * [[https://en.wikipedia.org/wiki/Cyclic_redundancy_check#Implementations| Cyclic redundancy check (CRC)]] * [[https://en.wikipedia.org/wiki/Hamming_code| Hamming code]] ==== Exemplos de algoritmo de correção de erro ==== * [[https://en.wikipedia.org/wiki/Convolutional_code|Binary Convolution]] * [[https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction|Reed - Solomon]] * [[https://en.wikipedia.org/wiki/Low-density_parity-check_code|Low-Density Parity]] * [[https://en.wikipedia.org/wiki/Multidimensional_parity-check_code|Multidimensional parity-check]] * [[https://en.wikipedia.org/wiki/Turbo_code|Turbo code]] * [[https://en.wikipedia.org/wiki/Linear_network_coding|linear Network Coding]] ==== Informação Nerd Extra ==== Caso tenha gostado dessa área de tranferência de informações recomendo a leitura um pouco mais aprofundada da [[https://en.wikipedia.org/wiki/Information_theory|Teoria da informação]] e também do [[https://en.wikipedia.org/wiki/Noisy-channel_coding_theorem|Noisy-channel coding theorem]]. A Teoria da informação de Shannon é uma grande norteadora para tudo que temos na área de comunicações hoje, acredito que a título de conhecimento a leitura seja extremamente válida. Para aqueles com preferência em consumo por outras mídias recomendo o podcast do Scicast falando sobre o assunto [[https://podcasts.google.com/feed/aHR0cHM6Ly93d3cuZGV2aWFudGUuY29tLmJyL3BvZGNhc3RzL3NjaWNhc3QvZmVlZC8/episode/aHR0cHM6Ly93d3cuZGV2aWFudGUuY29tLmJyLz9wPTQyMDI1?hl=en-BR&ved=2ahUKEwj6pMT9h_L7AhX5rJUCHYagDfQQjrkEegQIBhAF&ep=6|Teorema de Shannon (SciCast #398)]]