Ho un modulo web, per il cui contenuto vorrei generare una breve rappresentazione in Base64. La forma, tra le altre cose, contiene un elenco di 264 valori binari, la maggior parte dei quali stanno per essere 0 in ogni singola volta. (Rappresentano regioni su una carta geografica). Anche in Base64, questo numero 264-bit genera una lunga stringa di intimidatorio. Voglio realizzare la codifica run-length, nel modo più efficiente possibile. Mi potete aiutare con questo Ive googled RLE binario, ma hanno trovato nulla di utilizzo. Che Ive provato fin - RLE esecuzione sulla stringa binaria usando conteggi decimali e A come un separatore denota un cambiamento tra 0 e 1, quindi convertendo il risultato dalla base 11 basare 64. Ad esempio: che a sua volta diventa suo meglio, ma io aiuto ancora cant ma dubito se sto facendo qualcosa di sbagliato - sta usando la cifra a come separatore è il modo migliore per farlo Grazie a comingstorm. Ho accorciato la stringa compresso un po '. Come ho già detto nei commenti, i casi di utilizzo reali sarebbero generalmente tradursi in una stringa ancora più breve. Dal momento che sei codifica bit, probabilmente si desidera utilizzare un po 'RLE-based al posto di un un byte-based. In questo contesto, si dovrebbe considerare Elias gamma di codifica (o qualche variante di esso) per codificare in modo efficiente le tirature. Un ragionevole prima approssimazione per il formato di codifica potrebbe essere: primo bit stesso come il primo bit della stringa non compresso (per impostare la polarità iniziale) rimanenti bit: lunghezze Elias codificate di piste bit successivi (alternando 1 e 0) Poiché si sa quanti bit sono nella stringa non compresso, non avete bisogno di un codice di terminazione si può semplicemente aggiungere qualsiasi necessaria imbottitura binario come bit arbitrari. Si noti che è sempre possibile per la compressione run-length per espandere la stringa di bit se siete preoccupati per questo, si può aggiungere un altro po 'prima per indicare se i dati sono in formato compresso o non compresso, limitando la testa di compressione a 1 bit. Suppose ci viene dato un file o un messaggio di origine che ha troppi caratteri ridondanti. Ad esempio, un file media di MS Word ha troppi caratteri consecutivi byte-255 e NULL. È possibile rappresentare questi byte consecutivi o corre in una forma più compatta Infatti, una tecnica di compressione è stato progettato per risolvere questo problema particolare. Si chiama Run-Length Encoding o RLE. Il suo nome descrive in modo accurato il processo perché esso codifica una serie di byte al seguente modulo 2 byte: lunghezza, con una lunghezza che rappresenta il numero di corse di un singolo byte e il che significa che siamo in grado di codificare fino a 255 corse consecutive. Questa tecnica è la più semplice delle tecniche di codifica run-length. A titolo di esempio, si consideri la seguente fonte di dati o una stringa di 24 lettere: String input. abbbbbbbbbbefffgggghhijk Per codificare la stringa sopra, il risultato sarebbe,,,,,,,, e. La forma totale compressa per questa sorgente si trova a soli 18 byte. Questo ci consente di risparmiare esattamente 6 byte, con un rapporto di compressione di 25. Tecnicamente, una lunghezza più byte potrebbe significare quanti segue, in modo da poter effettivamente registrare al massimo 256 byte: la bandiera byte di più i possibili 255 corse. Così, la lettera a sarebbe poi codificato come invece. Uno svantaggio di questo tipo di RLE è che se c'è solo un singolo byte per codificare, è necessario aggiungere un byte aggiuntivo per il byte di lunghezza, come quello nell'esempio precedente quando sono stati codificati le lettere A ed E. E 'bene pensare che ci sono solo alcune sezioni della sorgente dati che hanno queste corse. Anche se potremmo codificare solo 256 corse di un singolo byte, byte consecutivi più di 256 spesso non si verificano in maggior parte dei file che funziona perfettamente bene per i file con caratteri ridondanti abbastanza o byte. Siamo in grado di migliorare questa tecnica, limitando il codice di lunghezza di soli 4 bit. Con questa disposizione, siamo in grado di codificare solo un massimo di 16 piste di un byte, che è adeguata per la semplice compressione da file effettivi in genere non contengono troppi byte ridondanti. file di testo. Un modo per migliorare il metodo byte lunghezza è nella zona di compressione file di testo. Data la natura dei file di testo (ASCII), in cui i singoli byte può effettivamente essere codificati in soli 7 bit (cioè bit-7 o l'8 bit, di tutti i byte in un file di testo è 0), possiamo quindi usare bit - 7 come un segnale al decodificatore se un byte viene ripetuto o meno. Se c'è una corsa di un byte, si imposterà il byte bit-7 a 1. Così, se il decodificatore vede un byte che è maggiore di 127, significa soltanto che vi è un percorso di byte e il decoder prontamente scrivere quelli numero di byte. file binari. Un'altra forma intelligente di codifica run-length è codificare se e solo se vi è una corsa. Cioè, non mi codificare un byte aggiuntivo per un singolo byte non ridondante: codificare solo i byte ridondanti. Questo viene fatto codifica doppio byte e quindi codifica il byte di lunghezza: lunghezza. In questo modo, non comportano un byte di lunghezza per quei byte che si verificano solo in modo indipendente in un flusso di dati. Pertanto, nella fase di decompressione, la presenza di un byte doppia ci avverte che c'è esattamente una corsa di byte. Quindi, significa che ci sono 10 corse di byte b. Ne consegue che dovremmo quindi scrivere i successivi otto byte dopo i due. L'esempio precedente dovrebbe quindi essere codificato in questo modo: Questa codifica richiede solo 17 byte per l'uscita. Si noti che le lettere A ed E sono ormai codificati come è, con i singoli byte. Per i file di grandi dimensioni, questa tecnica è più potente della tecnica byte di lunghezza. Questo metodo può registrare al massimo 257 byte consecutivi (2 (0..255)). Un altro inconveniente incorriamo da questa nuova tecnica, tuttavia, è il simbolo aggiuntivo codificato. Se ci sono solo due corse di un simbolo, avremmo bisogno di un ulteriore byte, che codifica per la corsa con tre byte invece di soli due byte. In generale, tuttavia, questo è più efficace quando esaminiamo i dati come un singolo file di grandi dimensioni che possono naturalmente avere una serie di byte identici. RLE. ZIP - include le implementazioni C di run-length encoding per il testo e binari files. YES CHAR specifica che le osservazioni in un insieme di dati in uscita SAS di nuova creazione sono compressi (record di lunghezza variabile). SAS utilizza RLE (Run Length Encoding) per comprimere le osservazioni. Questo algoritmo di compressione è meglio per i dati di carattere. No Specifica che le osservazioni in un insieme di dati SAS di nuova creazione sono compressi (record a lunghezza fissa). Binarie, viene precisato che le osservazioni in un insieme di dati in uscita SAS appena creato sono compressi. SAS utilizza RDC (Ross Data Compression) per questa impostazione. Questo metodo è altamente efficace per comprimere medio-grandi (diverse centinaia di byte o più grandi) blocchi di dati binari (cioè, variabili numeriche). Poiché la funzione di compressione opera su un singolo disco alla volta, la lunghezza di registrazione deve essere diverse centinaia di byte o maggiore per compressione efficace. Specifica COMPRESS solo per insiemi di dati di uscita, cioè insiemi di dati denominato nell'istruzione DATA di un passo DATA o nell'opzione OUT di un procedimento SAS. Il tipo di record diventa un attributo permanente del set di dati. Per decomprimere osservazioni, utilizzare un passo DATA per copiare il set di dati e utilizzare COMPRESSNO per i nuovi set di dati. Quando COMPRESSYESCHAR, SAS comprime la dimensione del set di dati con codifica run-length. codifica Run-length comprime il set di dati, riducendo caratteri consecutivi ripetuti per due o tre rappresentazioni byte. Quando la compressione COMPRESSBINARY, SAS combina run-length encoding e la compressione finestra scorrevole per comprimere il set di dati. Utilizzare SASToolkit per specificare il proprio metodo di compressione. Nota: La compressione di osservazioni non è supportata da tutti i motori. Nella versione 8, i set di dati creati con i motori che erano disponibili nelle versioni precedenti di SAS, come ad esempio i motori di nastro e xport, sono ancora accessibili da tali motori. Pertanto, se la compressione non era disponibile per i motori, ma è anche non è disponibile quando si accede a questi insiemi di dati nella versione 8. I vantaggi ottenuti utilizzando l'opzione di set di dati COMPRESS includono: requisiti di archiviazione ridotte per i set di dati meno operazioni di input e output necessario per leggere o scrivere i dati impostati durante la lavorazione. Gli svantaggi di usare l'opzione di set di dati COMPRESS includono: non può comprimere affatto (può effettivamente rendere il file più grande), ma è previsto un messaggio in dettaglio la quantità di compressione sono necessari più risorse della CPU. Per impostazione predefinita, le nuove osservazioni sono aggiunti alla serie di dati compressi esistenti. Se si desidera tenere traccia e riutilizzare lo spazio libero, utilizzare i dati REUSE opzione impostata quando si crea un set di dati SAS compressa. REUSEYES dice SAS di scrivere nuove osservazioni per lo spazio che viene liberata quando si eliminano altre osservazioni. L'opzione set di dati COMPRESS sostituisce l'opzione del sistema COMPRESS. PRESTAZIONI NOTA: L'utilizzo di questa opzione aumenta il tempo di CPU per la lettura di una serie di dati a causa del sovraccarico di decomprimere il record. Inoltre, alcuni motori non supportano la compressione di osservazioni. Quando si utilizza COMPRESSYES e impostazioni delle opzioni REUSEYES, osservazioni non possono essere affrontati in base al numero di osservazione. Si noti che REUSEYES ha la precedenza sulla POINTOBSYES. Per esempio: i risultati in un insieme di dati che ha POINTOBSNO. Perché POINTOBSYES è l'impostazione predefinita quando si utilizza la compressione, REUSEYES provoca POINTOBS per passare alla NO.
No comments:
Post a Comment