1 00:00:00,000 --> 00:00:02,210 [Powered by Google Translate] [Walkthrough - تنظیم مشکل 6] 2 00:00:02,210 --> 00:00:04,810 [Zamyla چان - دانشگاه هاروارد 3 00:00:04,810 --> 00:00:07,240 [این CS50 است. - CS50.TV] 4 00:00:07,240 --> 00:00:12,180 >> خوش آمدید، هر کس، و به Walkthrough 6 خوش آمدید: پف Huff'n. 5 00:00:12,180 --> 00:00:17,440 پف Huff'n چیزی است که ما در حال انجام است که رفتن به خرید و فروش با یک فایل فشرده هافمن 6 00:00:17,440 --> 00:00:20,740 و پس از آن puffing آن را به بالا، پس از آن به RPA، 7 00:00:20,740 --> 00:00:25,810 به طوری که ما می توانیم از 0s و 1S که کاربر می فرستد تماس با ما ترجمه 8 00:00:25,810 --> 00:00:30,660 و آن را تبدیل به متن اصلی است. 9 00:00:30,660 --> 00:00:34,360 Pset 6 است که برای رفتن به خیلی سرد است دلیل این که شما در حال رفتن به برخی از این ابزارها 10 00:00:34,360 --> 00:00:41,730 که شما در pset 4 و pset 5 و نوع ترکیب آنها را به 1 مفهوم بسیار شسته و رفته استفاده می شود 11 00:00:41,730 --> 00:00:43,830 هنگامی که شما در مورد آن فکر می کنم. 12 00:00:43,830 --> 00:00:50,110 >> همچنین، مسلما، pset 4 و 5 psets ترین چالش برانگیز است که ما تا به حال ارائه شد. 13 00:00:50,110 --> 00:00:53,950 بنابراین در حال حاضر، ما در این pset 1 بیشتر در C، 14 00:00:53,950 --> 00:00:56,480 و سپس بعد از آن ما به برنامه نویسی وب هستید. 15 00:00:56,480 --> 00:01:02,310 پس خودتان را برای گرفتن بیش از سخت ترین برآمدگی در CS50 تبریک می گویم. 16 00:01:03,630 --> 00:01:09,760 >> حرکت برای پف Huff'n، جعبه ابزار ما برای این pset در حال رفتن به درختان هافمن، 17 00:01:09,760 --> 00:01:14,700 پس با شناخت نه تنها چگونه کار درخت دودویی بلکه به طور خاص درخت هافمن، 18 00:01:14,700 --> 00:01:16,240 چگونه آنها ساخته شده است. 19 00:01:16,240 --> 00:01:20,210 و پس از آن ما در حال رفتن به یک مقدار زیادی از کد توزیع در این pset، 20 00:01:20,210 --> 00:01:22,480 و ما آمده است که در واقع برای دیدن برخی از کد 21 00:01:22,480 --> 00:01:24,670 ما نمی ممکن است قادر به درک کامل هنوز، 22 00:01:24,670 --> 00:01:30,080 و بنابراین کسانی خواهد بود. فایل های C، اما بعد از آن همراه خود را به فایل های ساعت 23 00:01:30,080 --> 00:01:34,300 ما به اندازه کافی درک است که ما نیاز داریم به طوری که ما می دانیم که چگونه این توابع کار 24 00:01:34,300 --> 00:01:38,100 و یا حداقل آنچه که در حال قرار است برای انجام این کار - ورودی و خروجی خود را - 25 00:01:38,100 --> 00:01:40,760 حتی اگر ما نمی دانیم که چه چیزی اتفاق می افتد در جعبه سیاه و سفید 26 00:01:40,760 --> 00:01:44,090 یا نمی فهمید چه اتفاقی می افتد در جعبه سیاه در داخل. 27 00:01:44,090 --> 00:01:49,400 و سپس در نهایت، به طور معمول، ما در حال برخورد با ساختارهای داده ای جدید، 28 00:01:49,400 --> 00:01:51,840 انواع خاصی از گره هایی که اشاره به بعضی چیزها، 29 00:01:51,840 --> 00:01:56,080 و بنابراین در اینجا با داشتن یک قلم و کاغذ نه تنها برای فرایند طراحی 30 00:01:56,080 --> 00:01:58,470 و هنگامی که شما در حال تلاش برای کشف کردن چگونه pset شما باید کار کند 31 00:01:58,470 --> 00:02:00,520 اما در هنگام اشکال زدایی. 32 00:02:00,520 --> 00:02:06,140 شما می توانید با GDB در کنار قلم و کاغذ خود را در حالی که شما را آنچه ارزش داشته باشد، 33 00:02:06,140 --> 00:02:09,320 که در آن فلش خود را با اشاره، و چیزهایی شبیه به آن است. 34 00:02:09,320 --> 00:02:13,720 >> ابتدا اجازه دهید نگاهی به درخت هافمن. 35 00:02:13,720 --> 00:02:19,600 درخت هافمن درخت دودویی هستند، به این معنی است که هر گره تنها دارای 2 فرزند است. 36 00:02:19,600 --> 00:02:24,870 در درخت هافمن مشخصه این است که ارزشهای شایع ترین 37 00:02:24,870 --> 00:02:27,140 بدترین بیت نشان داده شده است. 38 00:02:27,140 --> 00:02:32,690 ما در مثال سخنرانی از کد مورس، نوع تثبیت برخی از حروف را دیدم. 39 00:02:32,690 --> 00:02:38,030 اگر شما در حال تلاش برای ترجمه و یا E، به عنوان مثال، 40 00:02:38,030 --> 00:02:43,940 شما در حال ترجمه است که اغلب، بنابراین به جای نیاز به استفاده از مجموعه ای کامل از بیت 41 00:02:43,940 --> 00:02:48,640 اختصاص داده شده که نوع داده به طور معمول، شما آن را به کمتر فشرده، 42 00:02:48,640 --> 00:02:53,730 و سپس آن دسته از حروف که نشان داده در موارد کمتری با بیت های دیگر 43 00:02:53,730 --> 00:02:59,840 چرا که شما می توانید هنگامی که وزن شما از فرکانس است که این نامه به نظر می رسد را تقبل کنند. 44 00:02:59,840 --> 00:03:03,020 ما باید همان ایده در اینجا در درخت هافمن 45 00:03:03,020 --> 00:03:12,360 جایی که ما در حال ساخت یک زنجیره، یک نوع راه را برای رسیدن به شخصیت های خاصی است. 46 00:03:12,360 --> 00:03:14,470 و سپس نویسه هایی که بیشترین فراوانی 47 00:03:14,470 --> 00:03:17,940 در حال رفتن به بدترین بیت نشان داده می شود. 48 00:03:17,940 --> 00:03:22,020 >> راهی که شما ساخت یک درخت هافمن 49 00:03:22,020 --> 00:03:27,430 با قرار دادن همه کاراکترهایی که در متن ظاهر می شود 50 00:03:27,430 --> 00:03:30,630 و محاسبه فرکانس خود را، چگونه اغلب آنها ظاهر می شود. 51 00:03:30,630 --> 00:03:33,880 این هم می تواند یک تعداد از چند بار این نامه به نظر می رسد 52 00:03:33,880 --> 00:03:40,270 یا شاید یک درصد از همه شخصیت که چگونه بسیاری از هر یک از آنها به نظر می رسد. 53 00:03:40,270 --> 00:03:44,270 و بنابراین، آنچه شما باید انجام دهید این است هنگامی که شما همه که از نقشه برداری، 54 00:03:44,270 --> 00:03:49,060 پس از آن شما برای 2 فرکانس پایین ترین نگاه کنید و سپس آنها را به عنوان خواهر و برادر 55 00:03:49,060 --> 00:03:55,660 پس از آن که در آن گره پدر و مادر دارای یک فرکانس است که مجموع آن 2 فرزند می باشد. 56 00:03:55,660 --> 00:04:00,870 و سپس شما را توسط کنوانسیون می گویند که گره سمت چپ، 57 00:04:00,870 --> 00:04:03,770 شما به دنبال که به دنبال شاخه 0 58 00:04:03,770 --> 00:04:08,140 و پس از آن گره سمت راست شعبه 1 است. 59 00:04:08,140 --> 00:04:16,040 همانطور که در کد مورس را دیدم، مارپیچ بود که اگر شما تا به حال فقط یک بوق و بوق 60 00:04:16,040 --> 00:04:18,120 آن مبهم بود. 61 00:04:18,120 --> 00:04:22,430 آن چه می تواند 1 نامه باشد و یا می تواند آن را به یک دنباله از 2 حرف باشد. 62 00:04:22,430 --> 00:04:27,790 و بنابراین، آنچه هافمن درختان می کند به دلیل طبیعت از شخصیت 63 00:04:27,790 --> 00:04:34,140 یا نهایی ما شخصیت های واقعی بودن گره های گذشته در شعبه - 64 00:04:34,140 --> 00:04:39,300 ما به کسانی که به عنوان برگ - موجب می تواند وجود ندارد ابهام 65 00:04:39,300 --> 00:04:45,160 در شرایط که نامه شما در حال تلاش برای با مجموعه ای از بیت رمزگذاری 66 00:04:45,160 --> 00:04:50,670 چرا که هیچ جا در کنار بیت است که نشان دهنده 1 حرف 67 00:04:50,670 --> 00:04:55,960 نامه دیگری به شما روبرو می شوند، وجود خواهد داشت و نه هیچ سردرگمی وجود دارد. 68 00:04:55,960 --> 00:04:58,430 اما ما به نمونه هایی که شما بچه ها در واقع می توانید ببینید که 69 00:04:58,430 --> 00:05:02,120 به جای ارتباط با ما فقط به شما می گویم که درست است. 70 00:05:02,120 --> 00:05:06,390 >> اجازه دهید نگاهی به یک مثال ساده از یک درخت هافمن. 71 00:05:06,390 --> 00:05:09,380 من یک رشته است که 12 حرف طولانی. 72 00:05:09,380 --> 00:05:14,010 من 4، 6 BS، و 2 CS. 73 00:05:14,010 --> 00:05:17,270 اولین قدم من این است که به دفعات مشاهده شده است. 74 00:05:17,270 --> 00:05:20,760 چند بار می کند به نظر می رسد؟ به نظر می رسد 4 بار در رشته. 75 00:05:20,760 --> 00:05:25,060 B به نظر می رسد 6 بار، و C به نظر می رسد 2 بار. 76 00:05:25,060 --> 00:05:28,970 طبیعتا، من قصد دارم برای گفتن من با استفاده از B در اغلب موارد، 77 00:05:28,970 --> 00:05:35,970 بنابراین من می خواهم به نمایندگی از B با بدترین تعداد بیت، کمترین تعداد از 0s و 1S. 78 00:05:35,970 --> 00:05:42,600 و پس از آن من هم انتظار می رود بیشترین میزان و از 0s و 1S C که به عنوان خوبی است. 79 00:05:42,600 --> 00:05:48,550 نخست آنچه که من در اینجا این است که من آنها را به ترتیب صعودی به ترتیب از نظر فرکانس قرار می گیرد. 80 00:05:48,550 --> 00:05:52,710 ما می بینیم که C و، هستند کسانی که ما 2 پایین ترین فرکانس. 81 00:05:52,710 --> 00:06:00,290 ایجاد می کنیم یک گره پدر و مادر، و گره پدر و مادر نامه ای در ارتباط با آن را ندارد، 82 00:06:00,290 --> 00:06:05,070 اما آن را نشانی از یک فرکانس است، که مجموع. 83 00:06:05,070 --> 00:06:08,780 حاصل جمع 2 + 4، 6 است می شود. 84 00:06:08,780 --> 00:06:10,800 سپس شاخه سمت چپ را دنبال می کنیم. 85 00:06:10,800 --> 00:06:14,970 اگر ما در آن گره 6، پس از آن ما را به 0 تا رسیدن به C به دنبال 86 00:06:14,970 --> 00:06:17,450 و 1 به A. 87 00:06:17,450 --> 00:06:20,300 بنابراین در حال حاضر ما 2 گره. 88 00:06:20,300 --> 00:06:23,920 ما ارزش 6 و پس از آن ما نیز یکی دیگر از گره با مقدار 6. 89 00:06:23,920 --> 00:06:28,550 و به این ترتیب که 2 نه تنها کمترین 2 اما فقط 2 که در سمت چپ، 90 00:06:28,550 --> 00:06:33,820 بنابراین کسانی که توسط یکی دیگر از پدر و مادر به ما بپیوندند، با مجموع 12. 91 00:06:33,820 --> 00:06:36,300 بنابراین در اینجا ما باید درخت ما هافمن 92 00:06:36,300 --> 00:06:40,020 که در آن به B، که فقط بیت 1 باشد 93 00:06:40,020 --> 00:06:45,430 و پس از آن برای رسیدن به ما می 01 و و سپس C با داشتن 00. 94 00:06:45,430 --> 00:06:51,300 بنابراین در اینجا ما می بینیم که اساسا ما به نمایندگی از این کاراکتر یا 1 یا 2 بیت 95 00:06:51,300 --> 00:06:55,160 که در آن B، همانطور که پیش بینی شده، حداقل است. 96 00:06:55,160 --> 00:07:01,730 و پس از آن ما C که بیشتر بود، اما از آنجا که چنین کوچک درخت هافمن، 97 00:07:01,730 --> 00:07:06,020 پس از آن نیز با 2 بیت به عنوان مخالف به جایی در وسط نشان داده شده است. 98 00:07:07,820 --> 00:07:11,070 >> فقط به بیش از یکی دیگر از مثال های ساده از درخت هافمن، 99 00:07:11,070 --> 00:07:19,570 می گویند شما باید رشته "سلام." 100 00:07:19,570 --> 00:07:25,360 چیزی که شما باید انجام دهید این است که در ابتدا به شما می گویند که چگونه بسیاری از H در این به نظر می رسد؟ 101 00:07:25,360 --> 00:07:34,200 H به نظر می رسد یک بار و پس از آن E به نظر می رسد ما یک بار و پس از آن ظاهر می شود دو برابر L است 102 00:07:34,200 --> 00:07:36,580 و O یک بار ظاهر می شود. 103 00:07:36,580 --> 00:07:44,310 و تا بعد ما انتظار داریم که نامه ای به حداقل تعداد بیت های نشان داده شده است؟ 104 00:07:44,310 --> 00:07:47,450 [دانشجوی] L. ل. >> آره. ل درست است. 105 00:07:47,450 --> 00:07:50,730 ما انتظار داریم که L با حداقل تعداد بیت نشان داده می شود 106 00:07:50,730 --> 00:07:55,890 به خاطر ل مورد استفاده در رشته "سلام." 107 00:07:55,890 --> 00:08:04,280 آنچه من قصد دارم برای انجام این کار در حال حاضر قرعه کشی از این گره است. 108 00:08:04,280 --> 00:08:15,580 من 1 است که H، و پس از آن یکی دیگر از 1، است که E، و پس از آن 1، است که O - 109 00:08:15,580 --> 00:08:23,410 در حال حاضر من آنها را با قرار دادن در دستور - و پس از آن 2، است که ل. 110 00:08:23,410 --> 00:08:32,799 من می گویم که من برای ساخت یک درخت هافمن برای پیدا کردن 2 گره با حداقل فرکانس 111 00:08:32,799 --> 00:08:38,010 و آنها را خواهر و برادر را با ایجاد یک گره پدر و مادر است. 112 00:08:38,010 --> 00:08:41,850 در اینجا ما 3 گره با کمترین فرکانس. آنها به همه 1. 113 00:08:41,850 --> 00:08:50,620 بنابراین در اینجا ما را انتخاب کنید که یکی از ما در حال رفتن به اولین لینک است. 114 00:08:50,620 --> 00:08:54,850 بیایید می گویند H و E را انتخاب کنید. 115 00:08:54,850 --> 00:09:01,150 مجموع 1 + 1 است 2، اما این گره می کند، نامه ای در ارتباط با آن را ندارد. 116 00:09:01,150 --> 00:09:04,440 این فقط دارای ارزش است. 117 00:09:04,440 --> 00:09:10,950 در حال حاضر ما در 2 بعدی کمترین فرکانس را نگاه کنید. 118 00:09:10,950 --> 00:09:15,590 که 2 و 1 است. که می تواند یا از آن 2 است، اما من قصد دارم به این یکی را انتخاب کنید. 119 00:09:15,590 --> 00:09:18,800 مجموع 3 است. 120 00:09:18,800 --> 00:09:26,410 و سپس در نهایت، من فقط باید 2 چپ به طوری که پس از آن است که می شود 5. 121 00:09:26,410 --> 00:09:32,010 و سپس در اینجا، به عنوان انتظار می رود، اگر در را پشتیبانی می کند که برای پر کردن، 122 00:09:32,010 --> 00:09:37,480 1S همیشه شاخه راست 0s و یکی از سمت چپ است. 123 00:09:37,480 --> 00:09:45,880 سپس ما ل فقط 1 بیت و پس از آن O 2 نشان داده 124 00:09:45,880 --> 00:09:52,360 و پس از آن E 2 و سپس H می افتد تا 3 بیت. 125 00:09:52,360 --> 00:09:59,750 بنابراین شما می توانید این پیام را انتقال "سلام" به جای در واقع با استفاده از شخصیت های 126 00:09:59,750 --> 00:10:02,760 فقط 0s و 1S. 127 00:10:02,760 --> 00:10:07,910 با این حال، به یاد داشته باشید که در چند مورد، ما تا به حال روابط خود را با فرکانس. 128 00:10:07,910 --> 00:10:11,900 ما می تواند به هر دو پیوسته H و ای شاید. 129 00:10:11,900 --> 00:10:15,730 یا پس از آن به بعد در زمانی که ما تا به حال ل ارائه شده توسط 2 130 00:10:15,730 --> 00:10:19,410 و همچنین به عنوان پیوست ارائه شده توسط 2، ما می تواند به هر یک در ارتباط است. 131 00:10:19,410 --> 00:10:23,630 >> و تا زمانی که شما ارسال 0s و 1S، که در واقع نشانی را تضمین نمی کند 132 00:10:23,630 --> 00:10:27,090 که دریافت کننده به طور کامل می توانید پیام خود را حق کردن خفاش به عنوان خوانده شده 133 00:10:27,090 --> 00:10:30,490 چرا که آنها ممکن است بدانید که تصمیم شما ساخته شده است. 134 00:10:30,490 --> 00:10:34,920 بنابراین، هنگامی که ما در حال برخورد با فشرده سازی هافمن، 135 00:10:34,920 --> 00:10:40,090 به نحوی که به دریافت کننده پیام ما چگونه ما تصمیم گرفتیم ما - 136 00:10:40,090 --> 00:10:43,470 آنها نیاز به دانستن برخی از انواع اطلاعات اضافی 137 00:10:43,470 --> 00:10:46,580 در علاوه بر این به این پیام را فشرده است. 138 00:10:46,580 --> 00:10:51,490 آنها نیاز به درک آنچه درخت در واقع مانند به نظر می رسد، 139 00:10:51,490 --> 00:10:55,450 چگونه ما در واقع آن تصمیم گیری. 140 00:10:55,450 --> 00:10:59,100 >> در اینجا ما فقط انجام نمونه بر اساس تعداد واقعی، 141 00:10:59,100 --> 00:11:01,550 اما گاهی اوقات شما نیز می توانید یک درخت هافمن 142 00:11:01,550 --> 00:11:05,760 بر اساس فرکانس که در آن نامه ظاهر می شود، و این فرآیند دقیقا همان است. 143 00:11:05,760 --> 00:11:09,090 در اینجا من آن را بیان بر حسب درصد و یا کسری، 144 00:11:09,090 --> 00:11:11,290 و بنابراین در اینجا دقیقا همین است. 145 00:11:11,290 --> 00:11:15,300 من 2 به کمترین، خلاصه آنها، 2 بعدی کمترین، آنها را به طور خلاصه، 146 00:11:15,300 --> 00:11:19,390 تا زمانی که من یک درخت کامل است. 147 00:11:19,390 --> 00:11:23,610 حتی اگر ما می تواند از آن را در هر دو صورت، زمانی که ما در حال برخورد با درصد را انجام دهید، 148 00:11:23,610 --> 00:11:27,760 این بدان معناست که ما در حال تقسیم و خرید و فروش با اعشار و یا به جای شناور 149 00:11:27,760 --> 00:11:30,900 اگر ما در حال فکر کردن در مورد ساختار داده ها از یک سر است. 150 00:11:30,900 --> 00:11:32,540 چه ما در مورد شناور می دانید؟ 151 00:11:32,540 --> 00:11:35,180 یک مشکل شایع در زمانی که ما در حال برخورد با شناور چه خبر؟ 152 00:11:35,180 --> 00:11:38,600 [دانشجو] حساب مبهم است. >> آره. عدم دقت. 153 00:11:38,600 --> 00:11:43,760 از آنجا که از عدم دقت ممیز شناور، برای این pset تا که ما اطمینان حاصل کنید 154 00:11:43,760 --> 00:11:49,450 که ما هر مقدار از دست دادن نیست، پس ما در واقع برای رفتن به خرید و فروش با شمارش. 155 00:11:49,450 --> 00:11:54,880 بنابراین اگر شما به یک گره هافمن فکر می کنم، اگر شما نگاه به ساختار، 156 00:11:54,880 --> 00:12:01,740 اگر شما در آنهایی که سبز نگاه کنید آن را به یک فرکانس در ارتباط با آن 157 00:12:01,740 --> 00:12:08,760 و همچنین آن را به یک گره به سمت چپ خود را نیز به عنوان یک گره به حق خود اشاره می کند. 158 00:12:08,760 --> 00:12:13,970 و آنهایی که قرمز وجود دارد و همچنین یک شخصیت در ارتباط با آنها را داشته باشد. 159 00:12:13,970 --> 00:12:18,900 ما قصد داریم تا آنهایی جداگانه برای پدر و مادر و سپس گره های نهایی، 160 00:12:18,900 --> 00:12:23,680 که ما آن را به عنوان برگ مراجعه کنید، بلکه کسانی که فقط ارزش NULL است. 161 00:12:23,680 --> 00:12:31,050 برای هر گره خواهیم یک شخصیت، نماد که آن گره نشان دهنده داشته باشد، 162 00:12:31,050 --> 00:12:40,490 سپس یک فرکانس نیز به عنوان یک اشارهگر به فرزند چپ خود را به عنوان و به عنوان فرزند راست آن است. 163 00:12:40,490 --> 00:12:45,680 برگ، که در سطح بسیار پائین است، همچنین اشاره گر گره 164 00:12:45,680 --> 00:12:49,550 به سمت چپ خود و به حق خود است، اما از آنجا که این ارزش ها به گره های واقعی اشاره نمی 165 00:12:49,550 --> 00:12:53,970 آنچه را که ارزش آنها خواهد بود؟ >> [دانشجو] NULL. NULL. >> دقیقا. 166 00:12:53,970 --> 00:12:58,430 در اینجا یک مثال از اینکه چگونه ممکن است فرکانس نمایندگی در شناور، 167 00:12:58,430 --> 00:13:02,130 اما ما در حال رفتن به برخورد با آن را با اعداد صحیح، 168 00:13:02,130 --> 00:13:06,780 پس همه من این است که تغییر نوع داده وجود دارد. 169 00:13:06,780 --> 00:13:09,700 >> بیایید کمی بیشتر از یک مثال پیچیده. 170 00:13:09,700 --> 00:13:13,360 اما در حال حاضر که ما انجام داده ایم، آنهایی که کوچک و ساده، آن را فقط همان روند است. 171 00:13:13,360 --> 00:13:20,290 شما در پیدا کردن 2 کمترین فرکانس، فرکانس خلاصه 172 00:13:20,290 --> 00:13:22,450 و این که فرکانس جدیدی از گره پدر و مادر خود را، 173 00:13:22,450 --> 00:13:29,310 که پس از آن به سمت چپ آن نقطه با شاخه 0 و حق با شعبه 1. 174 00:13:29,310 --> 00:13:34,200 اگر ما رشته "این cs50، پس از آن ما شمارش چند بار T ذکر شده است، 175 00:13:34,200 --> 00:13:38,420 ساعت ذکر شده، I، S، C، 5، 0. 176 00:13:38,420 --> 00:13:42,010 پس آنچه که من در اینجا این است که با گره های قرمز من فقط کاشته، 177 00:13:42,010 --> 00:13:48,530 من گفت: من قصد دارم به این شخصیت در نهایت در پایین درخت من. 178 00:13:48,530 --> 00:13:51,740 کسانی که در حال رفتن به تمام برگ. 179 00:13:51,740 --> 00:13:58,200 پس آنچه من انجام داد این است که من آنها را با فرکانس صعودی طبقه بندی شده اند، 180 00:13:58,200 --> 00:14:02,950 و این است که در واقع راه که کد pset آن را ندارد 181 00:14:02,950 --> 00:14:07,550 آیا آن انواع با فرکانس و سپس بر اساس حروف الفبا. 182 00:14:07,550 --> 00:14:13,870 پس از آن اعداد اول و پس از آن حروف الفبا با فرکانس. 183 00:14:13,870 --> 00:14:18,520 پس آنچه که من می خواهم انجام دهید این است که من کمترین 2. که 0 و 5 است. 184 00:14:18,520 --> 00:14:22,390 من می خواهم آنها را جمع و 2. سپس من ادامه خواهد داد، پیدا کردن 2 بعدی کمترین. 185 00:14:22,390 --> 00:14:26,100 اینها 1S دو، و سپس آن تبدیل به 2 و همچنین. 186 00:14:26,100 --> 00:14:31,570 در حال حاضر من می دانم که قدم بعدی من در حال رفتن به پیوستن به کمترین تعداد، 187 00:14:31,570 --> 00:14:41,380 که در آن T، 1، و سپس انتخاب یکی از گره های که دارای 2 به عنوان فرکانس. 188 00:14:41,380 --> 00:14:44,560 بنابراین در اینجا ما دارای 3 گزینه است. 189 00:14:44,560 --> 00:14:47,980 آنچه من قصد دارم برای اسلاید بصری آنها را برای شما تنظیم مجدد 190 00:14:47,980 --> 00:14:51,790 به طوری که شما می توانید ببینید که چگونه من آن را ایجاد. 191 00:14:51,790 --> 00:14:59,040 کد و کد توزیع خود را در حال رفتن به انجام خواهد پیوستن به یکی از T 192 00:14:59,040 --> 00:15:01,410 با گره های 0 و 5. 193 00:15:01,410 --> 00:15:05,060 بنابراین پس از آن که مبالغ تا 3، و پس از آن ما ادامه این روند است. 194 00:15:05,060 --> 00:15:08,660 2 و 2 در حال حاضر کمترین، به طوری که پس از آن کسانی که در مجموع به 4 است. 195 00:15:08,660 --> 00:15:12,560 هر کس به دنبال چه بوده است؟ باشه. 196 00:15:12,560 --> 00:15:16,410 بعد از آن ما باید 3 و 3 است که باید به آن اضافه شود، 197 00:15:16,410 --> 00:15:21,650 تا دوباره من فقط آن را تعویض به طوری که شما می توانید ببینید بصری به طوری که آن را می کنید بیش از حد شلوغ است. 198 00:15:21,650 --> 00:15:25,740 سپس، 6، و سپس مرحله نهایی ما این است که در حال حاضر که ما فقط باید 2 گره 199 00:15:25,740 --> 00:15:30,440 کسانی که جمع ما ریشه درخت ما، که 10 را به. 200 00:15:30,440 --> 00:15:34,100 و شماره 10 را حس می کند، زیرا هر گره نشان داده شده است، 201 00:15:34,100 --> 00:15:40,750 ارزش خود را، شماره فرکانس آنها، این بود که چگونه بسیاری از آنها در رشته ظاهر شد، 202 00:15:40,750 --> 00:15:46,350 و پس از آن ما باید 5 کاراکتر در رشته ما، به طوری که حس می کند. 203 00:15:48,060 --> 00:15:52,320 اگر ما نگاه کردن در چگونه ما در واقع آن را به رمز، 204 00:15:52,320 --> 00:15:56,580 همانطور که انتظار می رود، من و S، که به نظر می رسد که اغلب 205 00:15:56,580 --> 00:16:01,350 بدترین تعداد بیت های نشان داده شده است. 206 00:16:03,660 --> 00:16:05,660 >> در اینجا دقت کنید. 207 00:16:05,660 --> 00:16:09,780 در مورد درخت هافمن در واقع مهم است. 208 00:16:09,780 --> 00:16:13,670 S بزرگ به متفاوت از S حروف کوچک است. 209 00:16:13,670 --> 00:16:21,260 اگر ما تا به حال این CS50 است "با حروف بزرگ و سپس S به حروف کوچک تنها دو بار به نظر می رسد، 210 00:16:21,260 --> 00:16:27,120 یک گره با 2 به عنوان مقدار خود خواهد بود، و پس از آن بزرگ S فقط یک بار خواهد بود. 211 00:16:27,120 --> 00:16:33,440 بنابراین پس از درخت خود را به ساختارهای زیرا شما در واقع یک برگ اضافی در اینجا تغییر دهید. 212 00:16:33,440 --> 00:16:36,900 اما در مجموع هنوز هم 10 باشد. 213 00:16:36,900 --> 00:16:39,570 این چیزی است که ما در واقع رفتن به فراخوانی کنترلی، 214 00:16:39,570 --> 00:16:44,060 علاوه بر این تعداد است. 215 00:16:46,010 --> 00:16:50,990 >> حالا که ما تحت پوشش درخت هافمن، ما می توانیم به پف Huff'n، pset شیرجه رفتن. 216 00:16:50,990 --> 00:16:52,900 ما قصد داریم تا با یک بخش از سوالات شروع، 217 00:16:52,900 --> 00:16:57,990 و این است که رفتن است با درختان دودویی و چگونه به کار در اطراف آن به شما عادت کرده اند: 218 00:16:57,990 --> 00:17:03,230 طراحی گره، ایجاد ساختار typedef خود را برای یک گره، 219 00:17:03,230 --> 00:17:07,230 و دیدن چگونه شما ممکن است به یک درخت دودویی است، که طبقه بندی شده اند وارد، 220 00:17:07,230 --> 00:17:09,050 عبور آن، و چیزهایی مانند که. 221 00:17:09,050 --> 00:17:14,560 این دانش است که قطعا به شما کمک کند هنگامی که شما را به قسمت پف Huff'n شیرجه 222 00:17:14,560 --> 00:17:17,089 pset. 223 00:17:19,150 --> 00:17:26,329 در نسخه استاندارد pset، وظیفه شما این است برای پیاده سازی پف، 224 00:17:26,329 --> 00:17:30,240 و در نسخه هکر وظیفه شما این است برای به اجرا درآوردن قهر کردن. 225 00:17:30,240 --> 00:17:38,490 چه قهر می کند آن است که طول می کشد متن و سپس آن را ترجمه به 0s و 1S، 226 00:17:38,490 --> 00:17:41,990 بنابراین روند که ما در بالا که در آن ما شمارش فرکانس 227 00:17:41,990 --> 00:17:50,970 و پس از آن ساخته شده از درخت و سپس گفت: "چگونه می توانم T دریافت کنم؟" 228 00:17:50,970 --> 00:17:54,840 T با 100 نشان داده شده است، همه چیز شبیه به آن، 229 00:17:54,840 --> 00:17:58,860 و پس از آن قهر کردن متن و سپس خروجی که باینری. 230 00:17:58,860 --> 00:18:04,920 بلکه به این خاطر ما می دانیم که ما می خواهیم اجازه می دهد گیرنده پیام 231 00:18:04,920 --> 00:18:11,790 به تمدد اعصاب به درخت دقیقا همان است، آن را نیز شامل اطلاعاتی در مورد فراوانی است. 232 00:18:11,790 --> 00:18:17,980 سپس با پف داده می شود یک فایل باینری از 0s و 1S 233 00:18:17,980 --> 00:18:21,740 و با توجه به اطلاعات در مورد فرکانس. 234 00:18:21,740 --> 00:18:26,740 همه از کسانی که پشت 0s و 1S ترجمه ما را به پیام اصلی بود که، 235 00:18:26,740 --> 00:18:29,350 بنابراین ما به RPA که. 236 00:18:29,350 --> 00:18:36,450 اگر شما در حال انجام نسخه استاندارد، شما لازم نیست که برای پیاده سازی قهر کردن، 237 00:18:36,450 --> 00:18:39,290 پس شما فقط می توانید پیاده سازی کارکنان از قهر استفاده کنید. 238 00:18:39,290 --> 00:18:42,080 دستورالعمل در مورد چگونگی انجام این کار در تنظیمات وجود دارد. 239 00:18:42,080 --> 00:18:48,780 شما می توانید به پیاده سازی کارکنان از قهر کردن بر یک فایل متن خاص اجرا شود 240 00:18:48,780 --> 00:18:53,270 و پس از آن خروجی را به عنوان ورودی شما استفاده از پف. 241 00:18:53,270 --> 00:18:59,330 >> همانطور که پیشتر نیز اشاره شد، در حال حاضر تعداد زیادی از کد های توزیع برای این یکی. 242 00:18:59,330 --> 00:19:01,810 من قصد دارم برای شروع به رفتن را از طریق آن. 243 00:19:01,810 --> 00:19:04,400 من قصد دارم به صرف بیشتر از زمانی که بر روی فایل های ساعت 244 00:19:04,400 --> 00:19:07,660 چرا که در فایل های C، چرا که ما در ساعت. 245 00:19:07,660 --> 00:19:11,650 و که ما را فراهم می کند با نمونه از توابع، 246 00:19:11,650 --> 00:19:15,520 ما را به طور کامل نیاز به درک دقیقا - 247 00:19:15,520 --> 00:19:20,280 اگر شما نمی فهمید چه خبر است در فایل C، پس از آن بیش از حد نگران نباشید، 248 00:19:20,280 --> 00:19:23,600 اما قطعا یک نگاه را به را امتحان کنید، چون ممکن است برخی از نکات را 249 00:19:23,600 --> 00:19:29,220 و آن را مفید به خواندن کد افراد دیگر استفاده می شود. 250 00:19:38,940 --> 00:19:48,270 >> به دنبال در huffile.h، در نظرات آن را اعلام کرد که یک لایه از انتزاع فایل با کد هافمن. 251 00:19:48,270 --> 00:20:01,660 اگر ما به، ما می بینیم که حداکثر از 256 نمادها است که ما ممکن است کدهای نیاز است وجود دارد. 252 00:20:01,660 --> 00:20:05,480 این شامل تمام حروف الفبا - بزرگ و کوچک - 253 00:20:05,480 --> 00:20:08,250 و پس از آن نمادها و اعداد، و غیره 254 00:20:08,250 --> 00:20:11,930 سپس در اینجا ما باید یک شماره شناسایی سحر و جادو یک فایل کد هافمن. 255 00:20:11,930 --> 00:20:15,890 در عرض یک کد هافمن آنها در حال رفتن به یک شماره سحر و جادو خاص 256 00:20:15,890 --> 00:20:18,560 همراه با هدر. 257 00:20:18,560 --> 00:20:21,110 این ممکن است مانند فقط یک عدد تصادفی سحر و جادو نگاه کنید، 258 00:20:21,110 --> 00:20:27,160 اما اگر شما در واقع ترجمه آن به ASCII، و سپس آن را در واقع توافق قهر کردن. 259 00:20:27,160 --> 00:20:34,290 در اینجا ما باید یک ساختار برای یک فایل، کد گذاری هافمن. 260 00:20:34,290 --> 00:20:39,670 همه از این ویژگی های مرتبط با فایل قهر کردن وجود دارد. 261 00:20:39,670 --> 00:20:47,080 سپس به پایین در اینجا ما باید هدر برای فایل قهر، بنابراین ما آن را Huffeader 262 00:20:47,080 --> 00:20:50,810 به جای اضافه کردن ساعت های اضافی به دلیل آن را برای تلفن های موبایل همان به هر حال. 263 00:20:50,810 --> 00:20:52,720 زیبا. 264 00:20:52,720 --> 00:20:57,790 ما باید یک شماره سحر و جادو در ارتباط با آن است. 265 00:20:57,790 --> 00:21:09,040 اگر آن را واقعی قهر کردن فایل، آن را به شماره بالا، یکی از این سحر و جادو است. 266 00:21:09,040 --> 00:21:14,720 و سپس آن را یک آرایه را داشته باشد. 267 00:21:14,720 --> 00:21:18,750 بنابراین برای هر نماد، که باشد 256 وجود دارد، 268 00:21:18,750 --> 00:21:24,760 آن را که به لیست فرکانس از آن نمادهای در فایل قهر هستند. 269 00:21:24,760 --> 00:21:28,090 و سپس در نهایت، ما باید کنترلی برای فرکانس، 270 00:21:28,090 --> 00:21:32,160 که باید مجموع کسانی فرکانس. 271 00:21:32,160 --> 00:21:36,520 به طوری که آنچه Huffeader است. 272 00:21:36,520 --> 00:21:44,600 پس ما می توانیم برخی از توابع است که بازگشت به بیت بعدی در فایل قهر کردن 273 00:21:44,600 --> 00:21:52,580 و نیز می نویسد: کمی به فایل قهر کردن، و سپس این تابع در اینجا، hfclose، 274 00:21:52,580 --> 00:21:54,650 که در واقع بسته فایل قهر کردن. 275 00:21:54,650 --> 00:21:57,290 پیش از این، ما با راست فقط fclose خرید و فروش، 276 00:21:57,290 --> 00:22:01,190 اما زمانی که شما یک فایل قهر کردن، به جای fclosing آن 277 00:22:01,190 --> 00:22:06,080 آنچه شما در واقع رفتن به hfclose و hfopen آن. 278 00:22:06,080 --> 00:22:13,220 اینها توابع خاص به فایل قهر کردن است که ما در حال رفتن به خرید و فروش با. 279 00:22:13,220 --> 00:22:19,230 و سپس در اینجا ما در هدر خوانده شده و سپس نوشتن هدر. 280 00:22:19,230 --> 00:22:25,700 >> فقط با خواندن فایل ساعت ما می توانیم نوع حس یک فایل قهر کردن ممکن است، 281 00:22:25,700 --> 00:22:32,480 چه ویژگی در آن است، بدون رفتن به huffile.c، 282 00:22:32,480 --> 00:22:36,750 که اگر ما در شیرجه رفتن است، رفتن به کمی پیچیده تر است. 283 00:22:36,750 --> 00:22:41,270 این همه را از فایل های I / O در اینجا با اشاره گرها خرید و فروش می شود، انجام می دهند. 284 00:22:41,270 --> 00:22:48,010 در اینجا ما می بینیم که وقتی ما تماس hfread، به عنوان مثال، آن را هنوز هم با fread خرید و فروش. 285 00:22:48,010 --> 00:22:53,050 ما در حال خلاص شدن از شر آن دسته از توابع به طور کامل، اما ما در حال فرستادن کسانی که به مراقبت از 286 00:22:53,050 --> 00:22:59,760 در داخل فایل قهر کردن به جای انجام همه از آن خودمان است. 287 00:22:59,760 --> 00:23:02,300 شما می توانید احساس رایگان برای اسکن از طریق این اگر شما کنجکاو هستید 288 00:23:02,300 --> 00:23:08,410 و رفتن و پوست لایه کمی است. 289 00:23:20,650 --> 00:23:24,060 >> فایل بعدی است که ما قصد داریم تا نگاهی به tree.h. است 290 00:23:24,060 --> 00:23:30,210 قبل از Walkthrough اسلاید گفت: ما انتظار داریم یک گره هافمن 291 00:23:30,210 --> 00:23:32,960 و ما ساخته شده گره typedef struct است. 292 00:23:32,960 --> 00:23:38,360 ما انتظار داریم که آن را به یک نماد، فرکانس، و پس از آن 2 ستاره گره. 293 00:23:38,360 --> 00:23:41,870 در این مورد آنچه ما انجام می دهیم این است که در اصل همان 294 00:23:41,870 --> 00:23:46,880 به جز به جای گره ما قصد داریم تا آنها را درختان. 295 00:23:48,790 --> 00:23:56,760 ما باید یک تابع است که هنگامی که با شما تماس ایجاد درخت را برمی گرداند به شما یک اشاره گر درخت. 296 00:23:56,760 --> 00:24:03,450 برگشت به کسیکه لغت را هجی میکند، هنگامی که شما در حال ساخت یک گره جدید 297 00:24:03,450 --> 00:24:11,410 شما گفت: گره * کلمه = malloc (sizeof) و چیزهایی مثل آن. 298 00:24:11,410 --> 00:24:17,510 در در واقع، mktree است رفتن به خرید و فروش با آن برای شما. 299 00:24:17,510 --> 00:24:20,990 به همین ترتیب، زمانی که شما می خواهید به حذف یک درخت، 300 00:24:20,990 --> 00:24:24,810 به طوری که اساسا آزادی درخت زمانی که می خواهید با آن انجام می شود. 301 00:24:24,810 --> 00:24:33,790 به جای صراحت خواستار رایگان در آن، شما در واقع فقط قصد استفاده از تابع rmtree 302 00:24:33,790 --> 00:24:40,360 که در آن شما را در اشاره گر به آن درخت عبور و سپس tree.c مراقبت از آن را برای شما. 303 00:24:40,360 --> 00:24:42,490 >> ما به tree.c. نگاه 304 00:24:42,490 --> 00:24:47,240 ما انتظار داریم که همان توابع جز به پیاده سازی و همچنین. 305 00:24:47,240 --> 00:24:57,720 همانطور که ما انتظار می رود، زمانی که با شما تماس mktree mallocs اندازه یک درخت را در یک اشاره گر، 306 00:24:57,720 --> 00:25:03,190 همه ارزش ها را مقدار دهی اولیه به ارزش NULL، بنابراین 0s و یا نقاط صفر، 307 00:25:03,190 --> 00:25:08,280 و سپس اشاره گر را بر می گرداند که درخت است که شما فقط به شما malloc'd. 308 00:25:08,280 --> 00:25:13,340 در اینجا هنگامی که با شما تماس حذف درخت که برای اولین بار باعث می شود اطمینان حاصل کنید که شما در حال دو برابر آزاد است. 309 00:25:13,340 --> 00:25:18,320 این اطمینان حاصل می کند که شما در واقع یک درخت است که شما می خواهید به حذف. 310 00:25:18,320 --> 00:25:23,330 در اینجا به دلیل یک درخت نیز شامل فرزندان خود را، 311 00:25:23,330 --> 00:25:29,560 چه می کند این است که آن را به صورت بازگشتی خواستار حذف درخت گره سمت چپ درخت 312 00:25:29,560 --> 00:25:31,650 و همچنین به عنوان گره سمت راست. 313 00:25:31,650 --> 00:25:37,790 قبل از آن پدر و مادر آزاد، به آن نیاز دارد برای آزادی کودکان به عنوان. 314 00:25:37,790 --> 00:25:42,770 پدر و مادر است همچنین قابل تعویض با ریشه است. 315 00:25:42,770 --> 00:25:46,500 پدر و مادر اول، تا کنون مانند بزرگ بزرگ بزرگ بزرگ و پدر بزرگ 316 00:25:46,500 --> 00:25:52,130 یا درخت مادر بزرگ، در ابتدا ما باید به آزاد کردن سطح برای اولین بار. 317 00:25:52,130 --> 00:25:58,490 تا به انتهای گذشتن، آزاد آن، و سپس دوباره، آزاد آن، و غیره 318 00:26:00,400 --> 00:26:02,210 به طوری که درخت. 319 00:26:02,210 --> 00:26:04,240 >> در حال حاضر ما در جنگل نگاه کنند. 320 00:26:04,240 --> 00:26:09,860 جنگل جایی است که همه خود را از درخت هافمن می باشد. 321 00:26:09,860 --> 00:26:12,910 این را گفت که ما قصد داریم که چیزی به نام توطئه 322 00:26:12,910 --> 00:26:22,320 که دارای یک اشاره گر به یک درخت نیز به عنوان یک اشاره گر به یک طرح به نام بعدی. 323 00:26:22,320 --> 00:26:28,480 چه ساختار این نوع از شبیه؟ 324 00:26:29,870 --> 00:26:32,490 این نوع از آن را می گوید بیش از وجود دارد. 325 00:26:34,640 --> 00:26:36,700 حق بر اینجا. 326 00:26:37,340 --> 00:26:39,170 لیست پیوندی. 327 00:26:39,170 --> 00:26:44,590 ما می بینیم که زمانی که ما طرح آن را مانند یک لیست پیوندی از توطئه است. 328 00:26:44,590 --> 00:26:53,020 جنگل به عنوان یک لیست پیوندی از قطعه تعریف شده است، 329 00:26:53,020 --> 00:26:58,100 و به همین ترتیب ساختار از جنگل است که ما در حال رفتن به یک اشاره گر به طرح اول ما 330 00:26:58,100 --> 00:27:02,740 و این طرح دارای یک درخت در داخل آن و یا به جای اشاره به یک درخت 331 00:27:02,740 --> 00:27:06,190 و پس از آن به طرح بعدی اشاره، غیره و غیره. 332 00:27:06,190 --> 00:27:11,100 برای ایجاد یک جنگل ما تماس بگیرید mkforest. 333 00:27:11,100 --> 00:27:14,930 پس ما می توانیم برخی از توابع بسیار مفید است. 334 00:27:14,930 --> 00:27:23,240 ما باید انتخاب کنید که در آن شما در یک جنگل عبور و سپس مقدار بازگشتی می باشد * درخت، 335 00:27:23,240 --> 00:27:25,210 یک اشاره گر به یک درخت. 336 00:27:25,210 --> 00:27:29,370 چه انتخاب را انجام خواهد داد این است که آن را به جنگل بروید که شما با اشاره به 337 00:27:29,370 --> 00:27:35,240 سپس یک درخت با پایین ترین فرکانس را از آن جنگل حذف 338 00:27:35,240 --> 00:27:38,330 و سپس شما را به اشاره گر به آن درخت. 339 00:27:38,330 --> 00:27:43,030 هنگامی که با شما تماس انتخاب کنید، درخت در جنگل وجود دارد دیگر، 340 00:27:43,030 --> 00:27:48,550 اما مقدار بازگشتی اشاره گر به آن درخت است. 341 00:27:48,550 --> 00:27:50,730 سپس شما باید گیاهان است. 342 00:27:50,730 --> 00:27:57,420 به شرطی که شما را در یک اشاره گر به یک درخت است که دارای یک فرکانس غیر-0 عبور 343 00:27:57,420 --> 00:28:04,040 چه گیاهی را انجام خواهد داد جنگل را به درخت و گیاه است که در داخل درخت از جنگل است. 344 00:28:04,040 --> 00:28:06,370 در اینجا ما باید rmforest. 345 00:28:06,370 --> 00:28:11,480 مشابه به حذف از درخت، که اساسا تمام درختان ما برای ما آزاد، 346 00:28:11,480 --> 00:28:16,600 حذف جنگل همه چیز رایگان موجود در آن جنگل است. 347 00:28:16,600 --> 00:28:24,890 >> اگر ما به forest.c نگاه، ما انتظار می رود حداقل 1 دستور rmtree در آن وجود دارد را ببینید. 348 00:28:24,890 --> 00:28:30,090 زیرا به حافظه آزاد در جنگل اگر یک جنگل دارای درختان در آن، 349 00:28:30,090 --> 00:28:32,930 سپس در نهایت شما را در حال رفتن به مجبور به حذف آن درختان بیش از حد است. 350 00:28:32,930 --> 00:28:41,020 اگر ما به forest.c نگاه، ما باید mkforest ما، که ما انتظار داریم. 351 00:28:41,020 --> 00:28:42,890 ما malloc چیزها می شود. 352 00:28:42,890 --> 00:28:51,740 طرح اول در جنگل به عنوان NULL مقداردهی اولیه ما به دلیل آن خالی برای شروع، 353 00:28:51,740 --> 00:29:05,940 سپس انتخاب، که درخت را بر می گرداند با کمترین وزن، پایین ترین فرکانس ما می بینیم، 354 00:29:05,940 --> 00:29:13,560 و پس از آن می شود و خلاص شدن از شر آن گره خاص است که به آن درخت و یک بعدی، 355 00:29:13,560 --> 00:29:16,760 پس از آن طول می کشد که از لیست پیوندی از جنگل است. 356 00:29:16,760 --> 00:29:24,510 و سپس در اینجا ما بوته، که درج یک درخت را در لیست پیوندی. 357 00:29:24,510 --> 00:29:29,960 چه جنگل است آن را بخوبی نگه می دارد آن را برای ما طبقه بندی شده اند. 358 00:29:29,960 --> 00:29:37,910 و سپس در نهایت، ما باید rmforest، و همانطور که انتظار می رود، ما را rmtree نامیده می شود وجود دارد. 359 00:29:46,650 --> 00:29:55,440 >> با نگاه کردن به کد توزیع تا کنون، huffile.c احتمالا به مراتب سختتر به درک بود، 360 00:29:55,440 --> 00:29:59,990 در حالی که فایل های دیگر خود را بسیار ساده به دنبال. 361 00:29:59,990 --> 00:30:03,090 با استفاده از دانش ما از اشاره گرها و لیست های پیوندی و از جمله، 362 00:30:03,090 --> 00:30:04,860 ما قادر به خوبی بودند. 363 00:30:04,860 --> 00:30:10,500 اما همه ما نیاز داریم که واقعا مطمئن شوید که ما به طور کامل درک. فایل های ساعت است 364 00:30:10,500 --> 00:30:15,840 دلیل این که شما نیاز به فراخوانی این توابع، خرید و فروش با بازگشت به ارزش آن، 365 00:30:15,840 --> 00:30:20,590 بنابراین مطمئن شوید که شما به طور کامل درک آنچه عمل انجام شود 366 00:30:20,590 --> 00:30:24,290 هر زمان که با شما تماس یکی از آن دسته از توابع است. 367 00:30:24,290 --> 00:30:33,020 اما در واقع در داخل از آن درک کاملا ضروری است زیرا ما باید کسانی که فایل های ساعت است. 368 00:30:35,170 --> 00:30:39,490 ما از 2 فایل در سمت چپ کد توزیع است. 369 00:30:39,490 --> 00:30:41,640 >> اجازه دهید نگاهی به روگرفت. 370 00:30:41,640 --> 00:30:47,230 تخلیه نظر خود را در اینجا طول می کشد یک فایل هافمن فشرده 371 00:30:47,230 --> 00:30:55,580 و پس از آن ترجمه و افسردگی تمام محتوای آن است. 372 00:31:01,010 --> 00:31:04,260 در اینجا ما می بینیم که آن را فرا میخواند hfopen. 373 00:31:04,260 --> 00:31:10,770 این نوع معکوس برای فایل ورودی * fopen = است، 374 00:31:10,770 --> 00:31:13,500 و سپس شما را در اطلاعات منتقل می شود. 375 00:31:13,500 --> 00:31:18,240 این تقریبا یکسان است به جز به جای فایل شما در حال عبور در Huffile؛ 376 00:31:18,240 --> 00:31:22,030 به جای fopen شما در حال عبور در hfopen. 377 00:31:22,030 --> 00:31:29,280 در اینجا ما در هدر خوانده شده برای اولین بار است که به نوعی شبیه به ما در هدر خوانده شده 378 00:31:29,280 --> 00:31:33,580 یک فایل بیت مپ است. 379 00:31:33,580 --> 00:31:38,000 آنچه که ما در حال انجام بررسی برای دیدن اینکه آیا اطلاعات هدر 380 00:31:38,000 --> 00:31:44,330 شامل شماره سحر و جادو درست است که این نشان می دهد که آن واقعی قهر کردن فایل، 381 00:31:44,330 --> 00:31:53,610 پس از آن همه از این چک ها را به مطمئن شوید که فایلی که ما برای باز کردن یک فایل واقعی huffed یا نه. 382 00:31:53,610 --> 00:32:05,330 چه می کند این است که خروجی فرکانس همه نمادهایی که ما می توانید ببینید 383 00:32:05,330 --> 00:32:09,790 در یک ترمینال را به یک جدول گرافیکی. 384 00:32:09,790 --> 00:32:15,240 این بخش مفید باشد. 385 00:32:15,240 --> 00:32:24,680 این بیت و بیت بیت به بیت متغیر را می خواند و سپس آن را چاپ. 386 00:32:28,220 --> 00:32:35,430 بنابراین اگر من به تماس روگرفت در hth.bin است، که در نتیجه huffing یک فایل 387 00:32:35,430 --> 00:32:39,490 با استفاده از راه حل کارکنان، من می خواهم این را دریافت کنید. 388 00:32:39,490 --> 00:32:46,000 این خروجی تمام این شخصیت ها و پس از آن قرار دادن فراوانی که در آن به نظر می رسد. 389 00:32:46,000 --> 00:32:51,180 اگر ما نگاه کنید، بسیاری از آنها 0s و به جز این: H، که به نظر می رسد دو برابر، 390 00:32:51,180 --> 00:32:54,820 و سپس T، که به نظر می رسد یک بار. 391 00:32:54,820 --> 00:33:07,860 و سپس در اینجا ما باید پیام واقعی در 0s و 1S. 392 00:33:07,860 --> 00:33:15,450 اگر ما در hth.txt نگاه است، که احتمالا به پیام اصلی بود که huffed، 393 00:33:15,450 --> 00:33:22,490 ما انتظار داریم که برای دیدن برخی از HS و TS در آن وجود دارد. 394 00:33:22,490 --> 00:33:28,720 به طور خاص، ما انتظار داریم برای دیدن فقط 1 T و 2 HS. 395 00:33:32,510 --> 00:33:37,440 در اینجا ما در hth.txt هستند. این در واقع دارای HTH. 396 00:33:37,440 --> 00:33:41,270 در آن وجود دارد، اگر چه ما می توانیم آن را نمی بیند، یک کاراکتر خط جدید است. 397 00:33:41,270 --> 00:33:53,190 همچنین hth.bin قهر کردن فایل رمزگذاری کاراکتر خط جدید نیز هست. 398 00:33:55,680 --> 00:34:01,330 از آنجا که ما می دانیم که منظور HTH است و پس از آن خط جدید، 399 00:34:01,330 --> 00:34:07,340 ما می توانید ببینید که احتمالا H نشان داده شده است که فقط 1 تک 400 00:34:07,340 --> 00:34:17,120 و پس از آن T است که احتمالا 01 و سپس H بعدی این است که 1 عدد را به عنوان 401 00:34:17,120 --> 00:34:21,139 و پس از آن ما باید یک خط جدید است که توسط دو 0s و 402 00:34:22,420 --> 00:34:24,280 دانلود. 403 00:34:26,530 --> 00:34:31,600 >> و بالاخره، از آنجا که ما در حال برخورد با C و فایل های ساعت، 404 00:34:31,600 --> 00:34:36,350 ما قصد داریم یک بحث بسیار پیچیده به کامپایلر، 405 00:34:36,350 --> 00:34:40,460 و بنابراین در اینجا ما یک Makefile است که باعث تخلیه برای شما. 406 00:34:40,460 --> 00:34:47,070 اما در واقع، شما باید به ساخت فایل puff.c خود را. 407 00:34:47,070 --> 00:34:54,330 makefile در واقع مقابله با ساخت puff.c برای شما نیست. 408 00:34:54,330 --> 00:34:59,310 ما در حال ترک است که تا به شما برای ویرایش makefile در. 409 00:34:59,310 --> 00:35:05,930 وقتی که شما وارد یک فرمان مانند را همه، برای مثال، از آن خواهد همه آنها را برای شما می سازد. 410 00:35:05,930 --> 00:35:10,760 احساس آزاد در نمونه هایی از makefile در نگاه از pset گذشته 411 00:35:10,760 --> 00:35:17,400 و همچنین خارج شدن از این یکی را ببینید که چگونه شما ممکن است قادر به ایجاد فایل پف شما 412 00:35:17,400 --> 00:35:20,260 ویرایش این makefile در. 413 00:35:20,260 --> 00:35:22,730 است که در مورد آن برای کد توزیع است. 414 00:35:22,730 --> 00:35:28,380 >> هنگامی که ما کرده ایم که از طریق رفته است، و سپس در اینجا فقط یک یادآوری 415 00:35:28,380 --> 00:35:30,980 از اینکه چگونه ما در حال رفتن به خرید و فروش با گره هافمن. 416 00:35:30,980 --> 00:35:35,400 ما قصد داریم نمی شود خواستار آنها را به گره دیگر، ما در حال رفتن به فراخوانی آنها درختان 417 00:35:35,400 --> 00:35:39,260 که در آن ما در حال رفتن به نمایندگی از نماد خود را با یک کاراکتر، 418 00:35:39,260 --> 00:35:43,340 فرکانس خود، تعدادی از ظهور، با یک عدد صحیح است. 419 00:35:43,340 --> 00:35:47,370 ما در حال استفاده از آن به دلیل آن را دقیق تر از شناور. 420 00:35:47,370 --> 00:35:52,980 و پس از آن ما باید یکی دیگر از اشارهگر به فرزند چپ و همچنین به عنوان فرزند راست. 421 00:35:52,980 --> 00:35:59,630 یک جنگل، که ما دیدیم، فقط یک لیست پیوندی از درختان است. 422 00:35:59,630 --> 00:36:04,670 در نهایت، زمانی که ما در حال ایجاد فایل ما قهر کردن، 423 00:36:04,670 --> 00:36:07,580 ما می خواهیم جنگل ما را به فقط شامل 1 درخت - 424 00:36:07,580 --> 00:36:12,420 1 درخت، 1 ریشه با فرزندان متعدد است. 425 00:36:12,420 --> 00:36:20,840 در اوایل در زمانی که ما فقط در ساختن درخت هافمن ما، 426 00:36:20,840 --> 00:36:25,360 ما با قرار دادن تمام گره ها را بر روی صفحه نمایش ما آغاز شده است 427 00:36:25,360 --> 00:36:27,790 و گفت: ما قصد داریم به این گره، 428 00:36:27,790 --> 00:36:32,920 در نهایت آنها در حال رفتن به برگ، و این نماد خود را این فرکانس است. 429 00:36:32,920 --> 00:36:42,070 در جنگل ما اگر ما فقط باید 3 حرف، که یک جنگل از 3 درختان است. 430 00:36:42,070 --> 00:36:45,150 و سپس به عنوان ما در بروید، هنگامی که ما افزود: پدر و مادر، 431 00:36:45,150 --> 00:36:48,080 ما ساخته شده است جنگل از 2 درختان است. 432 00:36:48,080 --> 00:36:54,930 ما 2 از این کودکان از جنگل ما برداشته شده و سپس آن را با یک گره پدر جایگزین 433 00:36:54,930 --> 00:36:58,820 که تا به حال آن 2 گره به عنوان کودکان. 434 00:36:58,820 --> 00:37:05,600 و بالاخره، آخرین مرحله خود را با مثال ما با به عنوان، BS، و CS 435 00:37:05,600 --> 00:37:08,030 امر می تواند نهایی را به پدر و مادر، 436 00:37:08,030 --> 00:37:13,190 و به همین ترتیب پس از آن است که تعداد کل درختان در جنگل تا 1، به ارمغان بیاورد. 437 00:37:13,190 --> 00:37:18,140 آیا همه ببینید که چگونه شما شروع با درختان متعدد در جنگل 438 00:37:18,140 --> 00:37:22,520 و در نهایت با 1؟ باشه. دانلود. 439 00:37:25,530 --> 00:37:28,110 >> چه ما نیاز داریم برای پف؟ 440 00:37:28,110 --> 00:37:37,110 چیزی که ما باید انجام دهیم این است که اطمینان حاصل شود که، مثل همیشه، آنها را با ما از نوع حق ورودی 441 00:37:37,110 --> 00:37:39,090 به طوری که ما در واقع می توانید این برنامه را اجرا کنید. 442 00:37:39,090 --> 00:37:43,130 در این مورد، آنها در حال رفتن به ما دادن بعد از خط فرمان استدلال خود را 443 00:37:43,130 --> 00:37:53,440 2: فایل را که ما می خواهیم از حالت فشرده خارج شده و خروجی از فایل فشرده. 444 00:37:53,440 --> 00:38:00,410 اما زمانی که ما را مطمئن باشید که ما آنها عبور در مقدار سمت راست مقادیر، 445 00:38:00,410 --> 00:38:05,820 ما می خواهیم اطمینان حاصل شود که ورودی یک فایل قهر کردن یا نه. 446 00:38:05,820 --> 00:38:10,420 و سپس یک بار ما تضمین می کنند که آن را به یک فایل قهر کردن، پس از آن ما می خواهیم برای ساخت درخت ما 447 00:38:10,420 --> 00:38:20,940 ساخت تا درخت به طوری که آن را منطبق درخت که شخصی که پیام را فرستاده ساخته شده است. 448 00:38:20,940 --> 00:38:25,840 سپس بعد از ساخت درخت، سپس ما می توانیم مقابله با، 0s و 1S که آنها در گذشت 449 00:38:25,840 --> 00:38:29,590 به دنبال کسانی که در کنار درخت ما دلیل آن را یکسان، 450 00:38:29,590 --> 00:38:33,510 و پس از آن که پیام نوشتن، تفسیر بیت بازگشت به کاراکتر است. 451 00:38:33,510 --> 00:38:35,880 و سپس در پایان از آنجا که ما در حال خرید و فروش با اشاره گرها در اینجا، 452 00:38:35,880 --> 00:38:38,110 ما می خواهیم مطمئن شوید که ما هر گونه نشت حافظه ندارد 453 00:38:38,110 --> 00:38:41,330 و این که ما همه چیز آزاد است. 454 00:38:42,820 --> 00:38:46,430 >> اطمینان از استفاده مناسب کلاه قدیمی برای ما در حال حاضر است. 455 00:38:46,430 --> 00:38:51,980 ما را در ورودی، که به نام فایل را به پف، 456 00:38:51,980 --> 00:38:56,010 و پس از آن یک خروجی مشخص، 457 00:38:56,010 --> 00:39:01,580 به طوری که نام فایل خروجی اغراق شده، خواهد شد که فایل متنی است. 458 00:39:03,680 --> 00:39:08,820 که استفاده است. و در حال حاضر ما می خواهیم اطمینان حاصل شود که ورودی huffed یا نه. 459 00:39:08,820 --> 00:39:16,420 فکر کردن به عقب، چیزی هست که در کد توزیع است که ممکن است به ما کمک کند 460 00:39:16,420 --> 00:39:21,570 با درک اینکه آیا یک فایل huffed یا نه؟ 461 00:39:21,570 --> 00:39:26,910 اطلاعات در huffile.c در مورد Huffeader وجود دارد. 462 00:39:26,910 --> 00:39:33,430 ما می دانیم که هر فایل قهر کردن Huffeader با آن با یک شماره سحر و جادو 463 00:39:33,430 --> 00:39:37,240 همچنین به عنوان یک مجموعه ای از فرکانس برای هر نماد 464 00:39:37,240 --> 00:39:39,570 و همچنین به عنوان یک کنترلی. 465 00:39:39,570 --> 00:39:43,180 ما می دانیم که، اما ما نیز زیرچشمی نگاه کردن در dump.c زمان، 466 00:39:43,180 --> 00:39:49,120 که در آن، آن را به یک فایل قهر کردن خواندن شد. 467 00:39:49,120 --> 00:39:53,990 و بنابراین برای انجام این کار، آن را به حال برای بررسی اینکه آیا آن را واقعا huffed شد یا نه. 468 00:39:53,990 --> 00:40:03,380 بنابراین شاید ما می تواند استفاده از dump.c به عنوان یک ساختار برای puff.c. ما 469 00:40:03,380 --> 00:40:12,680 بازگشت به pset 4 زمانی که ما تا به حال copy.c فایل که در سه RGB کپی 470 00:40:12,680 --> 00:40:14,860 و ما می دانیم که برای رمان پلیسی و تغییر اندازه تفسیر، 471 00:40:14,860 --> 00:40:20,390 به همین ترتیب، آنچه که شما می توانید انجام دهید این است که فقط اجرای فرمان مانند CP dump.c puff.c 472 00:40:20,390 --> 00:40:23,600 و استفاده از برخی از کد وجود دارد. 473 00:40:23,600 --> 00:40:28,210 با این حال، آن را به عنوان سرراست از یک فرایند 474 00:40:28,210 --> 00:40:33,010 برای ترجمه dump.c خود را به puff.c، 475 00:40:33,010 --> 00:40:36,160 اما حداقل آن را به شما می دهد جایی برای شروع 476 00:40:36,160 --> 00:40:40,540 در مورد چگونه به اطمینان حاصل شود که ورودی است که در واقع huffed یا نه 477 00:40:40,540 --> 00:40:43,240 و همچنین چند چیز دیگر. 478 00:40:45,930 --> 00:40:50,250 ما را تضمین استفاده مناسب و تضمین که ورودی huffed. 479 00:40:50,250 --> 00:40:53,570 هر زمان که ما انجام داده ایم که ما انجام داده اند ما مناسب چک کردن خطا، 480 00:40:53,570 --> 00:41:01,520 بنابراین بازگشت و ترک تابع اگر برخی از شکست رخ می دهد، اگر یک مشکل وجود دارد. 481 00:41:01,520 --> 00:41:07,170 >> در حال حاضر آنچه ما می خواهیم انجام دهیم این است که ساخت درخت واقعی است. 482 00:41:08,840 --> 00:41:12,640 اگر ما در جنگل نگاه کنید، 2 عملکرد اصلی وجود دارد 483 00:41:12,640 --> 00:41:15,800 است که ما در حال رفتن به خواهید برای تبدیل شدن به آشنا با. 484 00:41:15,800 --> 00:41:23,870 این گیاه تابع بولی وجود دارد که گیاهان غیر-0 درخت فراوانی در داخل جنگل ما. 485 00:41:23,870 --> 00:41:29,250 و این کار وجود دارد که شما را در یک اشاره گر به یک جنگل و یک اشاره گر به یک درخت منتقل می شود. 486 00:41:32,530 --> 00:41:40,340 سریع سوال: چگونه بسیاری از جنگل های شما را زمانی که شما در حال ایجاد یک درخت هافمن؟ 487 00:41:44,210 --> 00:41:46,650 جنگل ما این است که مانند بوم ما، درست است؟ 488 00:41:46,650 --> 00:41:50,800 بنابراین ما فقط رفتن به 1 جنگل است، اما ما در حال رفتن به درختان متعدد است. 489 00:41:50,800 --> 00:41:57,590 بنابراین قبل از اینکه با شما تماس بوته، شما احتمالا می خواهید به جنگل خود را به. 490 00:41:57,590 --> 00:42:04,430 یک فرمان وجود دارد که اگر شما را به forest.h در مورد چگونه شما می توانید جنگل را نگاه کنید. 491 00:42:04,430 --> 00:42:09,270 شما می توانید یک درخت کاشت. ما می دانیم که چگونه به انجام این کار. 492 00:42:09,270 --> 00:42:11,590 و پس از آن شما نیز می توانید یک درخت از جنگل انتخاب کنید، 493 00:42:11,590 --> 00:42:17,540 از بین بردن یک درخت با کمترین وزن و دادن به شما اشاره گر به آن است. 494 00:42:17,540 --> 00:42:23,090 فکر برگشت به زمانی که ما انجام می دهند به عنوان مثال خودمان، 495 00:42:23,090 --> 00:42:27,980 هنگامی که ما به آن رسم، ما به سادگی فقط لینک های اضافه شده. 496 00:42:27,980 --> 00:42:31,680 اما در اینجا فقط به جای اضافه کردن لینک، 497 00:42:31,680 --> 00:42:40,630 فکر می کنم از آن که شما در حال از بین بردن 2 از آن گره ها و سپس جایگزینی آن توسط یکی دیگر. 498 00:42:40,630 --> 00:42:44,200 به بیان است که در قوانین و مقررات از برداشت و کاشت، 499 00:42:44,200 --> 00:42:48,840 شما در حال چیدن 2 درختان و سپس به کاشت دیگر درخت 500 00:42:48,840 --> 00:42:54,060 است که آن 2 درخت است که شما به عنوان کودکان برداشت. 501 00:42:57,950 --> 00:43:05,280 برای ساختن درخت هافمن، شما می توانید در نمادها و فرکانس در جهت به عنوان خوانده شده 502 00:43:05,280 --> 00:43:10,790 چرا Huffeader می دهد که به شما، 503 00:43:10,790 --> 00:43:14,250 به شما می دهد مجموعه ای از فرکانس است. 504 00:43:14,250 --> 00:43:19,660 بنابراین شما می توانید پیش بروید و به چشم پوشی از هر چیزی با 0 در آن 505 00:43:19,660 --> 00:43:23,760 چون ما 256 برگ در انتهای آن را نمی خواهم. 506 00:43:23,760 --> 00:43:27,960 ما فقط می خواهم تعدادی از برگ هستند که شخصیت های 507 00:43:27,960 --> 00:43:31,600 که در واقع در فایل استفاده می شود. 508 00:43:31,600 --> 00:43:37,590 شما می توانید در آن نمادها به عنوان خوانده شده، و هر یک از آن دسته از نمادهایی است که غیر-0 فرکانس، 509 00:43:37,590 --> 00:43:40,440 کسانی که در حال رفتن به درختان. 510 00:43:40,440 --> 00:43:45,990 آنچه شما می توانید انجام دهید، در هر زمانی که شما در یک نماد فرکانس غیر-0 به عنوان خوانده شده 511 00:43:45,990 --> 00:43:50,660 شما می توانید این درخت در جنگل گیاهان است. 512 00:43:50,660 --> 00:43:56,620 هنگامی که شما کاشت درختان در جنگل، شما می توانید کسانی که درختان را به عنوان خواهر و برادر ملحق شوند، 513 00:43:56,620 --> 00:44:01,130 بنابراین رفتن به کاشت، داشت و برداشت که در آن شما انتخاب کنید (2) و پس از آن کارخانه 1 514 00:44:01,130 --> 00:44:05,820 که در آن 1 است که شما گیاه است که پدر و مادر از 2 کودک که شما برداشت. 515 00:44:05,820 --> 00:44:11,160 بنابراین پس از آن نتیجه نهایی خود را برای رفتن به یک درخت تنها در جنگل است. 516 00:44:16,180 --> 00:44:18,170 این که چگونه درخت خود را به شما ساخت. 517 00:44:18,170 --> 00:44:21,850 >> چند چیز است که می تواند به اشتباه در اینجا وجود دارد 518 00:44:21,850 --> 00:44:26,580 از آنجا که ما در حال برخورد با ساخت درختان جدید و خرید و فروش با اشاره گرها و چیزهایی مانند که. 519 00:44:26,580 --> 00:44:30,450 قبل از زمانی که ما با اشاره گرها خرید و فروش می شد، 520 00:44:30,450 --> 00:44:36,580 هر زمان که ما malloc'd ما می خواستیم تا مطمئن شوید که آن را به بازگشت ما یک مقدار اشاره گر NULL نیست. 521 00:44:36,580 --> 00:44:42,770 بنابراین در چند مرحله در این فرایند وجود دارد که به چند مورد 522 00:44:42,770 --> 00:44:45,920 که در آن برنامه های خود را می تواند شکست بخورد. 523 00:44:45,920 --> 00:44:51,310 آنچه شما می خواهید برای انجام این کار این است که شما می خواهید مطمئن شوید که کسانی که اشتباهات شما رسیدگی، 524 00:44:51,310 --> 00:44:54,580 و در تنظیمات آن می گوید: به آنها مسئولیت رسیدگی به آرامی، 525 00:44:54,580 --> 00:45:00,280 نسخه قابل چاپ کردن یک پیام به کاربر به گفتن آنها را به همین دلیل این برنامه را به ترک 526 00:45:00,280 --> 00:45:03,050 و پس از آن بی درنگ آن را ترک کنید. 527 00:45:03,050 --> 00:45:09,490 برای انجام این کار دست زدن به خطا، به یاد داشته باشید که شما می خواهید به آن را چک کنید 528 00:45:09,490 --> 00:45:12,160 هر بار که می تواند شکست وجود دارد. 529 00:45:12,160 --> 00:45:14,660 هر وقت که شما در حال ساخت یک اشاره گر جدید 530 00:45:14,660 --> 00:45:17,040 شما می خواهید مطمئن شوید که موفق. 531 00:45:17,040 --> 00:45:20,320 قبل از آنچه که ما استفاده می شود برای انجام این کار یک اشاره گر جدید و malloc آن، 532 00:45:20,320 --> 00:45:22,380 و پس از آن ما را بررسی کنید که آیا اشاره گر NULL است. 533 00:45:22,380 --> 00:45:25,670 بنابراین قصد دارد به برخی از موارد که در آن شما می توانید که فقط، 534 00:45:25,670 --> 00:45:28,610 اما گاهی اوقات شما در واقع فراخوانی یک تابع 535 00:45:28,610 --> 00:45:33,100 و در داخل آن تابع، که، که انجام mallocing است. 536 00:45:33,100 --> 00:45:39,110 در آن صورت، اگر ما نگاه به برخی از توابع در داخل کد، 537 00:45:39,110 --> 00:45:42,260 برخی از آنها عبارتند از توابع بولی است. 538 00:45:42,260 --> 00:45:48,480 در مورد انتزاعی اگر ما یک تابع بولی به نام صنایع غذایی، 539 00:45:48,480 --> 00:45:54,580 در واقع، ما می توانیم که علاوه بر به انجام هر آنچه که صنایع غذایی می کند فرض کنیم، 540 00:45:54,580 --> 00:45:57,210 از آنجایی که یک تابع بولی، آن را برمی گرداند درست یا غلط - 541 00:45:57,210 --> 00:46:01,300 درست است اگر موفقیت آمیز باشد، نادرست اگر نه. 542 00:46:01,300 --> 00:46:06,270 بنابراین ما می خواهیم به بررسی کنید که آیا مقدار بازگشتی از کفش درست است یا غلط. 543 00:46:06,270 --> 00:46:10,400 اگر آن را نادرست، که بدان معنی است که ما قصد داریم به برخی از انواع پیام به چاپ 544 00:46:10,400 --> 00:46:14,390 و سپس این برنامه را ترک کنید. 545 00:46:14,390 --> 00:46:18,530 چیزی که ما می خواهیم انجام دهیم این است که بررسی مقدار بازگشتی از کفش. 546 00:46:18,530 --> 00:46:23,310 اگر صنایع غذایی نادرست باز می گرداند، پس از آن ما می دانیم که ما به نوعی از خطا مواجه می شوند 547 00:46:23,310 --> 00:46:25,110 و ما باید به ترک برنامه ما است. 548 00:46:25,110 --> 00:46:35,600 یک راه برای انجام این کار این است که یک بیماری است که در آن عملکرد واقعی خود وضعیت خود را. 549 00:46:35,600 --> 00:46:39,320 بگو و صنایع غذایی طول می کشد در X است. 550 00:46:39,320 --> 00:46:43,390 ما می توانیم به عنوان یک شرط IF را (صنایع غذایی (x)). 551 00:46:43,390 --> 00:46:50,900 در واقع، این بدان معناست که اگر در پایان از اجرای صنایع غذایی آن را می گرداند، 552 00:46:50,900 --> 00:46:57,390 پس از آن ما می توانید این کار را به دلیل عملکرد برای ارزیابی صنایع غذایی انجام 553 00:46:57,390 --> 00:47:00,500 به منظور ارزیابی شرایط است. 554 00:47:00,500 --> 00:47:06,500 بنابراین پس از این که شما چگونه می توانید چیزی اگر تابع درست و موفق است. 555 00:47:06,500 --> 00:47:11,800 اما هنگامی که شما در حال چک کردن خطا، شما فقط می خواهم به ترک اگر تابع مقدار false برگرداند. 556 00:47:11,800 --> 00:47:16,090 آنچه شما می توانید انجام دهید این است که تنها اضافه کردن == نادرست و یا فقط اضافه کردن یک انفجار در مقابل آن 557 00:47:16,090 --> 00:47:21,010 و سپس شما را (صنایع غذایی) دارند. 558 00:47:21,010 --> 00:47:29,540 در درون آن بدن که شرایط شما را از دست زدن به خطا داشته باشد، 559 00:47:29,540 --> 00:47:36,940 بنابراین، مانند: "این درخت ایجاد نمی کند" و سپس بازگشت 1 یا چیزی شبیه به آن. 560 00:47:36,940 --> 00:47:43,340 آنچه را که می کند، این است که حتی اگر صنایع غذایی نادرست بازگشت - 561 00:47:43,340 --> 00:47:46,980 بگو: صنایع غذایی می گرداند درست است. 562 00:47:46,980 --> 00:47:51,060 سپس شما مجبور نیستید به صنایع غذایی را دوباره تماس بگیرید. این یک تصور غلط رایج است. 563 00:47:51,060 --> 00:47:54,730 از آنجا که آن را در شرایط شما بود، آن را در حال حاضر مورد بررسی، 564 00:47:54,730 --> 00:47:59,430 بنابراین شما در حال حاضر در نتیجه اگر شما با استفاده از درخت یا چیزی شبیه به آن داشته باشند 565 00:47:59,430 --> 00:48:01,840 و یا گیاه و یا انتخاب و یا چیزی. 566 00:48:01,840 --> 00:48:07,460 آن را در حال حاضر است که ارزش دارد. در حال حاضر اجرا شده است. 567 00:48:07,460 --> 00:48:10,730 پس از آن مفید برای استفاده از توابع بولی را به عنوان شرط 568 00:48:10,730 --> 00:48:13,890 چرا که خواه و یا شما نمی واقع اجرای بدنه حلقه، 569 00:48:13,890 --> 00:48:18,030 آن را اجرا تابع به هر حال. 570 00:48:22,070 --> 00:48:27,330 >> دوم ما را به آخرین مرحله در حال نوشتن این پیام را به فایل. 571 00:48:27,330 --> 00:48:33,070 هنگامی که درخت هافمن ما ساخت، و سپس نوشتن پیام به فایل بسیار سرراست است. 572 00:48:33,070 --> 00:48:39,260 این خیلی ساده است در حال حاضر فقط به دنبال 0s و 1S. 573 00:48:39,260 --> 00:48:45,480 و این کار را با کنوانسیون ما می دانیم که در یک درخت هافمن 0s و سمت چپ نشان می دهد 574 00:48:45,480 --> 00:48:48,360 و 1S نشان می دهد درست است. 575 00:48:48,360 --> 00:48:53,540 بنابراین اگر شما در ذره ذره خواندن، هر زمان که شما می توانید یک 0 576 00:48:53,540 --> 00:48:59,100 شما شاخه چپ، به دنبال و پس از آن هر بار که شما در 1 خواندن 577 00:48:59,100 --> 00:49:02,100 شما در حال رفتن به دنبال شاخه سمت راست. 578 00:49:02,100 --> 00:49:07,570 و پس از آن شما برای رفتن به ادامه دهید تا برگ 579 00:49:07,570 --> 00:49:11,550 به این دلیل که برگ ها را در انتهای شاخه باشد. 580 00:49:11,550 --> 00:49:16,870 چگونه می توانید به ما بگویید که آیا ایم ضربه یک برگ است یا نه؟ 581 00:49:19,800 --> 00:49:21,690 ما آن گفت: قبل از. 582 00:49:21,690 --> 00:49:24,040 [دانشجوی] اگر اشاره گر NULL هستند. >> آره. 583 00:49:24,040 --> 00:49:32,220 ما می توانیم بگویم اگر ما ضربه یک برگ در صورتی که اشاره گر به درختان هر دو سمت چپ و راست NULL. 584 00:49:32,220 --> 00:49:34,110 کامل. 585 00:49:34,110 --> 00:49:40,320 ما می دانیم که ما می خواهیم به خواندن در بیت بیت به فایل ما قهر کردن. 586 00:49:43,870 --> 00:49:51,220 همانطور که ما قبل از dump.c دیدم، آنچه آنها انجام داد این است که آنها در ذره ذره خواندن را در فایل قهر کردن 587 00:49:51,220 --> 00:49:54,560 و فقط چاپ خارج از آن بیت بودند. 588 00:49:54,560 --> 00:49:58,430 ما قصد داریم به انجام آن است. ما قصد داریم به انجام چیزی است که کمی پیچیده تر است. 589 00:49:58,430 --> 00:50:03,620 اما آنچه ما می توانیم انجام دهیم این است که ما می توانیم که کمی از کد که به بیت می خواند. 590 00:50:03,620 --> 00:50:10,250 در اینجا ما صحیح به نمایندگی از بیت فعلی که ما در آن هستیم. 591 00:50:10,250 --> 00:50:15,520 این طول می کشد مراقبت از تکرار تمام بیت ها در فایل تا زمانی که به شما ضربه انتهای فایل. 592 00:50:15,520 --> 00:50:21,270 بر این اساس، پس از آن شما می خواهید به نوعی از تکرارکننده 593 00:50:21,270 --> 00:50:26,760 برای گذشتن از درخت خود را. 594 00:50:26,760 --> 00:50:31,460 و پس از آن در مورد اینکه آیا بیت 0 یا 1 است، 595 00:50:31,460 --> 00:50:36,920 شما در حال رفتن به می خواهم که به تکرارکننده یا به سمت چپ حرکت می کند و یا حرکت آن به سمت راست 596 00:50:36,920 --> 00:50:44,080 تمام راه را تا زمانی که شما برگ، به طوری که تمام راه را تا زمانی که گره ای است که شما در 597 00:50:44,080 --> 00:50:48,260 به گره هر نقطه نیست. 598 00:50:48,260 --> 00:50:54,300 چرا ما با یک فایل هافمن اما نه کد مورس؟ 599 00:50:54,300 --> 00:50:56,610 از آنجا که در کد مورس کمی از ابهام وجود دارد. 600 00:50:56,610 --> 00:51:04,440 ما می تواند مانند، آه صبر کنید، ما ضربه نامه در طول راه، تا شاید این نامه ما، 601 00:51:04,440 --> 00:51:08,150 در حالی که اگر ما همچنان فقط یک کمی طولانی تر، پس از آن ما می توانست ضربه نامه دیگری. 602 00:51:08,150 --> 00:51:13,110 اما این اتفاق می افتد در رمز گزاری هافمن، 603 00:51:13,110 --> 00:51:17,540 بنابراین ما می توانیم مطمئن باشند که تنها راهی است که ما قصد داریم به آمار یک شخصیت 604 00:51:17,540 --> 00:51:23,480 است که اگر کودک چپ و راست آن گره NULL است. 605 00:51:28,280 --> 00:51:32,350 >> در نهایت، ما می خواهیم برای آزاد کردن همه از حافظه ما. 606 00:51:32,350 --> 00:51:37,420 ما به هر دو نزدیک به فایل قهر کردن می خواهم که ما خرید و فروش شده است با 607 00:51:37,420 --> 00:51:41,940 و همچنین تمام درختان در جنگل ما حذف شده است. 608 00:51:41,940 --> 00:51:46,470 بر اساس اجرای شما، شما احتمالا می خواهید به تماس حذف جنگل 609 00:51:46,470 --> 00:51:49,780 به جای آن در واقع از طریق همه از درختان خود را رفتن. 610 00:51:49,780 --> 00:51:53,430 اما اگر شما هر درخت به طور موقت، شما می خواهید به رایگان است که. 611 00:51:53,430 --> 00:51:59,060 شما می دانید که کد شما بهترین است، بنابراین شما می دانید که در آن شما در حال تخصیص حافظه. 612 00:51:59,060 --> 00:52:04,330 بنابراین اگر شما در شروع، حتی کنترل F'ing و برای malloc 613 00:52:04,330 --> 00:52:08,330 دیدن هر زمان که شما malloc و مطمئن شوید که همه شما آزاد که 614 00:52:08,330 --> 00:52:10,190 اما پس از آن فقط از طریق کد شما 615 00:52:10,190 --> 00:52:14,260 درک که در آن شما ممکن است حافظه تخصیص داده شده است. 616 00:52:14,260 --> 00:52:21,340 معمولا شما فقط ممکن است، می گویند: "در پایان از فایل من فقط رفتن به حذف جنگل در جنگل من، 617 00:52:21,340 --> 00:52:23,850 بنابراین اساسا که حافظه، روشن است که، 618 00:52:23,850 --> 00:52:28,310 "و پس از آن من هم رفتن به بستن فایل و پس از آن برنامه را در حال رفتن به ترک است." 619 00:52:28,310 --> 00:52:33,810 اما این است که تنها زمانی که برنامه شما واریز شده است؟ 620 00:52:33,810 --> 00:52:37,880 خیر، زیرا گاهی اوقات ممکن است وجود داشته است یک خطا رخ داده است که. 621 00:52:37,880 --> 00:52:42,080 شاید ما می تواند یک فایل را باز نمی شود و یا ما می تواند یکی دیگر از درخت را نمی 622 00:52:42,080 --> 00:52:49,340 و یا به نوعی از خطا در فرآیند تخصیص حافظه اتفاق افتاد و پس از آن بازگشت NULL. 623 00:52:49,340 --> 00:52:56,710 یک خطا رخ داده است و پس از آن ما بازگشت و ترک. 624 00:52:56,710 --> 00:53:02,040 بنابراین پس از آن شما می خواهید مطمئن شوید که هر زمان ممکن است که برنامه شما می توانید ترک، 625 00:53:02,040 --> 00:53:06,980 شما می خواهید برای آزاد کردن همه از حافظه شما وجود دارد. 626 00:53:06,980 --> 00:53:13,370 این نه تنها در پایان از عملکرد اصلی است که شما کد خود را ترک می شود. 627 00:53:13,370 --> 00:53:20,780 شما می خواهید به نگاه به هر مثال که کد خود را به طور بالقوه قبل از موعد ممکن است بازگشت 628 00:53:20,780 --> 00:53:25,070 و پس از آن هر چه حافظه را حس می کند. 629 00:53:25,070 --> 00:53:30,830 می گم (میدونم) که تو جنگل و بازگشت غلط به نام بود. 630 00:53:30,830 --> 00:53:34,230 سپس شما احتمالا نمی خواهد نیاز به جنگل خود را به حذف 631 00:53:34,230 --> 00:53:37,080 چون شما یک جنگل نشده است. 632 00:53:37,080 --> 00:53:42,130 اما در هر نقطه در کد که در آن شما ممکن است قبل از موعد مقرر بازگشت 633 00:53:42,130 --> 00:53:46,160 شما می خواهید مطمئن شوید که شما هر حافظه آزاد ممکن است. 634 00:53:46,160 --> 00:53:50,020 >> بنابراین، هنگامی که ما در حال برخورد با آزاد کردن حافظه و نشت بالقوه، 635 00:53:50,020 --> 00:53:55,440 ما می خواهیم که نه تنها استفاده از قضاوت ما و منطق ما 636 00:53:55,440 --> 00:54:01,850 اما همچنین Valgrind برای تعیین اینکه آیا ایم آزاد همه از حافظه ما و یا به درستی استفاده کنید. 637 00:54:01,850 --> 00:54:09,460 شما هم می توانید Valgrind در پف و اجرا و سپس شما را نیز از آن عبور کند 638 00:54:09,460 --> 00:54:14,020 عدد سمت راست از خط فرمان استدلال به Valgrind. 639 00:54:14,020 --> 00:54:18,100 شما می توانید این، اجرا، اما خروجی است که کمی مرموز است. 640 00:54:18,100 --> 00:54:21,630 ما رو بدست کمی با املاء به آن استفاده می شود، اما ما هنوز نیاز به کمک کمی بیشتر، 641 00:54:21,630 --> 00:54:26,450 بنابراین پس از آن در حال اجرا با یک پرچم چند مانند نشت بررسی کامل، 642 00:54:26,450 --> 00:54:32,040 که احتمالا با ما به برخی از خروجی مفید در Valgrind. 643 00:54:32,040 --> 00:54:39,040 >> سپس یکی دیگر از نوک مفید هنگامی که شما در حال اشکال زدایی فرمان تفاوت است. 644 00:54:39,040 --> 00:54:48,520 شما می توانید پیاده سازی کارکنان از قهر کردن، دسترسی و اجرای آن در یک فایل متنی، 645 00:54:48,520 --> 00:54:55,400 و سپس آن را به یک فایل باینری، باینری فایل قهر کردن خروجی، به صورت خاص است. 646 00:54:55,400 --> 00:54:59,440 اگر شما پف خود را بر روی فایل باینری است که، 647 00:54:59,440 --> 00:55:03,950 پس از آن در حالت ایده آل، خروجی فایل متنی شما است برای رفتن به یکسان 648 00:55:03,950 --> 00:55:08,200 به یکی از اصلی که شما منتقل شوید. 649 00:55:08,200 --> 00:55:15,150 در اینجا من با استفاده از hth.txt به عنوان مثال، که این مورد در تنظیمات خود صحبت. 650 00:55:15,150 --> 00:55:21,040 که به معنای واقعی کلمه فقط HTH و پس از آن یک خط جدید است. 651 00:55:21,040 --> 00:55:30,970 اما قطعا احساس و قطعا شما را تشویق به استفاده از نمونه های دیگر 652 00:55:30,970 --> 00:55:32,620 فایل متنی خود را. 653 00:55:32,620 --> 00:55:38,110 >> شما حتی می توانید شات شاید فشرده سازی و سپس به RPA 654 00:55:38,110 --> 00:55:41,600 برخی از فایل های که شما را در املاء استفاده می شود مانند جنگ و صلح 655 00:55:41,600 --> 00:55:46,710 یا جین آستن یا چیزی شبیه به آن - خواهد بود که نوع خنک - و یا قدرت های آستین، 656 00:55:46,710 --> 00:55:51,880 نوع برخورد با فایل های بزرگتر به خاطر ما نمی خواهد آمد به آن 657 00:55:51,880 --> 00:55:55,590 اگر ما با استفاده از ابزار بعدی در اینجا دستور ls-l. 658 00:55:55,590 --> 00:56:01,150 ما به LS، که اساسا لیست تمام محتویات دایرکتوری جاری ما استفاده می شود. 659 00:56:01,150 --> 00:56:07,860 پس از گذشت در-L پرچم در واقع نمایش به اندازه از آن فایل است. 660 00:56:07,860 --> 00:56:12,690 اگر شما از طریق تنظیمات pset به، در واقع شما را قدم به قدم از طریق ایجاد فایل باینری، 661 00:56:12,690 --> 00:56:16,590 از huffing آن است، و شما می بینید که برای فایل های بسیار کوچک 662 00:56:16,590 --> 00:56:23,910 هزینه فضای فشرده سازی و ترجمه تمام آن اطلاعات 663 00:56:23,910 --> 00:56:26,980 از همه فرکانس ها و چیزهایی مانند آن بیشتر از سود واقعی 664 00:56:26,980 --> 00:56:30,000 فشرده سازی فایل ها در وهله اول. 665 00:56:30,000 --> 00:56:37,450 اما اگر شما آن را اجرا بر روی برخی از فایل های متنی طولانی تر، و سپس شما ممکن است که شما شروع به گرفتن برخی از سود 666 00:56:37,450 --> 00:56:40,930 فشرده سازی آن فایل ها. 667 00:56:40,930 --> 00:56:46,210 >> و سپس در نهایت، ما باید GDB رفیق قدیمی ما، که قطعا رفتن به در دستی است بیش از حد. 668 00:56:48,360 --> 00:56:55,320 >> آیا هر گونه سوال در مورد درخت قهر کردن و یا این روند، ما شاید از درختان 669 00:56:55,320 --> 00:56:58,590 و یا هر گونه سؤال دیگر در پف Huff'n؟ 670 00:57:00,680 --> 00:57:02,570 باشه. من می مانم در اطراف برای یک بیت است. 671 00:57:02,570 --> 00:57:06,570 >> با تشکر از همه. این مقاله 6 بود. و موفق باشید. 672 00:57:08,660 --> 00:57:10,000 >> [CS50.TV]