Jump to content


Photo

Codificacao Aritmetica


  • Faça o login para participar
Nenhuma resposta neste tópico

#1 sayroz

sayroz

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Masculino
  • Localidade:Regiao dos lagos

Posted 24/11/2010, 20:20

Galera,

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 ) );





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq