Agora vem o X da questão!!!Fabio914 escreveu:Realmente, não é nada otimizado se escrever todo um texto para representar cada setor, linha e vértice... Por exemplo, cada caractere tem tamanho de 1 byte, para representarmos o numero 1000000 gastamos 7 bytes, o que, se armazenado em memória (formato inteiro), gastariamos 4 bytes [isto sem levar em conta o texto que indica a que se refere este 1000000]. Mas isso não impede que tenhamos uma boa compactação, como a tabela ASCII tem 256 posições (ou seja, limitada) , uma compactação eficiente seria indicar quantas vezes aparece determinado caractere (assim teríamos 256 valores armazenados) e a posição XY que ele aparece no texto a cada vez (mais alguns números por caractere). Algo mais eficiente ainda (algo semelhante ao feito por compactadores como ZIP e RAR) é pegar palavras (ou até frases inteiras) com muita incidência no texto (no nosso caso, todas as palavras da descrição dos linedefs, sidedefs, sectors, things e vertex) e marcar quantas vezes estas se repetem (muitas vezes!) e armazenar a posição desta no texto. Assim não precisamos armazenar a mesma informação repetidas vezes, poupando memória...
Um exemplo:
O texto:Pode ser armazenado como (obs.: palavra seguida da incidência) :Código: Selecionar todos
vertex { // ID = 1 x=100.00; y=200.00; } vertex { // ID = 2 x=120.10; y=210.20; }
(mais a informação da posição de cada um)Código: Selecionar todos
vertex 2 ID = 2 1 5 2 5 x= 2 y= 2 { 2 } 2 0. 4 0; 4 // 2
Assim da pra se ter uma boa compactação de texto...
Será que usando a tabela UNICODE o resultado não seria mais eficiente!?
Acredito que sim, já que o UNICODE consegue representar uma quantidade incrivelmente maior de caracteres em relação a tabela ASCII.