Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Java e problema con algoritmo LZW

    CIao a tutti, sono qui a sottoporvi un problema che mi attanaglia riguardo l'implementazione dell' algoritmo di compressione / decompressione LZW.

    Tale programma prende in ingresso un file di testo, lo comprime con tale algoritmo e ne restituisce un file di testo compresso. Poi, successivamente, riprende quest' ultimo file e lo decomprime per controllare che le azioni di compressione / decompressione non portino a una perdita di informazioni.

    Ora, il codice l'ho già implementato e funziona, il problema nasce quando inizializzo il dizionario, il quale mi crea un array di 256 elementi che dovrebbe contenere i 256 caratteri dell' ASCII esteso. Per meglio dire, lui crea in maniera corretta i primi 127 elementi e i restanti sono simboli errati ergo, se letti dal file di testo, mi restiuisce in uscita una variabile null che blocca il programma.

    Ora, secondo me il problema nasce dal tipo di charset usato, ma non riesco a capire come posso risolverlo. Ringrazio chiunque voglia darmi un aiuto a capire come uscire da questa cosa.

    Per programmare sono sotto ambiente mac osx 10.9 e uso semplicemente un editor di testo per fare il programma e la riga di comando da terminale per compilare ed eseguire. Non è richiesto l'implementazione di grafica.

    Grazie a tutti quelli che vorranno aiutarmi

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da xarisaris Visualizza il messaggio
    riprende quest' ultimo file e lo decomprime per controllare che le azioni di compressione / decompressione non portino a una perdita di informazioni.
    LZW per definizione è lossless, ovvero non "perde" informazioni. Se dovesse perdere qualcosa .... è perché l'hai implementato male tu.

    Quote Originariamente inviata da xarisaris Visualizza il messaggio
    Ora, il codice l'ho già implementato e funziona, il problema nasce quando inizializzo il dizionario, il quale mi crea un array di 256 elementi che dovrebbe contenere i 256 caratteri dell' ASCII esteso. Per meglio dire, lui crea in maniera corretta i primi 127 elementi e i restanti sono simboli errati ergo, se letti dal file di testo, mi restiuisce in uscita una variabile null che blocca il programma.

    Ora, secondo me il problema nasce dal tipo di charset usato
    Più che in termini di caratteri, sarebbe forse meglio ragionare in termini di byte. Questo infatti è l'uso e approccio tipico di LZW, ovvero comprimere sequenze di byte.
    Poi certo, da stringa a sequenza di byte e viceversa centra il charset .... ma è un altro discorso a parte.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    LZW per definizione è lossless, ovvero non "perde" informazioni. Se dovesse perdere qualcosa .... è perché l'hai implementato male tu.


    Più che in termini di caratteri, sarebbe forse meglio ragionare in termini di byte. Questo infatti è l'uso e approccio tipico di LZW, ovvero comprimere sequenze di byte.
    Poi certo, da stringa a sequenza di byte e viceversa centra il charset .... ma è un altro discorso a parte.
    Che LZW sia lossless è risaputo, il problema è che quando in pasto al programma gli do una qualsiasi stringa NON contenente caratteri che ricadono nella tabella ascii nell' intervallo 128,...,255, allora il programma funziona perfettamente.

    Infatti, se costruisco un programma che non fa nient'altro che trasformare una variabile int nel suo corrispondente carattere ascii e inserirli in un opportuno array e visualizzarli a video, i primi 128 valori sono uguali ai caratteri della tabella ascii, i restanti, fino a 255 sono simboli e caratteri che non c'entrano per nulla con tale tabella. Ed è qui che non so più dove sbattere la testa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.