[Off] Compactaзгo de dados
#1

Nunca vi nenhum plugin ou tуpico a respeito.

Bem, compactaзгo de dados й um assunto bastante difнcil, mas nunca vi ninguйm ter a ideia de fazer algumas funзхes para isto.


Pensando assim, resolvi criar um sistema simples de compactaзгo de dados que funciona com nъmeros de 0 a 65025



pawn Код:
#define USE_UTF8 false

readCompactValue() {

    new File:gFile = fopen("file.txt", io_readwrite ), c, d;

    c = fgetchar(gFile, 0, USE_UTF8);

    d = fgetchar(gFile, 1, USE_UTF8);

    fclose(gFile);

    return ~d ? c *0xff + d: c ;
}

saveCompactValue(value) {


    new File:gFile = fopen("file.txt", io_write);

    if(value > 254) {

        fputchar( gFile,    value / 0xff        , USE_UTF8 );

        fputchar( gFile,    value % 0xff            , USE_UTF8 );

    }
    else {
        fputchar( gFile,  value , USE_UTF8 );
    }

    fclose(gFile);

    return true;
}

Entao:

pawn Код:
saveCompactValue(63333);
printf("%d", readCompactValue());

Tб bem simples por enquanto, й sу uma demonstraзгo. Logo que aprimorar este sistema, irei colocar no IPSI



A economia de memуria й bastante alta com valores altos, veja o exemplo:



Sem compactaзгo:

pawn Код:
63333
5 x 4 = 20 bytes

com
pawn Код:
ш]
2 x 4 = 8 bytes


Uma economia de 60%
Reply
#2

Vix queria entender isso, mais Meu processador ( Cerйbro ) e muito lento :/
Reply
#3

Nem й tгo complicado, basicamente os arquivos aceitam caracteres, que tem valor de 0 a 255. Porem, se armazenar 255 vai gastar 3 caracteres, entao ao inves disto eu apenas armazeno um caractere com valor 255. Ocupando 1 caractere de valor 255.

Para nъmeros maiores que 255, eu tirei o resto sobre 255, e quando vou carregar esses valores apenas multiplico por 255 acrйscimo do resto para equivaler os dados.
Reply
#4

Eu tou fazendo algumas atualizaзхes na iBits, que somou ideias desse tipo, depois te mostro.
Reply
#5

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Eu tou fazendo algumas atualizaзхes na iBits, que somou ideias desse tipo, depois te mostro.
Eu jб pretendo fazer um sistema para salvar dados em iBits depois.
Reply
#6

Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
Eu jб pretendo fazer um sistema para salvar dados em iBits depois.
Muito bom
Reply
#7

pawn Код:
ш]
que isto significa?
Reply
#8

Quote:
Originally Posted by PT
Посмотреть сообщение
pawn Код:
ш]
que isto significa?
Й o dado compactado em 60%
Reply
#9

Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
Й o dado compactado em 60%
tem alguma tabela de referencia pra se ver isso?
Reply
#10

Quote:
Originally Posted by PT
Посмотреть сообщение
tem alguma tabela de referencia pra se ver isso?
Nгo sгo dados para leitura humana, nгo tenho tabela, porque fiz usando um calculo.

Mas basicamente й:


AB


A tem valor 65
B tem valor 66

entгo eu multiplico primeiro elemento 65 * 255 e acresco o segundo, 66.

ou 16575 + 66 = 16641

Logo AB = 16641

Aqui os valores decimais:
http://pt.wikipedia.org/wiki/ASCII


Й tudo na base 0xff (255).


Obrigado
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)