درخت www.snrzvi.ir ۱۳۹۵ سید ناصر رضوی
فهرست مطالب 2 درختها درختهای دودویی پیادهسازی درختها
درخت 3 برای انتزاعی مدل یک درخت. نمایش ساختارهای سلسله مراتبی. Computrs R Us Sls Mnuturin R&D US Intrntionl Lptops Dsktops Europ Asi Cn
درخت 4 در علوم محاسباتی درخت یک مدل انتزاعی برای نمایش ساختارهای سلسلهمراتبی است. یک درخت شامل گرههایی است که بین آنها روابط پدر- فرزندی برقرار است )ساختار غیر خطی( به جز باالترین عنصر )ریشه( هر عنصر دقیقا یک پدر دارد. همچنین هر عنصر در درخت میتواند صفر یا چند فرزند داشته باشد. مثال یک معروف. شجره نامه های خانوادگی برخی از کاربردها. چارتهای سازمانی سیستمهای فایل محیطهای برنامهنویسی
اصطالحات و تعاریف 5 والد بدون گره ریشه. )A( A گره داخلی. گرهای که حداقل یک فرزند دارد. (F,A),B,C برگ. ]گره خارجی[ گره بدون فرزند. K) (D, E, G, H, I, J, B C D گرههای هم نیا. گرههایی که والد یکسان دارند. (K,I),J عمق گره. طول مسیر از ریشه تا آن گره. E F G H... ارتفاع اجداد درخت. حداکثر عمق گرهها در درخت. یک گره. پدر پدر بزرگ پدر پدر بزرگ و I J K... و فرزند فرزند فرزند گره. یک نسلهای
تعریف رسمی درخت )تعریف بازگشتی( 6 درخت. یک مجموعهی محدود از گرهها با ویژگیهای زیر است: اگر تهی نباشد دارای یک گره خاص به نام ریشه است. سایر گرهها به مجموعهها خود یک k 0 مجموعهی مجزا درخت هستند. مانند... T 2 T 1 [ 1 T 2 T... و T k را و T k تقسیم میشوند به گونهای زیردرختهای ریشه مینامیم[ این از یک هر که r T 1 T 2 T k
کاربرد درخت ها 7 نمایش ساختار کتاب. یک Book Pr Prt A Prt B Rrns Ch. 1 Ch. 5 Ch. 6 Ch. 9 S. 1.1 S. 1.4 S. 5.1 S. 5.7 S. 6.1 S. 6.5 S. 9.1 S. 9.6
کاربرد درخت ها 8 نمایش ساختار یک سیستم فایل.
درخت مرتب 9 درخت مرتب. یک درخت مرتب است اگر به ازای هر گره یک ترتیب خطی بر روی فرزندان گره تعریف شده باشد. آن در یک درخت مرتب میتوان به فرزندان یک گره به صورت فرزند اول فرزند دوم و... ارجاع نمود. در درختهای مرتب فرزندان یک گره بر اساس ترتیبی که دارند از چپ به راست قرار داده میشوند.. مثال. شجره نامه های خانوادگی درخت های و مربوط به ساختار کتاب ها
روشهای پیمایش درخت 10 r T 1 T 2 T k Prorr(T) : r, Pr(T 1 ), Pr(T 2 ),, Pr(T k ) Inorr(T) : In(T 1 ), r, In(T 2 ),, In(T k ) Postorr(T) : Post(T 1 ), Post(T 2 ),, Post(T k ), r
مثال: پیمایش پیش ترتیب 11 T 1 i j l T 4 h k T 2 T 3 Prorr: h i k j l T 1 T 2 T 3 T 4
مثال: پیمایش میان ترتیب 12 T 1 i j l T 4 h k T 2 T 3 Inorr: h k i j l T 1 T 2 T 3 T 4
مثال: پیمایش پس ترتیب 13 T 1 i j l T 4 h k T 2 T 3 Postorr: h k i j l T 1 T 2 T 3 T 4
پیمایش پیش ترتیب درخت عمومی 14 puli Itrl<Itm> prorr() Quu<Itm> q = nw Quu<Itm>(); prorr(root, q); rturn q; puli voi prorr(no x, Quu<Itm> q) q.nquu( x.itm ); No y = x.lm; whil (y!= null) prorr(y, q); y = y.rs; privt lss No privt Itm itm; privt No prnt; privt No lm; privt No rs;
پیمایش میان ترتیب عمومی درخت )غیر بازگشتی( 15 puli voi inorr(no x, Quu<Itm> q) No y = x.lm; i (y!= null) inorr(y, q); q.nquu(x.itm); y = y.rs; whil (y!= null) inorr(y, q); y = y.rs; ls q.nquu(x.itm);
پیمایش پس ترتیب درخت عمومی 16 puli Itrl<Itm> postorr() Quu<Itm> q = nw Quu<Itm>(); postorr(root, q); rturn q; puli voi postorr(no x, Quu<Itm> q) No y = x.lm; whil (y!= null) postorr(y, q); y = y.rs; q.nquu(x.itm);
پیاده سازی درخت عمومی )روش بد( 17 پیاده سازی گره ها. یک فیلد برای ذخیرهی اطالعات )برچسب( k فیلد اشارهگر برای ذخیرهی آدرس فرزندان itm Chil 1 Chil 2 Chil 3 Chil k n * k n 1 ایراد روش این پیاده سازی. تعداد کل فیلدهای اشارهگر به فرزندان: تعداد فیلدهای اشارهگر غیر پوچ: تعداد اشارهگر پوچ برابر است با: nk (n 1) = n (k 1) + 1
پیاده سازی چپ ترین فرزند-برادر راست (LMC-RSB) 18 است: آدرس فیلد دارای سه گره هر روش این در پدر آدرس ذخیره ی برای یکی ذخیره ی برای یکی آدرس چپ فرزند ترین راست برادر ترین نزدیک آدرس ذخیره ی برای یکی i j l LMC-RSB i j l h k h k
مثال: محاسبه ی گره های تعداد یک درخت LMC-RSB 19 puli int siz() rturn siz(root); privt int siz(no x) i (x == null) rturn 0; int ount = 1; No y = x.lm; whil (y!= null) ount += siz(y); y = y.rs; rturn ount;
مثال: محاسبه ی ارتفاع یک درخت LMC-RSB 20 puli int hiht() rturn hiht(root); privt int hiht(no x) i (x == null) rturn -1; int h = -1; No y = x.lm; whil (y!= null) h = Mth.mx(h, hiht(y)); y = y.rs; rturn 1 + h;
تمرین: محاسبه ی برگهای تعداد یک درخت LMC-RSB 21 puli int numlvs() rturn numlvs(root); privt int numlvs(no x)...
درخت دودویی
درخت دودویی )تعریف بازگشتی( 23 درخت دودویی. یا تهی است و یا حاوی مجموعهی محدودی از گرهها شامل دودویی است. این درختها زیردرختهای چپ و راست نامیده میشوند. درخت دو و ریشه r تفاوتهای درخت دودویی با درخت عمومی: درخت دودویی میتواند تهی باشد. در درخت دودویی ترتیب فرزندان اهمیت دارد. T l T r
خواص درخت های دودویی 24 ها گره تعداد حداکثر i با: است برابر ام در سطح 2 i 1 0 2 0 2 1 2 1 3 4 5 2 2 2 6 7 8 9 10 11 12 3 2 3 13 14 15 2 i : گره ها تعداد حداکثر با است برابر در سطح i 2 h + 1-1 : ارتفاع h با است برابر با دودویی درخت یک در گره ها تعداد حداکثر h n = 2 i = 2 0 + 2 1 + + 2 h = 2 h+1 1 i=0
نمایش درخت دودویی به وسیله ی آرایه 25 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 9 8 9 10 10 11 11 12 12 13 14 13 15 14 15 (i > 1) (2i n) (2i + 1 n) ریشه ۱ یک اگر پدر در خانه ی آن گره گره قرار در خانه i در خانه ی دارد. آنگاه: باشد ام Τ i 2 فرزند چپ 2i راست فرزند آن آن در خانه ی در خانه ی + 1 2i
نمایش درخت دودویی به وسیله آرایه 26 1 2 3 4 5 7 8 h 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 h
نمایش درخت دودویی به وسیله آرایه 27 1 درخت مورب راست 1 درخت مورب چپ 2 3 4 7 8 h 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 h
معایب پیاده سازی درخت دودویی به آرایه وسیله ی 28 اتالف حافظه. + 1 h خانه این روش فقط برای درختهای دودویی پر و تقریبا در بدترین حالت یک درخت مورب به ارتفاع h به استفاده میشود و بقیهی خانهها خالی میمانند. است. مناسب پر فقط تعداد این از که دارد نیاز خانه 2 h+1-1 کند بودن عمل درج و حذف. در این روش درج و حذف یک حذف میگردد. به جابجایی نیاز گره و درج عمل کندی باعث مسئله این که دارد دیگر گره های
پیاده سازی درخت دودویی به وسیله ی اشاره گر 29 تعریف جاوا. است. ریشه گره به ارجاع یک دودویی درخت privt lss No privt Itm itm; privt No lt, riht; puli No(Itm itm) this(itm, null, null); lt itm riht puli No(Itm itm, No lt, No riht) this.itm = itm; this.lt = lt; this.riht = riht;
پیمایش درخت دودویی پیمایش پیش ترتیب پیمایش میان ترتیب پیمایش پس ترتیب پیمایش به ترتیب سطح ترسیم درخت دودویی به کمک پیمایش های آن
روشهای پیمایش درخت دودویی 31 r T l T r Prorr(T) : r, prorr(t l ), prorr(t r ) Inorr(T) : inorr(t l ), r, inorr(t r ) Postorr(T) : postorr(t l ), postorr(t r ), r
مثال: پیمایش درخت دودویی 32 h prorr(t) :,,,,, h,, inorr(t) :,,,, h,,, postorr(t) :,, h,,,,,
پیمایش پیش ترتیب درخت دودویی 33 puli Itrl<Itm> prorr() Quu<Itm> q = nw Quu<Itm>(); prorr(root, q); rturn q; privt voi prorr(no x, Quu<Itm> q) i (x == null) rturn; q.nquu(x.itm); prorr(x.lt, q); prorr(x.riht, q);
پیمایش میان ترتیب درخت دودویی 34 puli Itrl<Itm> inorr() Quu<Itm> q = nw Quu<Itm>(); inorr(root, q); rturn q; privt voi inorr(no x, Quu<Itm> q) i (x == null) rturn; inorr(x.lt, q); q.nquu(x.itm); inorr(x.riht, q);
پیمایش پس ترتیب درخت دودویی 35 puli Itrl<Itm> postorr() Quu<Itm> q = nw Quu<Itm>(); postorr(root, q); rturn q; privt voi postorr(no x, Quu<Itm> q) i (x == null) rturn; postorr(x.lt, q); postorr(x.riht, q); q.nquu(x.itm);
پیمایش میان ترتیب درخت دودویی: غیربازگشتی 36 privt NR-Inorr(No x) Stk<No> s = nw Stk<No>(); ooln on = ls; whil (!on) whil (x!= null) s.push(x); x = x.lt; i (!s.isempty()) x = s.pop(); StOut.print(x.itm); x = x.riht; h ls on = tru;
پیمایش درخت دودویی به ترتیب سطح 37 privt voi lvlorr() i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); پیمایش به ترتیب سطح. 1 2 3 4 5 6 7 h 8
پیمایش درخت دودویی به ترتیب سطح 38 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); x whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); h
پیمایش درخت دودویی به ترتیب سطح 39 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) x No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); h
پیمایش درخت دودویی به ترتیب سطح 40 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) x No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); h
پیمایش درخت دودویی به ترتیب سطح 41 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); x i (x.riht!= null) q.nquu(x.riht); h
پیمایش درخت دودویی به ترتیب سطح 42 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); x i (x.riht!= null) q.nquu(x.riht); h
پیمایش درخت دودویی به ترتیب سطح 43 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); x i (x.riht!= null) q.nquu(x.riht); h h
پیمایش درخت دودویی به ترتیب سطح 44 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); x h h
پیمایش درخت دودویی به ترتیب سطح 45 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); h x h h
پیمایش درخت دودویی به ترتیب سطح 46 privt voi lvlorr() ترتیب سطح. به پیمایش i (isempty()) rturn; Quu<Itm> q = nw Quu<Itm>(); q.nquu(root); whil (!q.isempty()) No x = q.quu(); StOut.print(x.itm + ); i (x.lt!= null) q.nquu(x.lt); i (x.riht!= null) q.nquu(x.riht); h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 47 pr h in h h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 48 pr h in h h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 49 pr h in h h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 50 pr h in h h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 51 pr h in h h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 52 pr h in h h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 53 pr h in h h
مسئله: رسم درخت دودویی به کمک پیمایش های آن 54 pr h in h pos h h بنابراین با داشتن پیمایش Inorr و حداقل یکی از پیمایش های دیگر درخت دودویی قابل ترسیم است. Postorr Prorr پیمایش داشتن اما با و درخت دودویی به صورت یکتا قابل ترسیم نیست. چرا
مثال: کپی کردن یک درخت دودویی 55 puli BinryTr<Itm> opy() BinryTr<Itm> T = nw BinryTr<Itm>(); T.root = opy(root); rturn T; privt No opy(no x) i (x == null) rturn null; No y = nw No(x.itm); y.lt = opy(x.lt ); y.riht = opy(x.riht); rturn y;
تمرین 56 زیردرخت دو تساوی بررسی منظور به زیر به صورت تابعی دودویی بنویسید. privt ooln quls(no x, No y) تابعی به صورت چپ و راست آن زیر گره بنویسید به طوری که را با هم تعویض نماید. زیردرخت دو جای دودویی درخت در گره هر برای privt No swp(no x)
درخت نخی دودویی 57 انگیزه. استفاده ی فیلدهای از هوشمند پوچ. اشاره گر n + 1 n 1 در یک درخت دودویی با n گره 2n فیلد دارای مقدار پوچ هستند. که طوری به دارد وجود اشاره گر فیلد و پوچ غیر فیلد یک )در بعدی گره به می تواند پوچ فیلد هر پیمایش خاص( کند. اشاره T A B C D E F G H I
پیاده سازی درخت نخی دودویی 58 privt lss No privt Itm itm; privt No lt; privt No riht; privt ooln ltthr; privt ooln rihtthr;... lt itm riht
درخت عبارت
درخت عبارت 60 پرانتزی. کامال عبارت E ::= (α E) (E β E) ::= vril α ::= unry oprtor [~, lo, sin, os, ] β ::= inry oprtor [^,, /, +, -, ] مثال. ( ~ ( + ( ( / ) * ( ^ ) ) ) )
درخت عبارت 61 است. درخت از استفاده ریاضی عبارت یک برای مدل بهترین ~ + * ( ~ ( + ( ( / ) * ( ^ ) ) ) ) / ^ نکته. پیمایشهای پیشترتیب میانترتیب میانوندی و پسوندی عبارت هستند. پس ترتیب و فرمهای معادل ترتیب به عبارت درخت پیشوندی
تبدیل عبارت کامال پرانتزی به درخت عبارت 62 E.T. α α E 1 E.T. T 1 β E 1 β E 2 E.T. T 1 T 2
الگوریتم تبدیل عبارت کامال پرانتزی به درخت عبارت 63 privt No xprssiontr(strin[], int lo, int hi) i (lo == hi) rturn Nw No([lo]); ls i (unryops.ontins([lo + 1])) No x = nw No([lo + 1]); x.riht = xprssiontr(, lo + 2, hi - 1); rturn x; ls int k = mth(, lo + 1); No x = nw No([k + 1]); x.lt = xprssiontr(, lo + 1, k); x.riht = xprssiontr(, k + 2, hi 1); rturn x;
الگوریتم تبدیل عبارت کامال پرانتزی به درخت عبارت 64 privt int mth(strin[], int lo) int ount = 0; int j = lo; whil (tru) i ([j].quls( ( )) ount++; ls i ([j].quls( ) )) ount--; j++; i (ount == 0) rk; rturn j 1; 1 2 1 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ( ~ ( + ( ( / ) * ( ^ ) ) ) ) lo hi
حالت 2 65 ls i (unryops.ontins([lo + 1])) No x = nw No([lo + 1]); x.riht = xprssiontr(, lo + 2, hi - 1); rturn x; α T 1 lo lo+1 lo+2 hi-1 hi ( α E 1 )
حالت ۳ 66 ls int k = mth(, lo + 1); No x = nw No([k + 1]); x.lt = xprssiontr(, lo + 1, k); x.riht = xprssiontr(, k + 2, hi 1); rturn x; β T 1 T 2 lo lo+1 k k+1 k+2 hi-1 hi ( E 1 β E 2 )
تمرین: ایجاد درخت عبارت از روی فرم پسوندی 67 E.T. α E 1 α E.T. T 1 β E 1 E 2 β E.T. T 1 T 2
تبدیل درخت عبارت به فرم کامال پرانتزی 68 puli voi printinix(no x); i (unryops.ontins(x.itm)) StOut.print( ( + x.itm); printinix(x.riht); StOut.print( ) ); ls i (inryops.ontins(x.itm)) StOut.print( ( ); printinix(x.lt); StOut.print(x.itm); printinix(x.riht); StOut.print( ) ); ls StOut.print(x.itm);
الگوریتم فشرده سازی هافمن 69 مسئله. کاراکترها. از یک هر وقوع احتمال و کاراکتر تعدادی ورودی: کدهای خروجی: طوری به کاراکترها که ضریب فشرده سازی حداقل شود. اندازه فایل فشرده شده اندازه فایل اصلی = ضریب فشرده سازی مثال. کاراکتر 5 3 6 1 8 2 4 فراوانی
طرح اول برای کد گذاری: کد دودویی با طول ثابت 70 روش این در اگر n میدهیم: نسبت زیر ثابت با طول دودویی کد یک کدام هر به باشیم داشته مختلف کاراکتر کد دودویی با طول ۳ فراوانی کاراکتر 5 000 = طول کد l n + 1 3 001 6 010 محاسبه ی کد شده فایل اندازه ی [ رب بیت[: حسب 1 011 8 100 3 5 + 3 + 6 + 1 + 8 + 4 + 2 = 87 its 2 101 کلمه کد 4 110 کتاب کد
طرح دوم برای کد گذاری: کد دودویی با طول متغیر 71 برای کمتر با طول کد کلمات از استفاده انگیزه. دارند. بیشتری فراوانی که کاراکترهایی راه حل. استفاده از روش کدگذاری هافمن: مرحله ۱( به ازای هر کاراکتر یک درخت دودویی کاراکتر مربوطه قرار میدهیم. احتمال با برابر را درخت آن ریشه ی وزن و ایجاد گره ای تک 1 2 3 4 5 6 8
روش کد گذاری هافمن 72 n 1 مرحله 2( کن: تکرار بار را زیر عملیات هر بار دو درخت و T 1 T 2 را که ریشه آنها دارای کمترین وزنهای و w 1 w 2 یک درخت برابر با دودویی جدید ایجاد قرار میدهیم. چپ زیردرختان T 2 و T 1 که می کنیم هستند انتخاب میکنیم. و راست آن باشند و وزن ریشهی را آن w 1 + w 2 w 1 + w 2 w 1 w 2 T 1 T 2
روش کد گذاری هافمن: مرحله 2 73 1 2 3 4 5 6 8
روش کد گذاری هافمن: مرحله 2 74 3 3 4 5 6 8 1 2
روش کد گذاری هافمن: مرحله 2 75 6 4 5 6 8 3 3 1 2
روش کد گذاری هافمن: مرحله 2 76 4 5 6 6 8 3 3 1 2
روش کد گذاری هافمن: مرحله 2 77 9 6 6 8 4 5 3 3 1 2
روش کد گذاری هافمن: مرحله 2 78 6 6 8 9 3 3 4 5 1 2
روش کد گذاری هافمن: مرحله 2 79 12 8 9 6 6 4 5 3 3 1 2
روش کد گذاری هافمن: مرحله 2 80 8 9 12 4 5 6 6 3 3 1 2
روش کد گذاری هافمن: مرحله 2 81 17 12 8 9 6 6 4 5 3 3 1 2
روش کد گذاری هافمن: مرحله 2 82 12 17 6 6 8 9 3 3 4 5 1 2
روش کد گذاری هافمن: مرحله 2 83 29 12 17 6 6 8 9 3 3 4 5 1 2
و) روش کد گذاری هافمن 84 ۳( کاراکترها. کد تولید مرحله به شاخه های چپ به شاخه های و برچسب برعکس( یا برچسب راست می دهیم. 1 0 0 0 1 0 1 0 1 0 1 0 1 1 76 87 کد هافمن کاراکتر 111 001 01 0000 10 0001 110 ضریب فشرده سازی =
یک قضیه مرتبط 85 دارای برگ گره با کامل دودویی درخت یک قضیه. 1 n گره است. داخلی n n روی استقرا طریق از اثبات. ازای به استقرا پایه = 1 n است برقرار تعداد برگها: n تعداد گره های داخلی: - 1 n
یک قضیه مرتبط 86 دارای برگ گره با کامل دودویی درخت یک قضیه. 1 n گره است. داخلی n n روی استقرا طریق از اثبات. ازای به استقرا پایه = 1 n است برقرار تعداد برگها: + 1 n تعداد گره های داخلی: n
2 نکته در مورد روش کد گذاری هافمن 87 هافمن. کد بهینگی کدگذاری روش این با یعنی است بهینه هافمن روش ضریب فشرده سازی حداقل می شود. خاصیت پیشوندی. کدهای به دست آمده خاصیت پیشوندی دارند یعنی در کتاب کد هیچ کلمهی کدی پیشوند کلمهی کد دیگری نیست. در نتیجه رمزگشایی با یک بار پویش فایل رمز شده به سادگی قابل انجام است. مثال. رشته ی 0001111000010 رمزگشایی را نمایید.
رمزگشایی 88 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 1 1 0 0 0 0 1 0
پیاده سازی الگوریتم هافمن 89 الگوریتم تمرین. فشرده سازی پیاده سازی را هافمن نمایید. root wiht symol pro l lt riht prnt 1 2 1 2 1 2........................ n n 2n-1 FOREST ALPHABET TREE