Huffman Compression Version 0.1

Όπως είχα πει και παλιότερα, ετοιμάζω ένα πρόγραμμα για συμπίεση δεδομένων με τον αλγόριθμο Huffman. Το project τελείωσε εδώ και καιρό, αλλά τώρα βρήκα το χρόνο να το ανεβάσω για οποίον ενδιαφερόμενο.

Μερικές πληροφορίες σχετικά με το πρόγραμμα.

Το πρόγραμμα χρησιμοποιεί standard βιβλιοθήκες πράγμα που το κάνει να τρέχει (λογικά) σε όλα τα λειτουργικά συστήματα. Είναι γραμμένο σε ANSI C και δεν βγάζει κανένα Warning κατά το Compilation. Η βιβλιοθήκες που χρησιμοποιεί είναι τρεις, stdio.h stdlib.h time.h. Για την δημιουργία του Huffman Tree χρησιμοποιείται ένας σταθερός πινάκας από δομές πράγμα που σημαίνει οτι δεν υπάρχει πρόβλημα από memory leaks. Το περιβάλλον που χρησιμοποιήθηκε για την ανάπτυξη της εφαρμογής είναι το Code::Blocks στο λειτουργικό σύστημα Ubuntu Linux.

Η Εφαρμογή μπορεί να συμπιέζει μεγάλα αρχεία όλων των ειδών όπως κείμενα, εικόνες, βίντεο, binary κτλ. Μεγαλύτερο Compression Ratio πετυχαίνει σε αρχεία κειμένου.

Η εφαρμογή διατίθεται κάτω απο την GPL κυρίως για εκπαιδευτικούς λογούς.

-Ίσως στο μέλλον η εφαρμογή βελτιωθεί σε πολλά σημεία όπως είναι η χρήση linked lists, και νημάτων. Εαν γίνει κάτι τέτοιο θα χρησιμοποιηθούν pthreads, άρα η εφαρμογή θα τρέχει μόνο σε Linux.

DOWNLOAD:

Huffman Compression Version 0.1 (ZIP)

5 Responses

  1. Δημήτρης Says:

    Καλησπέρα, υπάρχει μήπως, διαθέσιμο το documentation του κώδικα;

  2. Άγγελος Βεγλεκτσής Says:

    Οχι, δεν εχω καποιο documentation, αλλα αν σε ενδιαφερει τοτε να κατσω να φτιαξω κατι σαν μικρο turorial.

  3. Δημήτρης Says:

    Καλησπέρα και Χρόνια Πολλά,
    ένα tutorial του κώδικα θα ήταν χρήσιμο για κάποιον που θέλει να μελετήσει τον κώδικα. Ιδιαίτερα εμένα θα με ενδιέφερε ο χειρισμός bits κατά την συμπίεση και την αποσυμπείση.

  4. life24 Says:

    Ο ΚΩΔΙΚΑΣ ΣΟΥ ΑΓΓΕΛΕ ΕΙΝΑΙ ΑΡΚΕΤΑ ΚΑΛΟΣ.Άγγελε είδα το κώδικα για την συμπίεση αλλά δεν είναι αυτό που ψάχνω. Περιληπτικά αυτό που θέλω είναι ένα πρόγραμμα σε C, που θα κάνει τα πιο κάτω:
    1-υπολογισμός πιθανοτήτων
    2-δημιουργία δένδρου Huffman
    3-κωδικοποίηση αρχείου
    4-αποκωδικοποίηση αρχείου
    Αναλυτικά:
    1-πρέπει να έχω μια εντολή $huffman -p sample.txt probfile.txt όπου -p το όρισμα για τις πιθανότητες των χαρακτήρων, sample.txt έστω ένα μεγάλο αρχείο κειμένου και probfile.txt το αποτέλεσμα του προγράμματος για τους 128 χαρακτήρες ASCII.
    2-για το δένδρο Huffman, πρέπει να εκτυπώνει στην οθόνη τους κωδικούς των χαρακτήρων ASCII(32-126) και να τυπώνει σε ένα αρχείο codes.txt τους κωδικούς των χαρακτήρων ASCII (0-127).
    3-μια τυπική εντολή τύπου: $huffman -e probfile.txt data.txt data.txt.enc για να κωδικοποιεί το αρχείο κειμένου.
    4-αντίστοιχα για την αποκωδικοποίηση: $huffman -d probfile.txt data.txt.enc data.txt.new

    Αυτό είναι όλο το project, δεν ξέρω αν μπορείς να με βοηθήσεις. Πάντως η βοήθειά σου θα μου είναι πολύτιμη.

  5. Άγγελος Βεγλεκτσής Says:

    Καλησπερα

    i)Θα προσπαθησω μετα την εξεταστικη μου να βελτιωσω το προγραμμα με τετοιο τροπο ετσι ωστε να ειναι πιο ευκολο ως προς την μελετη του κωδικα.

    ii)(life24) - Αυτο που ζητας ειναι αναγκαιο να γινει για να παραχθει ενα δεντρο huffman(πιθανοτητες κτλ). Απλα αυτα δεν παρουσιαζονται στην οθονη του υπολογιστη.

    Μπορεις να δημιουργησεις μια συναρτηση που να εξαγει απο τον πινακα πιθανοτητων τις τιμες και να τις εμφανιζει στην οθονη.

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.