[Powered by Google Translate] [Walkthrough - تنظیم مشکل 6]
[Zamyla چان - دانشگاه هاروارد
[این CS50 است. - CS50.TV]
>> خوش آمدید، هر کس، و به Walkthrough 6 خوش آمدید: پف Huff'n.
پف Huff'n چیزی است که ما در حال انجام است که رفتن به خرید و فروش با یک فایل فشرده هافمن
و پس از آن puffing آن را به بالا، پس از آن به RPA،
به طوری که ما می توانیم از 0s و 1S که کاربر می فرستد تماس با ما ترجمه
و آن را تبدیل به متن اصلی است.
Pset 6 است که برای رفتن به خیلی سرد است دلیل این که شما در حال رفتن به برخی از این ابزارها
که شما در pset 4 و pset 5 و نوع ترکیب آنها را به 1 مفهوم بسیار شسته و رفته استفاده می شود
هنگامی که شما در مورد آن فکر می کنم.
>> همچنین، مسلما، pset 4 و 5 psets ترین چالش برانگیز است که ما تا به حال ارائه شد.
بنابراین در حال حاضر، ما در این pset 1 بیشتر در C،
و سپس بعد از آن ما به برنامه نویسی وب هستید.
پس خودتان را برای گرفتن بیش از سخت ترین برآمدگی در CS50 تبریک می گویم.
>> حرکت برای پف Huff'n، جعبه ابزار ما برای این pset در حال رفتن به درختان هافمن،
پس با شناخت نه تنها چگونه کار درخت دودویی بلکه به طور خاص درخت هافمن،
چگونه آنها ساخته شده است.
و پس از آن ما در حال رفتن به یک مقدار زیادی از کد توزیع در این pset،
و ما آمده است که در واقع برای دیدن برخی از کد
ما نمی ممکن است قادر به درک کامل هنوز،
و بنابراین کسانی خواهد بود. فایل های C، اما بعد از آن همراه خود را به فایل های ساعت
ما به اندازه کافی درک است که ما نیاز داریم به طوری که ما می دانیم که چگونه این توابع کار
و یا حداقل آنچه که در حال قرار است برای انجام این کار - ورودی و خروجی خود را -
حتی اگر ما نمی دانیم که چه چیزی اتفاق می افتد در جعبه سیاه و سفید
یا نمی فهمید چه اتفاقی می افتد در جعبه سیاه در داخل.
و سپس در نهایت، به طور معمول، ما در حال برخورد با ساختارهای داده ای جدید،
انواع خاصی از گره هایی که اشاره به بعضی چیزها،
و بنابراین در اینجا با داشتن یک قلم و کاغذ نه تنها برای فرایند طراحی
و هنگامی که شما در حال تلاش برای کشف کردن چگونه pset شما باید کار کند
اما در هنگام اشکال زدایی.
شما می توانید با GDB در کنار قلم و کاغذ خود را در حالی که شما را آنچه ارزش داشته باشد،
که در آن فلش خود را با اشاره، و چیزهایی شبیه به آن است.
>> ابتدا اجازه دهید نگاهی به درخت هافمن.
درخت هافمن درخت دودویی هستند، به این معنی است که هر گره تنها دارای 2 فرزند است.
در درخت هافمن مشخصه این است که ارزشهای شایع ترین
بدترین بیت نشان داده شده است.
ما در مثال سخنرانی از کد مورس، نوع تثبیت برخی از حروف را دیدم.
اگر شما در حال تلاش برای ترجمه و یا E، به عنوان مثال،
شما در حال ترجمه است که اغلب، بنابراین به جای نیاز به استفاده از مجموعه ای کامل از بیت
اختصاص داده شده که نوع داده به طور معمول، شما آن را به کمتر فشرده،
و سپس آن دسته از حروف که نشان داده در موارد کمتری با بیت های دیگر
چرا که شما می توانید هنگامی که وزن شما از فرکانس است که این نامه به نظر می رسد را تقبل کنند.
ما باید همان ایده در اینجا در درخت هافمن
جایی که ما در حال ساخت یک زنجیره، یک نوع راه را برای رسیدن به شخصیت های خاصی است.
و سپس نویسه هایی که بیشترین فراوانی
در حال رفتن به بدترین بیت نشان داده می شود.
>> راهی که شما ساخت یک درخت هافمن
با قرار دادن همه کاراکترهایی که در متن ظاهر می شود
و محاسبه فرکانس خود را، چگونه اغلب آنها ظاهر می شود.
این هم می تواند یک تعداد از چند بار این نامه به نظر می رسد
یا شاید یک درصد از همه شخصیت که چگونه بسیاری از هر یک از آنها به نظر می رسد.
و بنابراین، آنچه شما باید انجام دهید این است هنگامی که شما همه که از نقشه برداری،
پس از آن شما برای 2 فرکانس پایین ترین نگاه کنید و سپس آنها را به عنوان خواهر و برادر
پس از آن که در آن گره پدر و مادر دارای یک فرکانس است که مجموع آن 2 فرزند می باشد.
و سپس شما را توسط کنوانسیون می گویند که گره سمت چپ،
شما به دنبال که به دنبال شاخه 0
و پس از آن گره سمت راست شعبه 1 است.
همانطور که در کد مورس را دیدم، مارپیچ بود که اگر شما تا به حال فقط یک بوق و بوق
آن مبهم بود.
آن چه می تواند 1 نامه باشد و یا می تواند آن را به یک دنباله از 2 حرف باشد.
و بنابراین، آنچه هافمن درختان می کند به دلیل طبیعت از شخصیت
یا نهایی ما شخصیت های واقعی بودن گره های گذشته در شعبه -
ما به کسانی که به عنوان برگ - موجب می تواند وجود ندارد ابهام
در شرایط که نامه شما در حال تلاش برای با مجموعه ای از بیت رمزگذاری
چرا که هیچ جا در کنار بیت است که نشان دهنده 1 حرف
نامه دیگری به شما روبرو می شوند، وجود خواهد داشت و نه هیچ سردرگمی وجود دارد.
اما ما به نمونه هایی که شما بچه ها در واقع می توانید ببینید که
به جای ارتباط با ما فقط به شما می گویم که درست است.
>> اجازه دهید نگاهی به یک مثال ساده از یک درخت هافمن.
من یک رشته است که 12 حرف طولانی.
من 4، 6 BS، و 2 CS.
اولین قدم من این است که به دفعات مشاهده شده است.
چند بار می کند به نظر می رسد؟ به نظر می رسد 4 بار در رشته.
B به نظر می رسد 6 بار، و C به نظر می رسد 2 بار.
طبیعتا، من قصد دارم برای گفتن من با استفاده از B در اغلب موارد،
بنابراین من می خواهم به نمایندگی از B با بدترین تعداد بیت، کمترین تعداد از 0s و 1S.
و پس از آن من هم انتظار می رود بیشترین میزان و از 0s و 1S C که به عنوان خوبی است.
نخست آنچه که من در اینجا این است که من آنها را به ترتیب صعودی به ترتیب از نظر فرکانس قرار می گیرد.
ما می بینیم که C و، هستند کسانی که ما 2 پایین ترین فرکانس.
ایجاد می کنیم یک گره پدر و مادر، و گره پدر و مادر نامه ای در ارتباط با آن را ندارد،
اما آن را نشانی از یک فرکانس است، که مجموع.
حاصل جمع 2 + 4، 6 است می شود.
سپس شاخه سمت چپ را دنبال می کنیم.
اگر ما در آن گره 6، پس از آن ما را به 0 تا رسیدن به C به دنبال
و 1 به A.
بنابراین در حال حاضر ما 2 گره.
ما ارزش 6 و پس از آن ما نیز یکی دیگر از گره با مقدار 6.
و به این ترتیب که 2 نه تنها کمترین 2 اما فقط 2 که در سمت چپ،
بنابراین کسانی که توسط یکی دیگر از پدر و مادر به ما بپیوندند، با مجموع 12.
بنابراین در اینجا ما باید درخت ما هافمن
که در آن به B، که فقط بیت 1 باشد
و پس از آن برای رسیدن به ما می 01 و و سپس C با داشتن 00.
بنابراین در اینجا ما می بینیم که اساسا ما به نمایندگی از این کاراکتر یا 1 یا 2 بیت
که در آن B، همانطور که پیش بینی شده، حداقل است.
و پس از آن ما C که بیشتر بود، اما از آنجا که چنین کوچک درخت هافمن،
پس از آن نیز با 2 بیت به عنوان مخالف به جایی در وسط نشان داده شده است.
>> فقط به بیش از یکی دیگر از مثال های ساده از درخت هافمن،
می گویند شما باید رشته "سلام."
چیزی که شما باید انجام دهید این است که در ابتدا به شما می گویند که چگونه بسیاری از H در این به نظر می رسد؟
H به نظر می رسد یک بار و پس از آن E به نظر می رسد ما یک بار و پس از آن ظاهر می شود دو برابر L است
و O یک بار ظاهر می شود.
و تا بعد ما انتظار داریم که نامه ای به حداقل تعداد بیت های نشان داده شده است؟
[دانشجوی] L. ل. >> آره. ل درست است.
ما انتظار داریم که L با حداقل تعداد بیت نشان داده می شود
به خاطر ل مورد استفاده در رشته "سلام."
آنچه من قصد دارم برای انجام این کار در حال حاضر قرعه کشی از این گره است.
من 1 است که H، و پس از آن یکی دیگر از 1، است که E، و پس از آن 1، است که O -
در حال حاضر من آنها را با قرار دادن در دستور - و پس از آن 2، است که ل.
من می گویم که من برای ساخت یک درخت هافمن برای پیدا کردن 2 گره با حداقل فرکانس
و آنها را خواهر و برادر را با ایجاد یک گره پدر و مادر است.
در اینجا ما 3 گره با کمترین فرکانس. آنها به همه 1.
بنابراین در اینجا ما را انتخاب کنید که یکی از ما در حال رفتن به اولین لینک است.
بیایید می گویند H و E را انتخاب کنید.
مجموع 1 + 1 است 2، اما این گره می کند، نامه ای در ارتباط با آن را ندارد.
این فقط دارای ارزش است.
در حال حاضر ما در 2 بعدی کمترین فرکانس را نگاه کنید.
که 2 و 1 است. که می تواند یا از آن 2 است، اما من قصد دارم به این یکی را انتخاب کنید.
مجموع 3 است.
و سپس در نهایت، من فقط باید 2 چپ به طوری که پس از آن است که می شود 5.
و سپس در اینجا، به عنوان انتظار می رود، اگر در را پشتیبانی می کند که برای پر کردن،
1S همیشه شاخه راست 0s و یکی از سمت چپ است.
سپس ما ل فقط 1 بیت و پس از آن O 2 نشان داده
و پس از آن E 2 و سپس H می افتد تا 3 بیت.
بنابراین شما می توانید این پیام را انتقال "سلام" به جای در واقع با استفاده از شخصیت های
فقط 0s و 1S.
با این حال، به یاد داشته باشید که در چند مورد، ما تا به حال روابط خود را با فرکانس.
ما می تواند به هر دو پیوسته H و ای شاید.
یا پس از آن به بعد در زمانی که ما تا به حال ل ارائه شده توسط 2
و همچنین به عنوان پیوست ارائه شده توسط 2، ما می تواند به هر یک در ارتباط است.
>> و تا زمانی که شما ارسال 0s و 1S، که در واقع نشانی را تضمین نمی کند
که دریافت کننده به طور کامل می توانید پیام خود را حق کردن خفاش به عنوان خوانده شده
چرا که آنها ممکن است بدانید که تصمیم شما ساخته شده است.
بنابراین، هنگامی که ما در حال برخورد با فشرده سازی هافمن،
به نحوی که به دریافت کننده پیام ما چگونه ما تصمیم گرفتیم ما -
آنها نیاز به دانستن برخی از انواع اطلاعات اضافی
در علاوه بر این به این پیام را فشرده است.
آنها نیاز به درک آنچه درخت در واقع مانند به نظر می رسد،
چگونه ما در واقع آن تصمیم گیری.
>> در اینجا ما فقط انجام نمونه بر اساس تعداد واقعی،
اما گاهی اوقات شما نیز می توانید یک درخت هافمن
بر اساس فرکانس که در آن نامه ظاهر می شود، و این فرآیند دقیقا همان است.
در اینجا من آن را بیان بر حسب درصد و یا کسری،
و بنابراین در اینجا دقیقا همین است.
من 2 به کمترین، خلاصه آنها، 2 بعدی کمترین، آنها را به طور خلاصه،
تا زمانی که من یک درخت کامل است.
حتی اگر ما می تواند از آن را در هر دو صورت، زمانی که ما در حال برخورد با درصد را انجام دهید،
این بدان معناست که ما در حال تقسیم و خرید و فروش با اعشار و یا به جای شناور
اگر ما در حال فکر کردن در مورد ساختار داده ها از یک سر است.
چه ما در مورد شناور می دانید؟
یک مشکل شایع در زمانی که ما در حال برخورد با شناور چه خبر؟
[دانشجو] حساب مبهم است. >> آره. عدم دقت.
از آنجا که از عدم دقت ممیز شناور، برای این pset تا که ما اطمینان حاصل کنید
که ما هر مقدار از دست دادن نیست، پس ما در واقع برای رفتن به خرید و فروش با شمارش.
بنابراین اگر شما به یک گره هافمن فکر می کنم، اگر شما نگاه به ساختار،
اگر شما در آنهایی که سبز نگاه کنید آن را به یک فرکانس در ارتباط با آن
و همچنین آن را به یک گره به سمت چپ خود را نیز به عنوان یک گره به حق خود اشاره می کند.
و آنهایی که قرمز وجود دارد و همچنین یک شخصیت در ارتباط با آنها را داشته باشد.
ما قصد داریم تا آنهایی جداگانه برای پدر و مادر و سپس گره های نهایی،
که ما آن را به عنوان برگ مراجعه کنید، بلکه کسانی که فقط ارزش NULL است.
برای هر گره خواهیم یک شخصیت، نماد که آن گره نشان دهنده داشته باشد،
سپس یک فرکانس نیز به عنوان یک اشارهگر به فرزند چپ خود را به عنوان و به عنوان فرزند راست آن است.
برگ، که در سطح بسیار پائین است، همچنین اشاره گر گره
به سمت چپ خود و به حق خود است، اما از آنجا که این ارزش ها به گره های واقعی اشاره نمی
آنچه را که ارزش آنها خواهد بود؟ >> [دانشجو] NULL. NULL. >> دقیقا.
در اینجا یک مثال از اینکه چگونه ممکن است فرکانس نمایندگی در شناور،
اما ما در حال رفتن به برخورد با آن را با اعداد صحیح،
پس همه من این است که تغییر نوع داده وجود دارد.
>> بیایید کمی بیشتر از یک مثال پیچیده.
اما در حال حاضر که ما انجام داده ایم، آنهایی که کوچک و ساده، آن را فقط همان روند است.
شما در پیدا کردن 2 کمترین فرکانس، فرکانس خلاصه
و این که فرکانس جدیدی از گره پدر و مادر خود را،
که پس از آن به سمت چپ آن نقطه با شاخه 0 و حق با شعبه 1.
اگر ما رشته "این cs50، پس از آن ما شمارش چند بار T ذکر شده است،
ساعت ذکر شده، I، S، C، 5، 0.
پس آنچه که من در اینجا این است که با گره های قرمز من فقط کاشته،
من گفت: من قصد دارم به این شخصیت در نهایت در پایین درخت من.
کسانی که در حال رفتن به تمام برگ.
پس آنچه من انجام داد این است که من آنها را با فرکانس صعودی طبقه بندی شده اند،
و این است که در واقع راه که کد pset آن را ندارد
آیا آن انواع با فرکانس و سپس بر اساس حروف الفبا.
پس از آن اعداد اول و پس از آن حروف الفبا با فرکانس.
پس آنچه که من می خواهم انجام دهید این است که من کمترین 2. که 0 و 5 است.
من می خواهم آنها را جمع و 2. سپس من ادامه خواهد داد، پیدا کردن 2 بعدی کمترین.
اینها 1S دو، و سپس آن تبدیل به 2 و همچنین.
در حال حاضر من می دانم که قدم بعدی من در حال رفتن به پیوستن به کمترین تعداد،
که در آن T، 1، و سپس انتخاب یکی از گره های که دارای 2 به عنوان فرکانس.
بنابراین در اینجا ما دارای 3 گزینه است.
آنچه من قصد دارم برای اسلاید بصری آنها را برای شما تنظیم مجدد
به طوری که شما می توانید ببینید که چگونه من آن را ایجاد.
کد و کد توزیع خود را در حال رفتن به انجام خواهد پیوستن به یکی از T
با گره های 0 و 5.
بنابراین پس از آن که مبالغ تا 3، و پس از آن ما ادامه این روند است.
2 و 2 در حال حاضر کمترین، به طوری که پس از آن کسانی که در مجموع به 4 است.
هر کس به دنبال چه بوده است؟ باشه.
بعد از آن ما باید 3 و 3 است که باید به آن اضافه شود،
تا دوباره من فقط آن را تعویض به طوری که شما می توانید ببینید بصری به طوری که آن را می کنید بیش از حد شلوغ است.
سپس، 6، و سپس مرحله نهایی ما این است که در حال حاضر که ما فقط باید 2 گره
کسانی که جمع ما ریشه درخت ما، که 10 را به.
و شماره 10 را حس می کند، زیرا هر گره نشان داده شده است،
ارزش خود را، شماره فرکانس آنها، این بود که چگونه بسیاری از آنها در رشته ظاهر شد،
و پس از آن ما باید 5 کاراکتر در رشته ما، به طوری که حس می کند.
اگر ما نگاه کردن در چگونه ما در واقع آن را به رمز،
همانطور که انتظار می رود، من و S، که به نظر می رسد که اغلب
بدترین تعداد بیت های نشان داده شده است.
>> در اینجا دقت کنید.
در مورد درخت هافمن در واقع مهم است.
S بزرگ به متفاوت از S حروف کوچک است.
اگر ما تا به حال این CS50 است "با حروف بزرگ و سپس S به حروف کوچک تنها دو بار به نظر می رسد،
یک گره با 2 به عنوان مقدار خود خواهد بود، و پس از آن بزرگ S فقط یک بار خواهد بود.
بنابراین پس از درخت خود را به ساختارهای زیرا شما در واقع یک برگ اضافی در اینجا تغییر دهید.
اما در مجموع هنوز هم 10 باشد.
این چیزی است که ما در واقع رفتن به فراخوانی کنترلی،
علاوه بر این تعداد است.
>> حالا که ما تحت پوشش درخت هافمن، ما می توانیم به پف Huff'n، pset شیرجه رفتن.
ما قصد داریم تا با یک بخش از سوالات شروع،
و این است که رفتن است با درختان دودویی و چگونه به کار در اطراف آن به شما عادت کرده اند:
طراحی گره، ایجاد ساختار typedef خود را برای یک گره،
و دیدن چگونه شما ممکن است به یک درخت دودویی است، که طبقه بندی شده اند وارد،
عبور آن، و چیزهایی مانند که.
این دانش است که قطعا به شما کمک کند هنگامی که شما را به قسمت پف Huff'n شیرجه
pset.
در نسخه استاندارد pset، وظیفه شما این است برای پیاده سازی پف،
و در نسخه هکر وظیفه شما این است برای به اجرا درآوردن قهر کردن.
چه قهر می کند آن است که طول می کشد متن و سپس آن را ترجمه به 0s و 1S،
بنابراین روند که ما در بالا که در آن ما شمارش فرکانس
و پس از آن ساخته شده از درخت و سپس گفت: "چگونه می توانم T دریافت کنم؟"
T با 100 نشان داده شده است، همه چیز شبیه به آن،
و پس از آن قهر کردن متن و سپس خروجی که باینری.
بلکه به این خاطر ما می دانیم که ما می خواهیم اجازه می دهد گیرنده پیام
به تمدد اعصاب به درخت دقیقا همان است، آن را نیز شامل اطلاعاتی در مورد فراوانی است.
سپس با پف داده می شود یک فایل باینری از 0s و 1S
و با توجه به اطلاعات در مورد فرکانس.
همه از کسانی که پشت 0s و 1S ترجمه ما را به پیام اصلی بود که،
بنابراین ما به RPA که.
اگر شما در حال انجام نسخه استاندارد، شما لازم نیست که برای پیاده سازی قهر کردن،
پس شما فقط می توانید پیاده سازی کارکنان از قهر استفاده کنید.
دستورالعمل در مورد چگونگی انجام این کار در تنظیمات وجود دارد.
شما می توانید به پیاده سازی کارکنان از قهر کردن بر یک فایل متن خاص اجرا شود
و پس از آن خروجی را به عنوان ورودی شما استفاده از پف.
>> همانطور که پیشتر نیز اشاره شد، در حال حاضر تعداد زیادی از کد های توزیع برای این یکی.
من قصد دارم برای شروع به رفتن را از طریق آن.
من قصد دارم به صرف بیشتر از زمانی که بر روی فایل های ساعت
چرا که در فایل های C، چرا که ما در ساعت.
و که ما را فراهم می کند با نمونه از توابع،
ما را به طور کامل نیاز به درک دقیقا -
اگر شما نمی فهمید چه خبر است در فایل C، پس از آن بیش از حد نگران نباشید،
اما قطعا یک نگاه را به را امتحان کنید، چون ممکن است برخی از نکات را
و آن را مفید به خواندن کد افراد دیگر استفاده می شود.
>> به دنبال در huffile.h، در نظرات آن را اعلام کرد که یک لایه از انتزاع فایل با کد هافمن.
اگر ما به، ما می بینیم که حداکثر از 256 نمادها است که ما ممکن است کدهای نیاز است وجود دارد.
این شامل تمام حروف الفبا - بزرگ و کوچک -
و پس از آن نمادها و اعداد، و غیره
سپس در اینجا ما باید یک شماره شناسایی سحر و جادو یک فایل کد هافمن.
در عرض یک کد هافمن آنها در حال رفتن به یک شماره سحر و جادو خاص
همراه با هدر.
این ممکن است مانند فقط یک عدد تصادفی سحر و جادو نگاه کنید،
اما اگر شما در واقع ترجمه آن به ASCII، و سپس آن را در واقع توافق قهر کردن.
در اینجا ما باید یک ساختار برای یک فایل، کد گذاری هافمن.
همه از این ویژگی های مرتبط با فایل قهر کردن وجود دارد.
سپس به پایین در اینجا ما باید هدر برای فایل قهر، بنابراین ما آن را Huffeader
به جای اضافه کردن ساعت های اضافی به دلیل آن را برای تلفن های موبایل همان به هر حال.
زیبا.
ما باید یک شماره سحر و جادو در ارتباط با آن است.
اگر آن را واقعی قهر کردن فایل، آن را به شماره بالا، یکی از این سحر و جادو است.
و سپس آن را یک آرایه را داشته باشد.
بنابراین برای هر نماد، که باشد 256 وجود دارد،
آن را که به لیست فرکانس از آن نمادهای در فایل قهر هستند.
و سپس در نهایت، ما باید کنترلی برای فرکانس،
که باید مجموع کسانی فرکانس.
به طوری که آنچه Huffeader است.
پس ما می توانیم برخی از توابع است که بازگشت به بیت بعدی در فایل قهر کردن
و نیز می نویسد: کمی به فایل قهر کردن، و سپس این تابع در اینجا، hfclose،
که در واقع بسته فایل قهر کردن.
پیش از این، ما با راست فقط fclose خرید و فروش،
اما زمانی که شما یک فایل قهر کردن، به جای fclosing آن
آنچه شما در واقع رفتن به hfclose و hfopen آن.
اینها توابع خاص به فایل قهر کردن است که ما در حال رفتن به خرید و فروش با.
و سپس در اینجا ما در هدر خوانده شده و سپس نوشتن هدر.
>> فقط با خواندن فایل ساعت ما می توانیم نوع حس یک فایل قهر کردن ممکن است،
چه ویژگی در آن است، بدون رفتن به huffile.c،
که اگر ما در شیرجه رفتن است، رفتن به کمی پیچیده تر است.
این همه را از فایل های I / O در اینجا با اشاره گرها خرید و فروش می شود، انجام می دهند.
در اینجا ما می بینیم که وقتی ما تماس hfread، به عنوان مثال، آن را هنوز هم با fread خرید و فروش.
ما در حال خلاص شدن از شر آن دسته از توابع به طور کامل، اما ما در حال فرستادن کسانی که به مراقبت از
در داخل فایل قهر کردن به جای انجام همه از آن خودمان است.
شما می توانید احساس رایگان برای اسکن از طریق این اگر شما کنجکاو هستید
و رفتن و پوست لایه کمی است.
>> فایل بعدی است که ما قصد داریم تا نگاهی به tree.h. است
قبل از Walkthrough اسلاید گفت: ما انتظار داریم یک گره هافمن
و ما ساخته شده گره typedef struct است.
ما انتظار داریم که آن را به یک نماد، فرکانس، و پس از آن 2 ستاره گره.
در این مورد آنچه ما انجام می دهیم این است که در اصل همان
به جز به جای گره ما قصد داریم تا آنها را درختان.
ما باید یک تابع است که هنگامی که با شما تماس ایجاد درخت را برمی گرداند به شما یک اشاره گر درخت.
برگشت به کسیکه لغت را هجی میکند، هنگامی که شما در حال ساخت یک گره جدید
شما گفت: گره * کلمه = malloc (sizeof) و چیزهایی مثل آن.
در در واقع، mktree است رفتن به خرید و فروش با آن برای شما.
به همین ترتیب، زمانی که شما می خواهید به حذف یک درخت،
به طوری که اساسا آزادی درخت زمانی که می خواهید با آن انجام می شود.
به جای صراحت خواستار رایگان در آن، شما در واقع فقط قصد استفاده از تابع rmtree
که در آن شما را در اشاره گر به آن درخت عبور و سپس tree.c مراقبت از آن را برای شما.
>> ما به tree.c. نگاه
ما انتظار داریم که همان توابع جز به پیاده سازی و همچنین.
همانطور که ما انتظار می رود، زمانی که با شما تماس mktree mallocs اندازه یک درخت را در یک اشاره گر،
همه ارزش ها را مقدار دهی اولیه به ارزش NULL، بنابراین 0s و یا نقاط صفر،
و سپس اشاره گر را بر می گرداند که درخت است که شما فقط به شما malloc'd.
در اینجا هنگامی که با شما تماس حذف درخت که برای اولین بار باعث می شود اطمینان حاصل کنید که شما در حال دو برابر آزاد است.
این اطمینان حاصل می کند که شما در واقع یک درخت است که شما می خواهید به حذف.
در اینجا به دلیل یک درخت نیز شامل فرزندان خود را،
چه می کند این است که آن را به صورت بازگشتی خواستار حذف درخت گره سمت چپ درخت
و همچنین به عنوان گره سمت راست.
قبل از آن پدر و مادر آزاد، به آن نیاز دارد برای آزادی کودکان به عنوان.
پدر و مادر است همچنین قابل تعویض با ریشه است.
پدر و مادر اول، تا کنون مانند بزرگ بزرگ بزرگ بزرگ و پدر بزرگ
یا درخت مادر بزرگ، در ابتدا ما باید به آزاد کردن سطح برای اولین بار.
تا به انتهای گذشتن، آزاد آن، و سپس دوباره، آزاد آن، و غیره
به طوری که درخت.
>> در حال حاضر ما در جنگل نگاه کنند.
جنگل جایی است که همه خود را از درخت هافمن می باشد.
این را گفت که ما قصد داریم که چیزی به نام توطئه
که دارای یک اشاره گر به یک درخت نیز به عنوان یک اشاره گر به یک طرح به نام بعدی.
چه ساختار این نوع از شبیه؟
این نوع از آن را می گوید بیش از وجود دارد.
حق بر اینجا.
لیست پیوندی.
ما می بینیم که زمانی که ما طرح آن را مانند یک لیست پیوندی از توطئه است.
جنگل به عنوان یک لیست پیوندی از قطعه تعریف شده است،
و به همین ترتیب ساختار از جنگل است که ما در حال رفتن به یک اشاره گر به طرح اول ما
و این طرح دارای یک درخت در داخل آن و یا به جای اشاره به یک درخت
و پس از آن به طرح بعدی اشاره، غیره و غیره.
برای ایجاد یک جنگل ما تماس بگیرید mkforest.
پس ما می توانیم برخی از توابع بسیار مفید است.
ما باید انتخاب کنید که در آن شما در یک جنگل عبور و سپس مقدار بازگشتی می باشد * درخت،
یک اشاره گر به یک درخت.
چه انتخاب را انجام خواهد داد این است که آن را به جنگل بروید که شما با اشاره به
سپس یک درخت با پایین ترین فرکانس را از آن جنگل حذف
و سپس شما را به اشاره گر به آن درخت.
هنگامی که با شما تماس انتخاب کنید، درخت در جنگل وجود دارد دیگر،
اما مقدار بازگشتی اشاره گر به آن درخت است.
سپس شما باید گیاهان است.
به شرطی که شما را در یک اشاره گر به یک درخت است که دارای یک فرکانس غیر-0 عبور
چه گیاهی را انجام خواهد داد جنگل را به درخت و گیاه است که در داخل درخت از جنگل است.
در اینجا ما باید rmforest.
مشابه به حذف از درخت، که اساسا تمام درختان ما برای ما آزاد،
حذف جنگل همه چیز رایگان موجود در آن جنگل است.
>> اگر ما به forest.c نگاه، ما انتظار می رود حداقل 1 دستور rmtree در آن وجود دارد را ببینید.
زیرا به حافظه آزاد در جنگل اگر یک جنگل دارای درختان در آن،
سپس در نهایت شما را در حال رفتن به مجبور به حذف آن درختان بیش از حد است.
اگر ما به forest.c نگاه، ما باید mkforest ما، که ما انتظار داریم.
ما malloc چیزها می شود.
طرح اول در جنگل به عنوان NULL مقداردهی اولیه ما به دلیل آن خالی برای شروع،
سپس انتخاب، که درخت را بر می گرداند با کمترین وزن، پایین ترین فرکانس ما می بینیم،
و پس از آن می شود و خلاص شدن از شر آن گره خاص است که به آن درخت و یک بعدی،
پس از آن طول می کشد که از لیست پیوندی از جنگل است.
و سپس در اینجا ما بوته، که درج یک درخت را در لیست پیوندی.
چه جنگل است آن را بخوبی نگه می دارد آن را برای ما طبقه بندی شده اند.
و سپس در نهایت، ما باید rmforest، و همانطور که انتظار می رود، ما را rmtree نامیده می شود وجود دارد.
>> با نگاه کردن به کد توزیع تا کنون، huffile.c احتمالا به مراتب سختتر به درک بود،
در حالی که فایل های دیگر خود را بسیار ساده به دنبال.
با استفاده از دانش ما از اشاره گرها و لیست های پیوندی و از جمله،
ما قادر به خوبی بودند.
اما همه ما نیاز داریم که واقعا مطمئن شوید که ما به طور کامل درک. فایل های ساعت است
دلیل این که شما نیاز به فراخوانی این توابع، خرید و فروش با بازگشت به ارزش آن،
بنابراین مطمئن شوید که شما به طور کامل درک آنچه عمل انجام شود
هر زمان که با شما تماس یکی از آن دسته از توابع است.
اما در واقع در داخل از آن درک کاملا ضروری است زیرا ما باید کسانی که فایل های ساعت است.
ما از 2 فایل در سمت چپ کد توزیع است.
>> اجازه دهید نگاهی به روگرفت.
تخلیه نظر خود را در اینجا طول می کشد یک فایل هافمن فشرده
و پس از آن ترجمه و افسردگی تمام محتوای آن است.
در اینجا ما می بینیم که آن را فرا میخواند hfopen.
این نوع معکوس برای فایل ورودی * fopen = است،
و سپس شما را در اطلاعات منتقل می شود.
این تقریبا یکسان است به جز به جای فایل شما در حال عبور در Huffile؛
به جای fopen شما در حال عبور در hfopen.
در اینجا ما در هدر خوانده شده برای اولین بار است که به نوعی شبیه به ما در هدر خوانده شده
یک فایل بیت مپ است.
آنچه که ما در حال انجام بررسی برای دیدن اینکه آیا اطلاعات هدر
شامل شماره سحر و جادو درست است که این نشان می دهد که آن واقعی قهر کردن فایل،
پس از آن همه از این چک ها را به مطمئن شوید که فایلی که ما برای باز کردن یک فایل واقعی huffed یا نه.
چه می کند این است که خروجی فرکانس همه نمادهایی که ما می توانید ببینید
در یک ترمینال را به یک جدول گرافیکی.
این بخش مفید باشد.
این بیت و بیت بیت به بیت متغیر را می خواند و سپس آن را چاپ.
بنابراین اگر من به تماس روگرفت در hth.bin است، که در نتیجه huffing یک فایل
با استفاده از راه حل کارکنان، من می خواهم این را دریافت کنید.
این خروجی تمام این شخصیت ها و پس از آن قرار دادن فراوانی که در آن به نظر می رسد.
اگر ما نگاه کنید، بسیاری از آنها 0s و به جز این: H، که به نظر می رسد دو برابر،
و سپس T، که به نظر می رسد یک بار.
و سپس در اینجا ما باید پیام واقعی در 0s و 1S.
اگر ما در hth.txt نگاه است، که احتمالا به پیام اصلی بود که huffed،
ما انتظار داریم که برای دیدن برخی از HS و TS در آن وجود دارد.
به طور خاص، ما انتظار داریم برای دیدن فقط 1 T و 2 HS.
در اینجا ما در hth.txt هستند. این در واقع دارای HTH.
در آن وجود دارد، اگر چه ما می توانیم آن را نمی بیند، یک کاراکتر خط جدید است.
همچنین hth.bin قهر کردن فایل رمزگذاری کاراکتر خط جدید نیز هست.
از آنجا که ما می دانیم که منظور HTH است و پس از آن خط جدید،
ما می توانید ببینید که احتمالا H نشان داده شده است که فقط 1 تک
و پس از آن T است که احتمالا 01 و سپس H بعدی این است که 1 عدد را به عنوان
و پس از آن ما باید یک خط جدید است که توسط دو 0s و
دانلود.
>> و بالاخره، از آنجا که ما در حال برخورد با C و فایل های ساعت،
ما قصد داریم یک بحث بسیار پیچیده به کامپایلر،
و بنابراین در اینجا ما یک Makefile است که باعث تخلیه برای شما.
اما در واقع، شما باید به ساخت فایل puff.c خود را.
makefile در واقع مقابله با ساخت puff.c برای شما نیست.
ما در حال ترک است که تا به شما برای ویرایش makefile در.
وقتی که شما وارد یک فرمان مانند را همه، برای مثال، از آن خواهد همه آنها را برای شما می سازد.
احساس آزاد در نمونه هایی از makefile در نگاه از pset گذشته
و همچنین خارج شدن از این یکی را ببینید که چگونه شما ممکن است قادر به ایجاد فایل پف شما
ویرایش این makefile در.
است که در مورد آن برای کد توزیع است.
>> هنگامی که ما کرده ایم که از طریق رفته است، و سپس در اینجا فقط یک یادآوری
از اینکه چگونه ما در حال رفتن به خرید و فروش با گره هافمن.
ما قصد داریم نمی شود خواستار آنها را به گره دیگر، ما در حال رفتن به فراخوانی آنها درختان
که در آن ما در حال رفتن به نمایندگی از نماد خود را با یک کاراکتر،
فرکانس خود، تعدادی از ظهور، با یک عدد صحیح است.
ما در حال استفاده از آن به دلیل آن را دقیق تر از شناور.
و پس از آن ما باید یکی دیگر از اشارهگر به فرزند چپ و همچنین به عنوان فرزند راست.
یک جنگل، که ما دیدیم، فقط یک لیست پیوندی از درختان است.
در نهایت، زمانی که ما در حال ایجاد فایل ما قهر کردن،
ما می خواهیم جنگل ما را به فقط شامل 1 درخت -
1 درخت، 1 ریشه با فرزندان متعدد است.
در اوایل در زمانی که ما فقط در ساختن درخت هافمن ما،
ما با قرار دادن تمام گره ها را بر روی صفحه نمایش ما آغاز شده است
و گفت: ما قصد داریم به این گره،
در نهایت آنها در حال رفتن به برگ، و این نماد خود را این فرکانس است.
در جنگل ما اگر ما فقط باید 3 حرف، که یک جنگل از 3 درختان است.
و سپس به عنوان ما در بروید، هنگامی که ما افزود: پدر و مادر،
ما ساخته شده است جنگل از 2 درختان است.
ما 2 از این کودکان از جنگل ما برداشته شده و سپس آن را با یک گره پدر جایگزین
که تا به حال آن 2 گره به عنوان کودکان.
و بالاخره، آخرین مرحله خود را با مثال ما با به عنوان، BS، و CS
امر می تواند نهایی را به پدر و مادر،
و به همین ترتیب پس از آن است که تعداد کل درختان در جنگل تا 1، به ارمغان بیاورد.
آیا همه ببینید که چگونه شما شروع با درختان متعدد در جنگل
و در نهایت با 1؟ باشه. دانلود.
>> چه ما نیاز داریم برای پف؟
چیزی که ما باید انجام دهیم این است که اطمینان حاصل شود که، مثل همیشه، آنها را با ما از نوع حق ورودی
به طوری که ما در واقع می توانید این برنامه را اجرا کنید.
در این مورد، آنها در حال رفتن به ما دادن بعد از خط فرمان استدلال خود را
2: فایل را که ما می خواهیم از حالت فشرده خارج شده و خروجی از فایل فشرده.
اما زمانی که ما را مطمئن باشید که ما آنها عبور در مقدار سمت راست مقادیر،
ما می خواهیم اطمینان حاصل شود که ورودی یک فایل قهر کردن یا نه.
و سپس یک بار ما تضمین می کنند که آن را به یک فایل قهر کردن، پس از آن ما می خواهیم برای ساخت درخت ما
ساخت تا درخت به طوری که آن را منطبق درخت که شخصی که پیام را فرستاده ساخته شده است.
سپس بعد از ساخت درخت، سپس ما می توانیم مقابله با، 0s و 1S که آنها در گذشت
به دنبال کسانی که در کنار درخت ما دلیل آن را یکسان،
و پس از آن که پیام نوشتن، تفسیر بیت بازگشت به کاراکتر است.
و سپس در پایان از آنجا که ما در حال خرید و فروش با اشاره گرها در اینجا،
ما می خواهیم مطمئن شوید که ما هر گونه نشت حافظه ندارد
و این که ما همه چیز آزاد است.
>> اطمینان از استفاده مناسب کلاه قدیمی برای ما در حال حاضر است.
ما را در ورودی، که به نام فایل را به پف،
و پس از آن یک خروجی مشخص،
به طوری که نام فایل خروجی اغراق شده، خواهد شد که فایل متنی است.
که استفاده است. و در حال حاضر ما می خواهیم اطمینان حاصل شود که ورودی huffed یا نه.
فکر کردن به عقب، چیزی هست که در کد توزیع است که ممکن است به ما کمک کند
با درک اینکه آیا یک فایل huffed یا نه؟
اطلاعات در huffile.c در مورد Huffeader وجود دارد.
ما می دانیم که هر فایل قهر کردن Huffeader با آن با یک شماره سحر و جادو
همچنین به عنوان یک مجموعه ای از فرکانس برای هر نماد
و همچنین به عنوان یک کنترلی.
ما می دانیم که، اما ما نیز زیرچشمی نگاه کردن در dump.c زمان،
که در آن، آن را به یک فایل قهر کردن خواندن شد.
و بنابراین برای انجام این کار، آن را به حال برای بررسی اینکه آیا آن را واقعا huffed شد یا نه.
بنابراین شاید ما می تواند استفاده از dump.c به عنوان یک ساختار برای puff.c. ما
بازگشت به pset 4 زمانی که ما تا به حال copy.c فایل که در سه RGB کپی
و ما می دانیم که برای رمان پلیسی و تغییر اندازه تفسیر،
به همین ترتیب، آنچه که شما می توانید انجام دهید این است که فقط اجرای فرمان مانند CP dump.c puff.c
و استفاده از برخی از کد وجود دارد.
با این حال، آن را به عنوان سرراست از یک فرایند
برای ترجمه dump.c خود را به puff.c،
اما حداقل آن را به شما می دهد جایی برای شروع
در مورد چگونه به اطمینان حاصل شود که ورودی است که در واقع huffed یا نه
و همچنین چند چیز دیگر.
ما را تضمین استفاده مناسب و تضمین که ورودی huffed.
هر زمان که ما انجام داده ایم که ما انجام داده اند ما مناسب چک کردن خطا،
بنابراین بازگشت و ترک تابع اگر برخی از شکست رخ می دهد، اگر یک مشکل وجود دارد.
>> در حال حاضر آنچه ما می خواهیم انجام دهیم این است که ساخت درخت واقعی است.
اگر ما در جنگل نگاه کنید، 2 عملکرد اصلی وجود دارد
است که ما در حال رفتن به خواهید برای تبدیل شدن به آشنا با.
این گیاه تابع بولی وجود دارد که گیاهان غیر-0 درخت فراوانی در داخل جنگل ما.
و این کار وجود دارد که شما را در یک اشاره گر به یک جنگل و یک اشاره گر به یک درخت منتقل می شود.
سریع سوال: چگونه بسیاری از جنگل های شما را زمانی که شما در حال ایجاد یک درخت هافمن؟
جنگل ما این است که مانند بوم ما، درست است؟
بنابراین ما فقط رفتن به 1 جنگل است، اما ما در حال رفتن به درختان متعدد است.
بنابراین قبل از اینکه با شما تماس بوته، شما احتمالا می خواهید به جنگل خود را به.
یک فرمان وجود دارد که اگر شما را به forest.h در مورد چگونه شما می توانید جنگل را نگاه کنید.
شما می توانید یک درخت کاشت. ما می دانیم که چگونه به انجام این کار.
و پس از آن شما نیز می توانید یک درخت از جنگل انتخاب کنید،
از بین بردن یک درخت با کمترین وزن و دادن به شما اشاره گر به آن است.
فکر برگشت به زمانی که ما انجام می دهند به عنوان مثال خودمان،
هنگامی که ما به آن رسم، ما به سادگی فقط لینک های اضافه شده.
اما در اینجا فقط به جای اضافه کردن لینک،
فکر می کنم از آن که شما در حال از بین بردن 2 از آن گره ها و سپس جایگزینی آن توسط یکی دیگر.
به بیان است که در قوانین و مقررات از برداشت و کاشت،
شما در حال چیدن 2 درختان و سپس به کاشت دیگر درخت
است که آن 2 درخت است که شما به عنوان کودکان برداشت.
برای ساختن درخت هافمن، شما می توانید در نمادها و فرکانس در جهت به عنوان خوانده شده
چرا Huffeader می دهد که به شما،
به شما می دهد مجموعه ای از فرکانس است.
بنابراین شما می توانید پیش بروید و به چشم پوشی از هر چیزی با 0 در آن
چون ما 256 برگ در انتهای آن را نمی خواهم.
ما فقط می خواهم تعدادی از برگ هستند که شخصیت های
که در واقع در فایل استفاده می شود.
شما می توانید در آن نمادها به عنوان خوانده شده، و هر یک از آن دسته از نمادهایی است که غیر-0 فرکانس،
کسانی که در حال رفتن به درختان.
آنچه شما می توانید انجام دهید، در هر زمانی که شما در یک نماد فرکانس غیر-0 به عنوان خوانده شده
شما می توانید این درخت در جنگل گیاهان است.
هنگامی که شما کاشت درختان در جنگل، شما می توانید کسانی که درختان را به عنوان خواهر و برادر ملحق شوند،
بنابراین رفتن به کاشت، داشت و برداشت که در آن شما انتخاب کنید (2) و پس از آن کارخانه 1
که در آن 1 است که شما گیاه است که پدر و مادر از 2 کودک که شما برداشت.
بنابراین پس از آن نتیجه نهایی خود را برای رفتن به یک درخت تنها در جنگل است.
این که چگونه درخت خود را به شما ساخت.
>> چند چیز است که می تواند به اشتباه در اینجا وجود دارد
از آنجا که ما در حال برخورد با ساخت درختان جدید و خرید و فروش با اشاره گرها و چیزهایی مانند که.
قبل از زمانی که ما با اشاره گرها خرید و فروش می شد،
هر زمان که ما malloc'd ما می خواستیم تا مطمئن شوید که آن را به بازگشت ما یک مقدار اشاره گر NULL نیست.
بنابراین در چند مرحله در این فرایند وجود دارد که به چند مورد
که در آن برنامه های خود را می تواند شکست بخورد.
آنچه شما می خواهید برای انجام این کار این است که شما می خواهید مطمئن شوید که کسانی که اشتباهات شما رسیدگی،
و در تنظیمات آن می گوید: به آنها مسئولیت رسیدگی به آرامی،
نسخه قابل چاپ کردن یک پیام به کاربر به گفتن آنها را به همین دلیل این برنامه را به ترک
و پس از آن بی درنگ آن را ترک کنید.
برای انجام این کار دست زدن به خطا، به یاد داشته باشید که شما می خواهید به آن را چک کنید
هر بار که می تواند شکست وجود دارد.
هر وقت که شما در حال ساخت یک اشاره گر جدید
شما می خواهید مطمئن شوید که موفق.
قبل از آنچه که ما استفاده می شود برای انجام این کار یک اشاره گر جدید و malloc آن،
و پس از آن ما را بررسی کنید که آیا اشاره گر NULL است.
بنابراین قصد دارد به برخی از موارد که در آن شما می توانید که فقط،
اما گاهی اوقات شما در واقع فراخوانی یک تابع
و در داخل آن تابع، که، که انجام mallocing است.
در آن صورت، اگر ما نگاه به برخی از توابع در داخل کد،
برخی از آنها عبارتند از توابع بولی است.
در مورد انتزاعی اگر ما یک تابع بولی به نام صنایع غذایی،
در واقع، ما می توانیم که علاوه بر به انجام هر آنچه که صنایع غذایی می کند فرض کنیم،
از آنجایی که یک تابع بولی، آن را برمی گرداند درست یا غلط -
درست است اگر موفقیت آمیز باشد، نادرست اگر نه.
بنابراین ما می خواهیم به بررسی کنید که آیا مقدار بازگشتی از کفش درست است یا غلط.
اگر آن را نادرست، که بدان معنی است که ما قصد داریم به برخی از انواع پیام به چاپ
و سپس این برنامه را ترک کنید.
چیزی که ما می خواهیم انجام دهیم این است که بررسی مقدار بازگشتی از کفش.
اگر صنایع غذایی نادرست باز می گرداند، پس از آن ما می دانیم که ما به نوعی از خطا مواجه می شوند
و ما باید به ترک برنامه ما است.
یک راه برای انجام این کار این است که یک بیماری است که در آن عملکرد واقعی خود وضعیت خود را.
بگو و صنایع غذایی طول می کشد در X است.
ما می توانیم به عنوان یک شرط IF را (صنایع غذایی (x)).
در واقع، این بدان معناست که اگر در پایان از اجرای صنایع غذایی آن را می گرداند،
پس از آن ما می توانید این کار را به دلیل عملکرد برای ارزیابی صنایع غذایی انجام
به منظور ارزیابی شرایط است.
بنابراین پس از این که شما چگونه می توانید چیزی اگر تابع درست و موفق است.
اما هنگامی که شما در حال چک کردن خطا، شما فقط می خواهم به ترک اگر تابع مقدار false برگرداند.
آنچه شما می توانید انجام دهید این است که تنها اضافه کردن == نادرست و یا فقط اضافه کردن یک انفجار در مقابل آن
و سپس شما را (صنایع غذایی) دارند.
در درون آن بدن که شرایط شما را از دست زدن به خطا داشته باشد،
بنابراین، مانند: "این درخت ایجاد نمی کند" و سپس بازگشت 1 یا چیزی شبیه به آن.
آنچه را که می کند، این است که حتی اگر صنایع غذایی نادرست بازگشت -
بگو: صنایع غذایی می گرداند درست است.
سپس شما مجبور نیستید به صنایع غذایی را دوباره تماس بگیرید. این یک تصور غلط رایج است.
از آنجا که آن را در شرایط شما بود، آن را در حال حاضر مورد بررسی،
بنابراین شما در حال حاضر در نتیجه اگر شما با استفاده از درخت یا چیزی شبیه به آن داشته باشند
و یا گیاه و یا انتخاب و یا چیزی.
آن را در حال حاضر است که ارزش دارد. در حال حاضر اجرا شده است.
پس از آن مفید برای استفاده از توابع بولی را به عنوان شرط
چرا که خواه و یا شما نمی واقع اجرای بدنه حلقه،
آن را اجرا تابع به هر حال.
>> دوم ما را به آخرین مرحله در حال نوشتن این پیام را به فایل.
هنگامی که درخت هافمن ما ساخت، و سپس نوشتن پیام به فایل بسیار سرراست است.
این خیلی ساده است در حال حاضر فقط به دنبال 0s و 1S.
و این کار را با کنوانسیون ما می دانیم که در یک درخت هافمن 0s و سمت چپ نشان می دهد
و 1S نشان می دهد درست است.
بنابراین اگر شما در ذره ذره خواندن، هر زمان که شما می توانید یک 0
شما شاخه چپ، به دنبال و پس از آن هر بار که شما در 1 خواندن
شما در حال رفتن به دنبال شاخه سمت راست.
و پس از آن شما برای رفتن به ادامه دهید تا برگ
به این دلیل که برگ ها را در انتهای شاخه باشد.
چگونه می توانید به ما بگویید که آیا ایم ضربه یک برگ است یا نه؟
ما آن گفت: قبل از.
[دانشجوی] اگر اشاره گر NULL هستند. >> آره.
ما می توانیم بگویم اگر ما ضربه یک برگ در صورتی که اشاره گر به درختان هر دو سمت چپ و راست NULL.
کامل.
ما می دانیم که ما می خواهیم به خواندن در بیت بیت به فایل ما قهر کردن.
همانطور که ما قبل از dump.c دیدم، آنچه آنها انجام داد این است که آنها در ذره ذره خواندن را در فایل قهر کردن
و فقط چاپ خارج از آن بیت بودند.
ما قصد داریم به انجام آن است. ما قصد داریم به انجام چیزی است که کمی پیچیده تر است.
اما آنچه ما می توانیم انجام دهیم این است که ما می توانیم که کمی از کد که به بیت می خواند.
در اینجا ما صحیح به نمایندگی از بیت فعلی که ما در آن هستیم.
این طول می کشد مراقبت از تکرار تمام بیت ها در فایل تا زمانی که به شما ضربه انتهای فایل.
بر این اساس، پس از آن شما می خواهید به نوعی از تکرارکننده
برای گذشتن از درخت خود را.
و پس از آن در مورد اینکه آیا بیت 0 یا 1 است،
شما در حال رفتن به می خواهم که به تکرارکننده یا به سمت چپ حرکت می کند و یا حرکت آن به سمت راست
تمام راه را تا زمانی که شما برگ، به طوری که تمام راه را تا زمانی که گره ای است که شما در
به گره هر نقطه نیست.
چرا ما با یک فایل هافمن اما نه کد مورس؟
از آنجا که در کد مورس کمی از ابهام وجود دارد.
ما می تواند مانند، آه صبر کنید، ما ضربه نامه در طول راه، تا شاید این نامه ما،
در حالی که اگر ما همچنان فقط یک کمی طولانی تر، پس از آن ما می توانست ضربه نامه دیگری.
اما این اتفاق می افتد در رمز گزاری هافمن،
بنابراین ما می توانیم مطمئن باشند که تنها راهی است که ما قصد داریم به آمار یک شخصیت
است که اگر کودک چپ و راست آن گره NULL است.
>> در نهایت، ما می خواهیم برای آزاد کردن همه از حافظه ما.
ما به هر دو نزدیک به فایل قهر کردن می خواهم که ما خرید و فروش شده است با
و همچنین تمام درختان در جنگل ما حذف شده است.
بر اساس اجرای شما، شما احتمالا می خواهید به تماس حذف جنگل
به جای آن در واقع از طریق همه از درختان خود را رفتن.
اما اگر شما هر درخت به طور موقت، شما می خواهید به رایگان است که.
شما می دانید که کد شما بهترین است، بنابراین شما می دانید که در آن شما در حال تخصیص حافظه.
بنابراین اگر شما در شروع، حتی کنترل F'ing و برای malloc
دیدن هر زمان که شما malloc و مطمئن شوید که همه شما آزاد که
اما پس از آن فقط از طریق کد شما
درک که در آن شما ممکن است حافظه تخصیص داده شده است.
معمولا شما فقط ممکن است، می گویند: "در پایان از فایل من فقط رفتن به حذف جنگل در جنگل من،
بنابراین اساسا که حافظه، روشن است که،
"و پس از آن من هم رفتن به بستن فایل و پس از آن برنامه را در حال رفتن به ترک است."
اما این است که تنها زمانی که برنامه شما واریز شده است؟
خیر، زیرا گاهی اوقات ممکن است وجود داشته است یک خطا رخ داده است که.
شاید ما می تواند یک فایل را باز نمی شود و یا ما می تواند یکی دیگر از درخت را نمی
و یا به نوعی از خطا در فرآیند تخصیص حافظه اتفاق افتاد و پس از آن بازگشت NULL.
یک خطا رخ داده است و پس از آن ما بازگشت و ترک.
بنابراین پس از آن شما می خواهید مطمئن شوید که هر زمان ممکن است که برنامه شما می توانید ترک،
شما می خواهید برای آزاد کردن همه از حافظه شما وجود دارد.
این نه تنها در پایان از عملکرد اصلی است که شما کد خود را ترک می شود.
شما می خواهید به نگاه به هر مثال که کد خود را به طور بالقوه قبل از موعد ممکن است بازگشت
و پس از آن هر چه حافظه را حس می کند.
می گم (میدونم) که تو جنگل و بازگشت غلط به نام بود.
سپس شما احتمالا نمی خواهد نیاز به جنگل خود را به حذف
چون شما یک جنگل نشده است.
اما در هر نقطه در کد که در آن شما ممکن است قبل از موعد مقرر بازگشت
شما می خواهید مطمئن شوید که شما هر حافظه آزاد ممکن است.
>> بنابراین، هنگامی که ما در حال برخورد با آزاد کردن حافظه و نشت بالقوه،
ما می خواهیم که نه تنها استفاده از قضاوت ما و منطق ما
اما همچنین Valgrind برای تعیین اینکه آیا ایم آزاد همه از حافظه ما و یا به درستی استفاده کنید.
شما هم می توانید Valgrind در پف و اجرا و سپس شما را نیز از آن عبور کند
عدد سمت راست از خط فرمان استدلال به Valgrind.
شما می توانید این، اجرا، اما خروجی است که کمی مرموز است.
ما رو بدست کمی با املاء به آن استفاده می شود، اما ما هنوز نیاز به کمک کمی بیشتر،
بنابراین پس از آن در حال اجرا با یک پرچم چند مانند نشت بررسی کامل،
که احتمالا با ما به برخی از خروجی مفید در Valgrind.
>> سپس یکی دیگر از نوک مفید هنگامی که شما در حال اشکال زدایی فرمان تفاوت است.
شما می توانید پیاده سازی کارکنان از قهر کردن، دسترسی و اجرای آن در یک فایل متنی،
و سپس آن را به یک فایل باینری، باینری فایل قهر کردن خروجی، به صورت خاص است.
اگر شما پف خود را بر روی فایل باینری است که،
پس از آن در حالت ایده آل، خروجی فایل متنی شما است برای رفتن به یکسان
به یکی از اصلی که شما منتقل شوید.
در اینجا من با استفاده از hth.txt به عنوان مثال، که این مورد در تنظیمات خود صحبت.
که به معنای واقعی کلمه فقط HTH و پس از آن یک خط جدید است.
اما قطعا احساس و قطعا شما را تشویق به استفاده از نمونه های دیگر
فایل متنی خود را.
>> شما حتی می توانید شات شاید فشرده سازی و سپس به RPA
برخی از فایل های که شما را در املاء استفاده می شود مانند جنگ و صلح
یا جین آستن یا چیزی شبیه به آن - خواهد بود که نوع خنک - و یا قدرت های آستین،
نوع برخورد با فایل های بزرگتر به خاطر ما نمی خواهد آمد به آن
اگر ما با استفاده از ابزار بعدی در اینجا دستور ls-l.
ما به LS، که اساسا لیست تمام محتویات دایرکتوری جاری ما استفاده می شود.
پس از گذشت در-L پرچم در واقع نمایش به اندازه از آن فایل است.
اگر شما از طریق تنظیمات pset به، در واقع شما را قدم به قدم از طریق ایجاد فایل باینری،
از huffing آن است، و شما می بینید که برای فایل های بسیار کوچک
هزینه فضای فشرده سازی و ترجمه تمام آن اطلاعات
از همه فرکانس ها و چیزهایی مانند آن بیشتر از سود واقعی
فشرده سازی فایل ها در وهله اول.
اما اگر شما آن را اجرا بر روی برخی از فایل های متنی طولانی تر، و سپس شما ممکن است که شما شروع به گرفتن برخی از سود
فشرده سازی آن فایل ها.
>> و سپس در نهایت، ما باید GDB رفیق قدیمی ما، که قطعا رفتن به در دستی است بیش از حد.
>> آیا هر گونه سوال در مورد درخت قهر کردن و یا این روند، ما شاید از درختان
و یا هر گونه سؤال دیگر در پف Huff'n؟
باشه. من می مانم در اطراف برای یک بیت است.
>> با تشکر از همه. این مقاله 6 بود. و موفق باشید.
>> [CS50.TV]