نمایش نتایج 1 تا 7 از 7

نام تاپیک: الگوریتم هافمن

  1. #1

    الگوریتم هافمن

    با سلام.
    من میخوام از این الگوریتم برای فشرده سازی استفاده کنم.
    برای تشکیل درخت هافمن روش ساده چیه؟ و برای ذخیره درخت در اول فایل فشرده شده چه راهی رو پیشنهاد میکنید؟
    در ضمن کدی که بصورت بیتی از درخت بدست میاد را در رجیستر ذخیره کرد و در اون بیتها حرکت کرد.
    با تشکر.

  2. #2
    قبلا در این باره بحث شده.

  3. #3
    درسته ولی سوال من چیز دیگه ایه.
    سوال من روش درست کردن درخته . من تو این موندم که چه جوری با تعدادی برگ یک درخت درست کنم.
    چون این مسله فرق داره.
    ممنون میشم اگه منو راهنمایی کنید.

  4. #4
    به یاد ایام قدیم، امشب می شینم و دوباره این تیکه الگوریتم هافمن رو پیاده می کنم. منتظر باش.

  5. #5
    مواظب باش: تست نشده. اما فکر کنم به خوبی منطق کار رو نشونت بده.
    type
    TCharData=record
    Quentity:largeint;
    Used:boolean;
    end;

    CharsData=array[char] of TCharData;

    PTreeNode=^TTreeNode;
    TTreeNode=record
    Big,Small:PTreeNode;
    Idx:integer;
    SigmaQ:largeint;
    end;

    .
    .
    .

    function MakeTree(ABig,ASmall:PTreeNode):PT reeNode;
    (******************************)
    function NewNode(ABig,ASmall:PTreeNode;AIdx:int eger;Q:largeint):PTreeNode;
    var
    P:PTreeNode;
    begin
    new(P);
    with P^ do begin
    Big:=ABig;
    Small:=ASmall;
    AIdx:=Idx;
    SigmaQ:=Q;
    end;
    NewNode:=P;
    end;
    (******************************)
    function FindLessQ:integer;
    var
    i:integer;
    ch:char;
    begin
    i:=-1;
    for ch:=#0 to #255 do
    if not CharsData[ch].Used then
    if i=-1 then i:=integer(ch) else
    if CharsData[ch].Quentity<CharsData[ch ar(i)].Quentity then i:=integer(ch);

    if i<>-1 then CharsData[char(i)].Used:=true;
    FindLessQ:=i;
    end;
    (******************************)
    procedure Swap(var a,b:PTreeNode);
    var
    c:PTreeNode;
    begin
    c:=a;
    a:=b;
    b:=c;
    end;
    (******************************)
    var
    i:integer;
    P1,P2,P3:PTreeNode;
    begin
    if ABig=nil then begin
    i:=FindLessQ;
    P2:=NewNode(nil,nil,i,CharsData[char&# 40;i)].Quentity);

    i:=FindLessQ;
    P1:=NewNode(nil,nil,i,CharsData[char&# 40;i)].Quentity);

    MakeTree:=MakeTree(P1,P2);
    end else begin
    P1:=ABig;
    P2:=ASmall;
    i:=FindLessQ;
    if i=-1 then MakeTree:=NewNode(P1,P2,-1,P1^.Quentity+P2^.Quentity)
    else begin
    P3:=NewNode(nil,nil,i,CharsData[char&# 40;i)].Quentity);

    if P3^.Quentity>P2^.Quentity then Swap(P2,P3);
    if P2^.Quentity>P1^.Quentity then Swap(P2,P1);

    MakeTree:=MakeTree(NewNode(P1,P2,-1,P1^.Quentity+P2^.Quentity),P3);
    end;
    end;
    end;

    .
    .
    .
    .

    //main prog

    var
    TreeRoot:PTreeNode;
    .
    .
    begin
    {initialization CharsData[aaa] with
    Used:=Tree and Quentity:=frequence of using aaa character in file}
    .
    .
    .
    TreeRoot:=MakeTree(nil,nil);
    .
    .
    .
    end.

  6. #6
    سلام
    دست شما در د نکنه .اگه امکان داره یه مقدار پیاز داغشو بیشتر کن تا استادم اشکش درد بیاد

  7. #7
    از کتاب ساختمان داده جعفر نژاد استفاده کن اگه از اون چیزی فهمیدی منو راهنمایی کن

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •