Vou direto ao ponto.
codificar uma "string" ou um arquivo, usando o algoritmo de codificação aritmetica.
nesse http://pt.wikipedia.......aritmética/ tem o codigo incrementado em python ea pagina explica de uma forma um tanto complicada o algoritmo. estou fazendo em php obv.
resumidamente o objetivo do algoritmo é achar a qtde de cada caracter dentro da string e a sua frequencia relativa, em relação ao total de caracter.
com isso fazer uma faixa de 0 a 1 e conseguir os intervalos dos caracter de acordo com a sua frequencia. apos construir os interva-los é só ir recalculando de acordo com a imagens abaixo ate todos os caracteres estiverem codificados.
http://uploaddeimage.../26Capturar.JPG
enfim, eu já achei as frequencias, mas não consigo retirar os dados da funcao frequencia para manipula-los, tentei usar o array_map ao invés do array_walk mas não to sabendo usa-lo. alguém pode dedicar um tempinho para resolver esse algoritmo? ou quem tiver ele pronto (PHP) para eu me basea-lo.
<?php $conteudo = file_get_contents("criptografia/teste.txt","r"); $caracteres += strlen($conteudo); echo "Caracteres: " . $caracteres ."<br />"; function frequencia( $qtde , $char , $qtde_total ) { // printf( "A letra <strong>%c</strong> apareceu <strong>%d</strong> ou <strong>%.04f</strong> do total de <strong>%d</strong>\n<br />", $char , $qtde , $qtde / $qtde_total , $qtde_total ); $valor = $qtde / $qtde_total; $contagem[] = array ($char , $valor , $qtde_total); print_r($contagem); return $contagem; // É DESSE VETOR QUE PRECISO TIRAR DE DENTRO DESSA FUNÇÃO, PARA CONSTRUIR OS INTERVALOS EM OUTRA FUNCAO } $arr = count_chars( preg_replace( '/\W/', '', strtolower( $conteudo ) ), 1 ); array_walk( $arr, 'frequencia', strlen( $conteudo ) );