Нужен декодировщик к хаффману срочно

Тема в разделе "Java", создана пользователем Yunnii, 14 дек 2007.

  1. Yunnii

    Yunnii Гость

    кодируется этим методом, выводит в файл. Этот файл-входные данные для декодера, помогите плиз с ним!!!!!!!!!
    Код (Text):
    var str="aaaaaabbbbbbbbhhhffffssc";//вводим строку не больше 25 символов
    var alfavit = new Array();
    var shift = "a".charCodeAt(0);
    var num = str.length;

    WScript.Echo("Input text: " + str);

    for (var i=0;i<26;i++) alfavit[i]=0;

    for (var i=0;i<num;i++)
    {
    alfavit[str.charCodeAt(i)-shift]++;// считаем частоту, для экономии памяти вычитаем код буквы а

    }


    var a = new Array();
    var b = new Array();
    var r = new Array();
    WScript.Echo("Chastota");
    for (var i=0; i<26; i++ )
    { r.push("");
    if (alfavit[i]!=0) //если символы(буквы) не кончились
    {
    a.push(alfavit[i]); //заводим массив частот
    b.push(String.fromCharCode(i+shift)); //соответствующий символ
    WScript.Echo(b[b.length-1]," was ",alfavit[i]," mal"); // строим таблицу частоты
    }  
    }            

    var min0,min1;//строим дерево
    while (a.length > 1) // пока есть какой-нибудь элемент
    {
    min0 = 0;// фиксирует на каком месте наименее встречающийся элемент,
    for (var i=0; i<a.length; i++)
    if (a[i]<a[min0]) min0=i;
    if (min0==0) min1=1;
    else min1=0;//второй по редкости элемент
    for (var i=0; i<a.length; i++)
    if ((a[i]<a[min1]) && (i!=min0)) min1=i;

    for (var i=0;i<b[min0].length; i++)

    r[ b[min0].charCodeAt(i)-shift ] = "0" + r[ b[min0].charCodeAt(i)-shift ];
    for (var i=0;i<b[min1].length; i++)
    r[ b[min1].charCodeAt(i)-shift ] = "1" + r[ b[min1].charCodeAt(i)-shift ]; 

    a[min1] += a[min0];
    a.splice(min0,1);
    b[min1] += b[min0];
    b.splice(min0,1);  
    }

    WScript.Echo( "\nHuffman's table");
    for (var i=0; i<26; i++)
    if (alfavit[i]!=0) WScript.Echo ( String.fromCharCode(i + shift)," ",r[i]);

    WScript.Echo( "\nEncoded text");  
    for (var i=0; i<str.length; i++)
    if (alfavit[i]!=0) WScript.Echo(r[i]);
     
Загрузка...

Поделиться этой страницей