Les Snippets

Connexion

huffman : arbre et chaine de binaire

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 15/03/2008 18:45:04 et initié par coucou747 [Liste]
Vue : 4245
Catégorie(s) : Compression & Split, Maths, Algorithme, Chaîne de caractères
Langages dispo pour ce code :
- Java
- ObjectiveCaml
- C
- Voir tous les langages pour ce code snippet



Langage : ObjectiveCaml
Date ajout : 15/03/2008
Posté par coucou747 [Liste]
let ( @@ ) f g x = f (g x);;
type lettre = {l:char; f:int;};;
type huff = Feuille of lettre | Branche of huff * huff;;
type huffL = huff list;;
type binarySeg = bool list;;
let rec count = function
| Feuille l -> l.f
| Branche (h1, h2) -> count h1 + count h2;;
let rec getFC = function
| Feuille l -> l.l
| Branche (h1, h2) -> getFC h1;;
let cmp f h1 h2 =((f h1) < (f h2));;
let insert cmp huff huffL=
let rec insert acc = function
| [] -> List.rev (huff::acc)
| hd::lt -> if cmp huff hd
    then List.rev_append acc (huff::hd::lt)
    else insert (hd::acc) lt
in insert [] huffL;;
let string2huffL cmp str =
    let strget=String.get str
    in let rec f acc = function n -> if n = -1 then acc
    else f (insert cmp (Feuille({l=strget n;f=1})) acc) (n-1)
    in f [] ((String.length str)-1);;
let grouper fa fb = match (fa, fb) with
    | (Feuille la, Feuille lb) ->
        (if la.l = lb.l then Feuille ({l=la.l;f=la.f + lb.f})
        else Branche (fa, fb))
    | _ -> Branche (fa, fb);;
let grouperL cmp grouper2 liste=
let rec f acc = function
| [] -> acc
| hd1::hd2::lt ->
    if (getFC hd1) = (getFC hd2)
    then f acc ((grouper2 hd1 hd2)::lt)
    else f (insert cmp hd1 acc) (hd2::lt)
| hd1::[] -> insert cmp hd1 acc
in f [] liste;;
let rec grouperA cmp = function
| hd::[] -> hd
| hd1::hd2::lt -> grouperA cmp ( insert cmp (grouper hd1 hd2) lt)
| _ -> failwith "?? grouperA ??";;
let getArbreForString chaine =
    grouperA (cmp count) (grouperL (cmp count) grouper
    (string2huffL (cmp (int_of_char @@ getFC)) chaine)) ;;
let getBinarySeq arbre c =
    let rec f = function
    | Branche (ba, bb) ->
        let (boola, seq)= f ba in
        if boola
            then (boola, true::seq)
            else
                let (boolb, seq)= f bb
                in (boolb, false::seq)
    | Feuille (fa) -> (fa.l=c, [])
    in f arbre;;

Remarque :
pour tester :
let arbre = getArbreForString "test ok arbre test";;
getBinarySeq arbre 't';;

c'est l'equivalent de ce que j'avais dans la classe Main en java.

Snippets en rapport avec : Compression, Binaire, Huffman, Arbre



Codes sources en rapport avec : Compression, Binaire, Huffman, Arbre

{PHP} PHP5 CLASSE ARBRE INVERSÉ (HUFFMAN) COMPRESSION DECOMPRESSION
Ce script de compression-décompression créé une arborescence (treeItems)en partant des feuilles et n...

{JAVA / J2EE} CODAGE ET ARBRE DE HUFFMAN (COMPRESSION, AFFICHAGE DE L'ARBRE, INTERFACE GRAPHIQUE...)
Ce code pemert d'encoder les données sous la forme d'une chaîne de caractères. Le principe...

{C / C++ / C++.NET} LZZ HUFFMAN COMPRESSION
facile a utiliser pour compresser les fichier ou un buffer on ini au debut CLzhCompress *G; ...

{C / C++ / C++.NET} [C / WIN32] COMPRESSION HUFFMAN
Je cherchais depuis un moment un algo huffman facile a utiliser et j'ai fini par trouver mon bonheur...

{Delphi} HUFFMAN ADAPTATIF
Exemple de Compression / Decompression avec l'algorythme Huffman Adaptatif en Trubo Pascal......

{Delphi} HUFFMAN
Exemple de Compression / Decompression avec l'algorythme Huffman en Trubo Pascal......

{PHP} EVALUER UNE EXPRESSION MATHEMATIQUE, UTILISATION D'UN ARBRE BINAIRE
Suite a de nombreuses sources sur ce sujet, j'ai ete attriste de voir sur sur phpcs, on ne trouvait ...

{C# / C#.NET} PRIORITY QUEUE
Priority Queue C# J'imagine que tout le monde connait la class Queue du framework qui permet de f...

{Visual Basic, VB6, VB.NET, VB 2005} .NET ALGO HUFFMAN RLE MTF
Il y a 1 ans j'ai essayé de me lancer dans la compression des données mais sans succès, aujourd'hui...

{JAVA / J2EE} TRI DE LIST EN UTILISANT LES ABR
Bonne classe BinaryTree pour la manip des arbres binaires de recherches(fonctionnalités de base). c...