سورس الگوریتم فشرده سازی هافمن به زبان C
در این بخش سورس الگوریتم فشرده سازی هافمن به زبان C را برای شما آماده کرده ایم که با استفاده از نرم افزار DevC++ با زبان برنامه نویسی C نوشته شده است. در ادامه می توانید توضیحات، تصاویر و همچنین فیلمی از نحوه اجرا شدن پروژه را مشاهده کنید.
توضیحات پروژه
در این پروژه بعد از اجرا شدن برنامه، آدرس فایلی که اطلاعات در آن قرار دارد از کاربر گرفته می شود و سپس نتیجه فشرده سازی در صفحه نمایش چاپ می شود.
برای درک روش عملکرد الگوریتم هافن، فرض کنید می خواهیم تکه اطلاعات زیر را فشرده کنیم:
1 | ACDABA |
در عبارت فوق ما 6 کاراکتر داریم که هر کاراکتر 1 بایت حافظه می گیرد (در کل 48 بیت). بر اساس الگوریتم هافمن، عبارت فوق برای پیدا شدن کاراکتری که بیشتر از همه تکرار شده است، جستجو می شود (که در عبارت فوق کاراکتر A است) و سپس یک درخت بوجود می آید که کاراکترها را با رشته بیت های کوتاه تر جایگزین می کند. در این حالت از جدول جایگزینی زیر استفاده می شود:
1 | A=0 , B=10 , C=110 , D=111 |
اگر از کد فوق به منظور فشرده سازی فایل استفاده کنیم، حاصل کار به شکل زیر خواهد بود:
1 | 01101110100 |
که به معنی مصرف شدن 11 بیت به جای 48 بیت است.
قسمت های از سورس کد
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> struct treenode{ int data; int num; treenode *next; treenode *right; treenode *left; }*start=NULL,*end=NULL,*p; struct code{ char bcode[12]; int ch; }coding[256]; struct tree{ int data; int num; }atree[512]; int o=0; int search(int i); void insert(int i); void insertm(struct treenode *l); void sort(); void create(); void binary(struct treenode *n,char byte[],int i); void tree(struct treenode *n,int i); int numnode=0; int numchar=0; char filename[25]; void main() { clrscr(); FILE *fp1; printf("n Enter The Location And Name Of The Source File To Compress : "); scanf("%s",&filename); fp1=fopen(filename,"r+b"); if (fp1==NULL) { printf("n Error In Open File..."); getch(); exit(1); } int i=getc(fp1); while (i!=-1) { numchar++; if (search(i)==-1) insert(i); i=getc(fp1); } fclose(fp1); sort(); create(); char byte[20]={0}; binary(start,byte,0); tree(start,1); getch(); } |
هیچ نظری ثبت نشده است