Huffman Encoding
Υπάρχει ένας έξυπνος αλγόριθμος συμπίεσης κειμένου που ονομάζεται κωδικοποίηση Huffman και σχεδιάστηκε από τον David Huffman το 1952.
Η βασική ιδέα είναι ότι κάθε χαρακτήρας συνδέεται με μια δυαδική ακολουθία (δηλαδή μια ακολουθία από και ). Αυτές οι δυαδικές ακολουθίες ικανοποιούν την prefix-free ιδιότητα: μια δυαδική ακολουθία για έναν χαρακτήρα δεν είναι ποτέ πρόθεμα(prefix) της δυαδικής ακολουθίας ενός άλλου χαρακτήρα.
Αξίζει να σημειωθεί ότι για να κατασκευάσετε μια δυαδική ακολουθία prefix-free, απλά τοποθετήστε τους χαρακτήρες ως φύλλα ενός δυαδικού δέντρου και χαρακτηρίστε την "αριστερή" ακμή με και τη "δεξιά" ακμή με . Το μονοπάτι από τη ρίζα σε έναν κόμβο φύλλου αποτελεί τον κώδικα για τον χαρακτήρα σε αυτόν τον κόμβο φύλλου. Για παράδειγμα, το ακόλουθο δυαδικό δέντρο συγκροτεί μια prefix-free δυαδική ακολουθία για τους χαρακτήρες {, , , , }:
Δηλαδή, το κωδικοποιείται ως , το κωδικοποιείται ως , το κωδικοποιείται ως , το κωδικοποιείται ως και το κωδικοποιείται ως .
Το πλεονέκτημα ενός συνόλου κωδικοποιήσεων που έχουν την prefix-free ιδιότητα είναι ότι οποιαδήποτε ακολουθία αυτών των κωδικοποιήσεων μπορεί να αποκωδικοποιηθεί με μοναδικό τρόπο στους αρχικούς χαρακτήρες.
Η δουλειά σας είναι να διαβάσετε μια κωδικοποίηση Huffman (δηλ. ένα σύνολο χαρακτήρων και σχετικών δυαδικών ακολουθιών) μαζί με μια δυαδική ακολουθία και να αποκωδικοποιήσετε τη δυαδική ακολουθία στην αναπαράσταση των χαρακτήρων της.
Είσοδος
Η πρώτη γραμμή της εισόδου θα είναι ένας ακέραιος αριθμός , που αντιπροσωπεύει τον αριθμό των χαρακτήρων και σχετικών κωδικοποιήσεων. Οι επόμενες γραμμές περιέχουν έναν χαρακτήρα η καθεμία, ακολουθούμενο από ένα κενό διάστημα, ακολουθούμενο από τη δυαδική ακολουθία (μήκους το πολύ ) που αντιπροσωπεύει την σχετική κωδικοποίηση αυτού του χαρακτήρα. Μπορείτε να υποθέσετε ότι ο χαρακτήρας είναι χαρακτήρας του αλφαβήτου (δηλαδή, 'a'...'z' και 'A'...'Z'). Μπορείτε να υποθέσετε ότι η ακολουθία των δυαδικών κωδικοποιήσεων έχει την prefix-free ιδιότητα. Στην -οστή γραμμή είναι η δυαδική ακολουθία που πρέπει να αποκωδικοποιηθεί. Μπορείτε να υποθέσετε ότι η δυαδική ακολουθία περιέχει κωδικοποιήσεις που σχετίζονται με τους δεδομένους χαρακτήρες και ότι η -οστή γραμμή δεν περιέχει περισσότερα από δυαδικά ψηφία.
Έξοδος
Σε μία γραμμή, να εξάγετε τους χαρακτήρες που αντιστοιχούν στη δεδομένη δυαδική ακολουθία.
Παράδειγμα
input
5
A 00
B 01
C 10
D 110
E 111
00000101111
output
AABBE
Comments