[MUSIC پخش]
>> DAVID مالان: این CS50 است.
و این هر دو شروع و است end-- مانند literally-- تقریبا پایان
هفته ششم است.
>> من فکر کردم من می خواهم به اشتراک بگذارید کمی از حقیقت سرگرم کننده است.
من این رو از کشیده ام اطلاعات ترم گذشته تعیین شده است.
شما ممکن است به یاد که ما از شما می خواهیم در هر فرم مجموعه ای P اگر شما آنلاین تماشا کرده ام
و یا اگر شما در حضور شخص.
و در اینجا داده است.
بنابراین، امروز خیلی قابل پیش بینی بود.
اما ما می خواستیم به صرف کمی از زمان با شما با این حال.
آیا کسی می خواهم به حدس چرا این نمودار است تا jaggy، تا پایین، تا به پایین،
بنابراین به طور مداوم؟
هر یک از قله چه و فرورفتگی نشان؟
>> رسید [نامفهوم]
DAVID مالان: در واقع.
و amusingly بیشتر، خدای ناکرده، ما یکی از سخنرانی برگزاری در روز جمعه
در آغاز ترم، که آنچه ما می بینیم اتفاق می افتد.
بنابراین، امروز، ما در یک بیت جنبهی اطلاعات بیشتر در مورد ساختمان داده.
و به شما بیشتر از یک جامد را مدل ذهنی برای مشکلات در پنج،
که در حال حاضر است.
املای غلط، که در آن، ما به شما یک فایل متنی به دست شما برخی از 100000
به علاوه واژه های انگلیسی، و شما در حال رفتن به
به شکل از چگونه هوشمندانه آنها را بارگذاری در حافظه، به RAM، با استفاده از برخی از داده
ساختار از انتخاب شما.
>> در حال حاضر یک ساختار داده از جمله می تواند باشد، اما احتمالا باید باشد،
لیست نسبتا ساده مرتبط، که ما آن را معرفی و زمان آخرین.
و یک لیست پیوندی حداقل به حال یکی از مزایای بیش از یک آرایه.
یکی از مزایای چه یک لیست پیوندی مسلما؟
>> رسید درج.
>> DAVID مالان: درج.
چه چیزی شما را در آن چیست؟
>> رسید همه جا همراه لیست [نامفهوم].
>> DAVID مالان: خوب.
بنابراین شما می توانید یک عنصر در هر کجا وارد شما در وسط لیست می خواهید
بدون نیاز به زدن هر چیزی، که ما به این نتیجه رسیدند، در مرتب سازی ما
بحث، نیست لزوما چیز خوبی است،
زیرا زمان لازم برای حرکت در واقع همه کسانی که انسان به سمت چپ یا راست.
و به این ترتیب با یک لیست پیوندی، شما می توانید فقط با malloc تخصیص، یک گره جدید،
و پس از آن به روز رسانی یک زن و شوهر از pointers-- دو، سه عملیات max--
و ما قادر به شکاف کسی هستید در هر نقطه را به یک لیست.
>> چه چیز دیگری مزیت داشت درباره لیست پیوندی؟
آره؟
>> رسید [نامفهوم]
DAVID مالان: کامل.
کامل است.
این واقعا پویا.
و است که شما مرتکب نیست، در پیش است، تا اندازه ای ثابت
تکه از حافظه، مانند شما را مجبور با یک آرایه، حرکت صعودی که
این است که شما می توانید گره تنها در تخصیص تقاضا در نتیجه تنها با استفاده از فضای به اندازه
عنوان شما در واقع نیاز دارید.
در مقابل با یک آرایه، شما ممکن است به طور تصادفی خیلی کم اختصاص دهند.
و سپس آن را فقط رفتن به درد در گردن
به دوباره اختصاص یک آرایه بزرگتر جدید، کپی همه چیز بیش از، آزاد آرایه های قدیمی،
و پس از آن در مورد کسب و کار شما حرکت می کند.
یا بدتر از آن، شما ممکن است راه تخصیص حافظه بیش از شما در واقع نیاز،
و بنابراین شما در حال رفتن به یک بسیار کم جمعیت آرایه، پس به صحبت می کنند.
>> بنابراین یک لیست پیوندی به شما می دهد این مزایای استفاده از پویایی و انعطاف پذیری
با اضافه و حذف.
اما مطمئنا قیمت پرداخت می شود وجود داشته باشد.
در واقع، یکی از تم کاوش در مسابقه صفر
یک زن و شوهر از تجارت آف ما دیده ایم که تا کنون.
پس چه قیمت پرداخت می شود و یا یک است حرکت نزولی از یک لیست پیوندی؟
آره.
>> رسید بدون دسترسی تصادفی.
>> DAVID مالان: بدون دسترسی تصادفی.
اما چه کسی اهمیت میدهد؟
دسترسی تصادفی صدا نمی فوتی و فوری.
>> رسید [نامفهوم]
DAVID مالان: دقیقا.
اگر شما می خواهید به algorithm-- خاص
و اجازه دهید من در واقع پیشنهاد جستجوی دودویی به طور خاص، که
یکی از ما کاملا bit-- استفاده می شود اگر شما با دسترسی تصادفی را ندارد،
شما می توانید حساب ساده که نمی کنند پیدا کردن مانند عنصر وسط
و پریدن سمت راست آن.
شما به جای باید شروع در اولین عنصر و خطی از سمت چپ جستجو
به سمت راست اگر شما می خواهید برای پیدا کردن وسط یا هر عنصر دیگر.
>> رسید احتمالا حافظه بیشتر طول می کشد.
>> DAVID مالان: طول می کشد حافظه بیشتر است.
که در آن است که اضافی است هزینه که از در حافظه؟
>> رسید [نامفهوم]
DAVID مالان: دقیقا.
در این مورد در اینجا، ما تا به حال یک لیست پیوندی برای اعداد صحیح،
و در عین حال ما در حال دو برابر شدن مقدار حافظه
ما همچنین ذخیره سازی این اشاره گر نیاز دارند.
در حال حاضر کمتر از یک معامله بزرگ به عنوان ساختمانها خود را دریافت کنید بزرگتر
و شما ذخیره سازی تعداد نیست، بلکه شاید یک دانش آموز یا برخی از شیء دیگر.
اما نکته قطعا باقی مانده است.
و به این ترتیب تعدادی از عملیات در لیست های پیوندی نامیده می شدند
O بزرگ خطی n-- بودند.
چیزهایی مثل درج و یا جستجو و یا حذف در مورد یک عنصر
اتفاق افتاده است که در پایان است لیست طبقه بندی شده اند چه آن را یا نه.
>> گاهی اوقات شما ممکن است خوش شانس و در مرزهای بنابراین کمتر در این عملیات
ممکن است زمان ثابت باشد اگر شما همیشه به دنبال در عنصر اول،
به عنوان مثال.
اما در نهایت، ما وعده داده برای رسیدن به جام مقدس
ساختمان داده، و یا برخی از آن تقریب،
از طریق زمان ثابت است.
آیا ما می توانیم عناصر پیدا کردن و یا اضافه کردن عناصر و یا عناصر را از یک لیست را حذف کنم؟
ما باید کاملا دیده می شود.
و معلوم است که یک از مکانیسم های ما
رفتن به شروع به استفاده از امروز، استفاده سالانه در P مجموعه پنج،
است که در واقع بسیار آشنا.
به عنوان مثال، در صورتی که این یک دسته است کتاب آزمون، هر یک از آنها
یک دانش آموز اول نام و نام خانوادگی بر روی آن،
و من آنها را انتخاب کنید تا از در پایان امتحان،
و همه آنها زیبا هستی بسیار به صورت تصادفی،
و ما می خواهیم در مورد مرتب سازی بروید این آزمون به طوری که یک بار درجه بندی شده
آن را فقط خیلی آسان تر و سریعتر به آنها دست به عقب ها را
به دانش آموزان بر اساس حروف الفبا.
غرایز خود را چه می شود برای یک توده ای از امتحانات مثل این؟
>> خوب، اگر شما مانند من هستید، شما ممکن است ببینید که این متر است،
بنابراین من قصد دارم به نوعی از این قرار داده و به، اگر این جدول یا طبقه است که در آن من
من همه چیز گسترش out-- یا آرایه من really--
من ممکن است تمام خانم در آن وجود دارد قرار داده است.
اوه.
در اینجا یک A. است بنابراین من ممکن است قرار دادن به عنوان بیش از اینجا.
اوه.
در اینجا یکی دیگر از A. من قصد دارم به برای قرار دادن که بیش از اینجا.
در اینجا یک Z. اینجا M. دیگر و به این ترتیب است من ممکن است شروع به ساختن شمع مثل این.
و پس از آن شاید من می خواهم در بعد بروید و نوع بسیار nitpicky-سال نوری مرتب سازی بر
شمع فردی است.
اما نکته این است که من را نگاه در ورودی که من دست هستم
و من چند تا محاسبه را تصمیم بر اساس ورودی.
اگر آن را با یک شروع می شود، آن را بیش از وجود دارد.
اگر آن را با Z شروع می شود، آن را بیش از وجود دارد، و همه چیز را در میان.
>> بنابراین این یک تکنیک است که به طور کلی به عنوان hashing-- H-A-S-H-- شناخته شده
که به طور کلی به معنی در نظر گرفتن به عنوان ورودی و با استفاده از ورودی برای محاسبه
ارزش، به طور کلی تعداد، و تعداد شاخص به ذخیره سازی است
ظروف، مانند یک آرایه.
بنابراین به عبارت دیگر، من ممکن است داشته باشد تابع هش، که من در سر من انجام دهید،
که اگر من کسی را دیدن است نام که با شروع می شود،
من قصد دارم به نقشه به صفر در سر من.
و اگر من کسی را ببینید که با Z، من هستم رفتن به نقشه است که به 25 در سر من
و پس از آن قرار داده است که به آخرین ترین شمع.
>> در حال حاضر، اگر شما در مورد مغز من فکر می کنم اما یک برنامه C، چه تعداد می تواند
شما تکیه برای رسیدن به نتیجه همان؟
به عبارت دیگر، اگر شما حال ASCII کاراکتر A،
چگونه می توانم شما را تعیین چه سطل به آن را در؟
شما احتمالا نمی خواهید آن را به سطل 65، که
می خواهم بیش از وجود دارد بدون هیچ دلیل خوب است.
که در آن شما می خواهید برای قرار دادن از نظر ارزش ASCII آن؟
که در آن شما می خواهید برای انجام به ASCII آن ارزش به آمده تا با یک سطل دقیق
آن را در؟
>> رسید منهای A.
>> DAVID مالان: آره.
بنابراین منهای یک منهای به طور خاص 65 اگر آن را
A. سرمایه و یا اگر 98 آن حروف کوچک است.
و به این ترتیب بود که به ما اجازه می دهد، بسیار به سادگی و بسیار حساب شده،
چیزی را به یک سطل که می خواهم.
پس از آن که معلوم ما در واقع انجام این نیز حتی با آزمونها.
>> بنابراین شما ممکن است به خاطر شما دور خود نام همکار آموزش را بر روی جلد.
و نام TF را سازماندهی شدند به این ستون ها بر اساس حروف الفبا،
خب، باور کنید یا نه، زمانی که همه 80 به علاوه ما
با هم از شب های دیگر رو به کلاس، آخرین مرحله در فرآیند درجه بندی ما
است به هش آزمونها به یک بزرگ فضای طبقه در [نامفهوم]
و به وضع آزمونها همه از دقیقا منظور از TF خود
نام بر روی جلد، به دلیل سپس آن را خیلی آسان تر برای ما
برای جستجو از طریق خطی با استفاده از جستجو و یا نوعی از هوش و ذکاوت
برای TF برای پیدا کردن او و یا آزمونها دانش آموزان خود را.
>> بنابراین این ایده از هش کردن که شما خواهید دید است
بسیار قدرتمند است که در واقع بسیار امری عادی و بسیار بصری،
شاید بسیار شبیه به تقسیم و حل در هفته صفر بود.
من سریع به جلو به هکاتون چند سال پیش.
این Zamyla و چند بود دیگر دانش آموزان تبریک کارکنان
به عنوان آنها در آمد.
و ما یک دسته کامل از تاشو به حال جدول وجود دارد با نام برچسب ها.
و ما برچسب ها نام سازمان با مثل به عنوان بیش از وجود دارد
و ZS بیش از وجود دارد.
و به این ترتیب یکی از TFS بسیار هوشمندانه این را به عنوان دستورالعمل نوشت
برای روز.
و در هفته 12 از این ترم تمام معنا کامل و همه
می دانستم که چه باید بکنید.
اما هر زمان که شما صف در همان راه،
شما در حال اجرای همان مفهوم یک رشته هش.
بنابراین اجازه دهید آن را کمی به رسمی.
در اینجا یک آرایه است.
این رسم که کمی گسترده فقط به تصویر کشیدن، بصری،
که ما ممکن است رشته را در چیزی شبیه به این.
و این آرایه است به وضوح از اندازه 26 در کل.
و چیزی است که به نام جدول خودسرانه.
اما این فقط تفسیر یک هنرمند است از آنچه یک جدول هش ممکن است.
>> بنابراین یک جدول هش در حال حاضر در حال رفتن به یک ساختار داده ها در سطح بالاتر.
در پایان روز باید ببینیم که شما هستید
می توانید یک جدول هش، پیاده سازی آن بسیار شبیه به خط چک در
در یک هکاتون بسیار شبیه به این جدول برای مرتب سازی کتاب آزمون استفاده می شود.
اما یک جدول هش است مرتب کردن بر اساس این سطح بالا
مفهوم است که می تواند یک آرایه استفاده در زیر هود به پیاده سازی آن،
یا آن را می فهرست طول و حتی استفاده کنید، و یا شاید برخی از ساختارهای داده ای است.
و در حال حاضر که گرفتن theme-- است برخی از این مواد اولیه
مانند یک آرایه و این ساختمان مسدود کن از لیست طول
و دیدن چه چیز دیگری ما می توانیم ساخت در بالای آن، مانند مواد تشکیل دهنده
به یک دستور غذا، و بیشتر و بیشتر نتایج نهایی جالب و مفید است.
>> بنابراین با جدول هش ما ممکن است آن را اجرا
در حافظه pictorially شبیه به این، اما چگونه ممکن است آن را در واقع کد گذاری شود تا؟
خوب، شاید به سادگی این است.
اگر ظرفیت در همه کلاه است، فقط برخی از constant-- برای مثال 26،
برای 26 حرف از alphabet-- من ممکن است جدول متغیر من تماس بگیرید،
و من ممکن است ادعا می کنند که من قصد دارم به قرار داده ستاره کاراکتر در آن وجود دارد، و یا رشته ای.
پس از آن را به عنوان ساده به عنوان این که اگر شما می خواهید به پیاده سازی یک جدول هش.
و با این حال، این است که واقعا فقط یک آرایه.
اما باز هم، یک رشته هش جدول در حال حاضر چه می کنیم
تماس نوع داده انتزاعی که فقط مرتب کردن بر اساس لایه بندی شده ادراکی در بالا
از چیزی بیشتر دنیوی در حال حاضر می خواهم یک آرایه.
>> در حال حاضر، ما چگونه به در مورد حل مشکلات؟
خب، قبل از آن من تا به حال لوکس داشتن فضای میز به اندازه کافی در اینجا
به طوری که من می تواند قرار داده آزمونها در هر نقطه من می خواستم.
بنابراین به عنوان ممکن است به اینجا بروید.
ZS ممکن است به اینجا بروید.
خانم ممکن است به اینجا بروید.
و سپس من مقداری فضای اضافی بود.
اما این یک بیت از یک سمت راست تقلب است در حال حاضر به دلیل این جدول، اگر من واقعا
از آن به عنوان یک آرایه فکر است که فقط، رفتن به برخی از اندازه ثابت باشد.
>> بنابراین از لحاظ فنی، اگر من جلو تا مسابقه دانشجویی دیگر
و ببینید، آه، این شخص نام و نام خانوادگی شروع می شود بیش از حد،
من نوع می خواهم به آن را قرار داده است.
اما به محض این که من آن را اگر می شود وجود دارد، این جدول در واقع نشان دهنده یک آرایه،
من قصد دارم به لغو و یا ضربه بزند هر کس این مسابقه دانش آموزان است.
درست است؟
اگر این یک آرایه است، فقط یک چیز می تواند رفتن به در هر یک از این سلول ها یا عناصر.
و بنابراین من نوع از انتخاب کنید و را انتخاب کنید.
>> در حال حاضر قبل از من نوع فریب خورده و این یا من
فقط نوع انباشته آنها را در بالا به یکدیگر.
اما این که در آینده به پرواز در کد.
تا جایی که می تواند من را از دانش آموز دوم که نام
است اگر من تا به حال همه این است فضای میز در دسترس است؟
و من سه اسلات و از آن استفاده کرده اید به نظر می رسد فقط چند نفر دیگر وجود دارد.
چه کاری می توانید انجام دهید؟
رسید [نامفهوم]
DAVID مالان: آره.
شاید اجازه دهید فقط آن را ساده نگه دارید.
درست است؟
این جور نیست که در آن من می خواهم به آن را قرار داده.
بنابراین من قصد دارم به آن را قرار داده فنی که در آن B خواهند رفت.
در حال حاضر، البته، من شروع به خودم را به گوشه نقاشی.
اگر من به یک دانش آموز دریافت که نام است که در واقع B،
در حال حاضر B در حال رفتن به یک کمی نقل مکان کرد به جلو، به عنوان ممکن است رخ دهد، بله،
در صورتی که این B ​​است، در حال حاضر آن را به اینجا بروید.
>> و به این ترتیب این بسیار سریع می تواند تبدیل به مشکل،
اما این روش که در واقع به عنوان کاوش خطی اشاره شد،
به موجب آن شما فقط در نظر شما آرایه به طول خط باشد.
و شما فقط نوع پروب یا بازرسی هر یک از عناصر موجود
به دنبال یک نقطه در دسترس است.
و به محض اینکه شما پیدا یک، شما را رها در آن وجود دارد.
>> در حال حاضر، قیمت در حال حاضر پرداخت می شود برای این راه حل چیزی است؟
ما یک آرایه با اندازه ثابت، و وقتی که من وارد نام
به آن، حداقل در ابتدا، چه زمان در حال اجرا از درج
برای قرار دادن دانش آموزان آزمونها در سطل درست است؟
بزرگ O از چه؟
>> رسید N.
DAVID مالان: من شنیده O بزرگ N.
درست نیست.
اما ما از هم جدا خواهیم کسی را دست انداختن چرا در یک لحظه.
چه چیز دیگری ممکن بود؟
>> رسید [نامفهوم]
DAVID مالان: و به من اجازه انجام این کار را به صورت بصری.
بنابراین فرض کنید این نامه S. است
>> رسید این یکی است.
DAVID مالان: این یکی است.
درست است؟
این یک آرایه است که یعنی دسترسی تصادفی.
و اگر ما از این فکر می کنم به عنوان صفر و این را به عنوان 25،
و ما متوجه است که، اوه، اینجا ورودی S من،
من قطعا می تواند تبدیل S، یک کاراکتر اسکی،
به تعدادی مربوطه بین صفر و 25
و سپس بلافاصله آن را که در آن تعلق دارد.
>> اما البته، به زودی به عنوان من به دریافت نفر دوم که نام یک و یا B و یا C است
در نهایت، اگر من از کاوش خطی به عنوان راه حل من،
زمان در حال اجرا از درج در بدترین حالت
در واقع رفتن به محول به چه؟
و من آن را در اینجا می شنوید درست در اوایل.
رسید [نامفهوم]
DAVID مالان: پس از آن N واقع یک بار است شما یک مجموعه داده به اندازه کافی بزرگ است.
بنابراین، از یک سو، اگر آرایه شما به اندازه کافی بزرگ است
و اطلاعات خود را به اندازه کافی نادر است، شما این زمان ثابت زیبا.
اما به محض اینکه شما شروع به گرفتن عناصر بیشتر و بیشتر،
و فقط آماری شما بیشتر مردم با حرف
همانطور که از نام و یا حرف B، می تواند به طور بالقوه
محول را به چیزی خطی.
بنابراین کاملا بی نقص نیست.
بنابراین می تواند ما انجام می دهیم بهتر است؟
>> خب، چه شد ما راه حل قبل از زمانی که ما
می خواهم به پویایی بیشتر از چیزی شبیه به یک آرایه اجازه؟
رسید [نامفهوم]
DAVID مالان: چه معرفی به ما؟
آره.
بنابراین یک لیست پیوندی.
خوب، اجازه دهید ببینیم که چه چیزی مرتبط لیست ممکن است برای ما به جای انجام دهد.
خوب، اجازه دهید که ما پیشنهاد می کنیم رسم تصویر به شرح زیر است.
در حال حاضر این است مختلف عکس از یک مثال
از متن های مختلف، در واقع، که در واقع با استفاده از آرایه ای از اندازه 31.
و این کاربر به سادگی تصمیم به هش از رشته ها
بر روی نام فرد بر اساس نیست، اما بر اساس تولد خود را.
صرف نظر از ماه، آنها نمیفهمد اگر شما در اول ماه به دنیا
یا 31 از یک ماه، نویسنده خواهد شد که بر اساس مقدار hash،
تا که به گسترش این نام از یک بیت بیش از 26 نقاط ممکن است اجازه می دهد.
و شاید آن را کمی یکنواخت تر است از رفتن با حروف الفبا،
چون البته احتمالا وجود دارد بیشتر مردم در جهان با نام های
که شروع با از قطعا برخی از نامه های دیگر از حروف الفبا.
بنابراین شاید این است که کمی یکنواخت تر، فرض
توزیع یکنواخت از نوزادان در سراسر یک ماه.
>> اما، البته، این است که هنوز ناقص است.
درست است؟
ما با داشتن برخورد.
چند نفر در این ساختار داده ها هنوز هم هستند
داشتن تاریخ تولد همان حداقل شما بدون در نظر گرفتن ماه است.
اما آنچه نویسنده انجام می شود؟
خب، به نظر می رسد ما یک آرایه در سمت چپ به صورت عمودی کشیده شده،
اما تفسیر یک هنرمند فقط.
مهم نیست که در چه جهتی شما قرعه کشی یک آرایه، آن را هنوز هم یک آرایه.
آرایه ای از ظاهرا این چیست؟
>> رسید لیست پیوندی.
>> DAVID مالان: آره.
به نظر می رسد آن را آرایه ای از لیست پیوندی.
بنابراین دوباره، به این نقطه از مرتب کردن بر اساس استفاده از این ساختمان داده در حال حاضر
به عنوان مواد تشکیل دهنده به بیش راه حل های جالب،
شما کاملا می تواند یک اساسی، مانند یک آرایه،
و پس از آن چیزی بیشتر جالب مانند یک لیست پیوندی
و حتی آنها را به حتی ترکیب ساختار داده ها جالب تر است.
و در واقع، این بیش از حد به نام جدول هش،
به موجب آن آرایه است واقعا جدول هش،
اما این جدول هش است زنجیر، پس به صحبت می کنند،
که می تواند به رشد و یا کوچک در بر تعدادی از عناصر که می خواهید وارد کنید.
>> در حال حاضر، بر این اساس، آنچه که زمان در حال اجرا در حال حاضر؟
اگر من می خواهم به کسی وارد که روز تولد اکتبر 31 است،
کجا او برود؟
همه راست.
در پایین که در آن می گوید 31.
و این عالی است.
در آن زمان ثابت بود.
اما اگر ما شخص دیگری را پیدا که روز تولد است، بیایید ببینید،
اکتبر، نوامبر، دسامبر 31؟
که در آن است که او برای رفتن؟
همین.
دو گام هر چند.
که این ثابت هر چند نمی باشد؟
همه راست.
در حال حاضر در آن است.
اما در حالت کلی، مردم بیشتر اضافه می کنیم،
احتمالا، ما قصد داریم برای به دست آوردن برخورد بیشتر و بیشتر.
>> در حال حاضر این است که کمی بهتر است به دلیل از لحاظ فنی
در حال حاضر من می تواند در زنجیره است بدترین حالت چه مدت؟
اگر من N مردم را به این تر وارد ساختمان داده های پیچیده، n نفر،
در بدترین حالت آن را به N.
چرا؟
>> رسید از آنجا که اگر همه همان روز تولد،
آنها در حال رفتن به یک خط.
DAVID مالان: کامل.
این ممکن است کمی ساختگی، اما واقعا در بدترین حالت،
اگر هر کس همان روز تولد، با توجه به ورودی های شما داشته باشد،
شما در حال رفتن به یک زنجیره گسترده طولانی است.
و به این ترتیب، شما می توانید آن را به یک تماس هش جدول، اما واقعا آن را
فقط یک لیست گسترده مرتبط با زیادی از فضای هدر رفته.
اما به طور کلی، اگر ما فرض کنیم که حداقل تولدها uniform-- هستند
و آن را احتمالا نه.
من ساخت که تا.
اما اگر فرض کنیم، برای به خاطر بحث
که آنها، پس از آن در تئوری، اگر این نمایندگی عمودی است
از آرایه، و سپس امیدوارم شما رفتن به زنجیر که می دانید،
تقریبا همان طول که در آن هر یک از این نشان دهنده یک روز از ماه.
>> حال اگر 31 روز در ماه وجود دارد، این بدان معناست که زمان در حال اجرا من واقعا
O بزرگ N بیش از 31 است، که احساس بهتر از خطی می باشند.
اما آنچه یکی از ما بود تعهدات دو هفته
پیش هر زمان که آن را به بیان آمد زمان اجرای یک الگوریتم؟
فقط تنها در مدت بالا نگاه کنید.
درست است؟
31 قطعا مفید است.
اما این است که هنوز O بزرگ N.
اما یکی از تم مشکل تنظیم پنج
در حال رفتن به به اذعان کرد که مطلقا،
مجانبی، به لحاظ نظری این ساختار داده ها
از آن بهتر است فقط یک لیست گسترده مرتبط است.
و در واقع، در بدترین حالت، این جدول هش ممکن است به آن محول.
>> اما در دنیای واقعی، با ما انسان ها که مکینتاش خود و یا رایانه های شخصی یا هر چیز دیگری
و در حال اجرا هستند در دنیای واقعی نرم افزار بر روی داده های دنیای واقعی،
که الگوریتم می توانید به ترجیح می دهند؟
و یکی که مراحل پایان یا طول می کشد یکی طول می کشد که N 31 مرحله تقسیم می
برای پیدا کردن برخی از قطعه ای از داده ها و یا برای نگاه کردن به برخی از اطلاعات؟
منظور من، مطلقا 31 می سازد تفاوت در جهان واقعی است.
این 31 برابر سریعتر است.
و ما انسان ها قطعا رفتن به قدر.
>> بنابراین دوگانگی درک بین در واقع وجود دارد
صحبت کردن در مورد چیزهایی که از لحاظ نظری و مجانبی که قطعا
ارزش ما به عنوان دیده می شود، اما در دنیای واقعی،
اگر شما در مورد ساخت فقط مراقبت خوشحال انسان برای ورودی به طور کلی،
شما ممکن است به خوبی می خواهم به شرایط این واقعیت است که، بله، این خطی است،
اما آن را 31 برابر سریعتر از خطی ممکن است.
و بهتر از آن، ما نه تنها به انجام کاری دلخواه مانند تاریخ تولد،
ما می تواند کمی صرف زمان و هوش و ذکاوت بیشتری
و فکر می کنم در مورد آنچه که ممکن است انجام دهید، نام فرد داده می شود و شاید
تاریخ تولد خود را به ترکیب آن مواد تشکیل دهنده به شکل چیزی
که واقعا تر لباس و کمتر jaggy،
تا به این تصویر از صحبت در حال حاضر نشان می دهد ممکن است.
چگونه می تواند از این پیاده سازی می کنیم در کد؟
خوب، اجازه دهید که ما پیشنهاد می کنیم فقط قرض برخی از نحو ایم
تا کنون چند بار استفاده.
و من قصد دارم برای تعریف یک گره، که دوباره
یک اصطلاح عمومی برای برخی است ظرف برای برخی از ساختمان داده.
من قصد دارم به پیشنهاد که یک رشته است که در آن وجود دارد.
اما ما قصد داریم به شروع مصرف کسانی که آموزش چرخ فعال کن.
>> هیچ کتابخانه تر CS50 واقعا، مگر اینکه شما می خواهید
برای استفاده از آن برای نهایی خود را پروژه، که خوب است،
اما در حال حاضر ما در حال رفتن به جلو و عقب پرده و می گویند که تنها یک ستاره کاراکتر است.
بنابراین کلمه است برای رفتن به وجود نام شخص مورد نظر.
و در حال حاضر من یک لینک در اینجا به گره بعدی
به طوری که این نشان دهنده هر یک از گره ها
در زنجیره ای، به طور بالقوه، یک لیست پیوندی.
>> و در حال حاضر چگونه می توانم اعلام جدول هش خود را؟
چگونه این ساختار کل اعلام کنم؟
خب، واقعا، بسیار شبیه به من استفاده از یک اشاره گر فقط به عنصر اول لیست
قبل از آن، به طور مشابه می تواند من فقط می گویند من فقط نیاز به یک دسته از اشاره گر
برای پیاده سازی این جدول هش کامل.
من قصد دارم به یک آرایه جدول نام برای جدول هش.
آن را به اندازه ظرفیت باشد.
که چگونه بسیاری از عناصر می تواند در آن جا داد.
و هر یک از این عناصر در این آرایه است برای رفتن به یک ستاره گره.
چرا؟
خب، در این تصویر، چه من اجرای جدول هش عنوان
به طور موثر در آغاز فقط این آرایه است که ما به صورت عمودی کشیده شده ام،
هر یک از مربع ها که نشان دهنده یک اشاره گر.
که آنهایی که اسلش داشته از طریق آنها فقط تهی.
و آنهایی که فلش به راست
اشاره گر به گره های واقعی واقعی، بنابر این شروع یک لیست پیوندی.
>> بنابراین در اینجا، پس از آن، این است که چگونه ممکن است ما پیاده سازی یک جدول هش که
پیاده سازی زنجیره جداگانه.
هم اکنون می توانید ما بهتر؟
کلیه حقوق من قول داده است که آخرین بار ما می تواند رسیدن به زمان ثابت.
و من این به شما زمان ثابت در اینجا،
اما پس از آن گفت: واقعا نمی زمان ثابت به دلیل آن را هنوز هم
وابسته به تعداد تعداد عناصر
شما در حال ورود به ساختار داده ها.
اما فرض کنید که ما این را انجام داد.
به من اجازه رفتن به صفحه بیش از اینجا.
اجازه دهید من نیز این پروژه تا اینجا، روشن صفحه نمایش، و گمان می کنم این بود.
فرض کنید من می خواستم برای وارد کردن نام و نام خانوادگی Daven در به ساختار داده ام.
>> بنابراین من می خواهم برای وارد کردن یک رشته Daven به ساختار داده ها.
چه می شود اگر من استفاده نمی هش جدول، اما من با استفاده از
چیزی که بیشتر درخت مانند مانند یک درخت خانواده، که در آن
شما باید برخی از ریشه در گره های بالا و پس از آن و برگ
که به رو به پایین و به سمت خارج.
فرض کنید پس از آن، که من می خواهید برای وارد کردن در Daven
به آنچه در حال حاضر یک لیست خالی است.
من قصد دارم به انجام موارد زیر: من هستم برای ایجاد یک گره در این خانواده
درخت مانند ساختار داده است که به نظر می رسد کمی شبیه به این، که هر کدام
مستطیل است، اجازه دهید بگویم، در حال حاضر 26 عناصر در آن است.
و هر یک از سلول در این آرایه است که
برای نشان دادن نامه ای از حروف الفبا.
>> به طور خاص، من قصد دارم برای درمان این است A، B پس از آن، و سپس C، D و سپس،
این یکی در اینجا.
پس این است که به طور موثر نشان نامه D.
اما برای وارد کردن همه این Daven نام من نیاز به انجام کمی بیشتر.
بنابراین من برای اولین بار از رفتن به هش، پس به صحبت می کنند.
من قصد دارم در این نامه اولین نگاه در این Daven است که به وضوح D،
و من قصد دارم به تخصیص یک گره که به نظر می رسد
مانند this-- یک مستطیل بزرگ مناسب به اندازه کافی در تمام حروف الفبا.
>> حالا D انجام شده است.
در حال حاضر A. D-A-V-E-N هدف است.
بنابراین در حال حاضر آنچه که من قصد دارم برای انجام این کار است.
به محض این که من اطلاع D آغاز شده هیچ اشاره گر وجود دارد.
این ارزش زباله در حال حاضر، یا من ممکن است آن را مقدار دهی اولیه به تهی.
اما به من اجازه ادامه با این ایده ساخت یک درخت.
به من اجازه تخصیص یکی دیگر از این گره های که دارای 26 عنصر در آن است.
>> و شما می دانید چه؟
اگر این فقط یک گره در حافظه است که من با malloc ایجاد شده، با استفاده از یک ساختار
همانطور که ما به زودی خواهید دید، من قصد دارم به انجام this--
من قصد دارم به رسم فلش از چیزی که D را نشان داده
این گره جدید است.
و در حال حاضر، برای اولین بار بعد حرف در نام Daven است،
V-- D-A-V-- من قصد دارم به جلو بروید و رسم گره دیگر شبیه به این،
به موجب آن، عناصر V در اینجا، که ما برای جلب اوه instance--.
ما نمی خواهد وجود دارد را جلب کند.
آن را به اینجا بروید.
>> پس از آن ما در حال رفتن به در نظر این به V.
و سپس در اینجا ما قصد داریم به شاخص از V به آنچه که ما را در نظر E.
و سپس از اینجا ما قصد داریم به به یکی از این گره های اینجا.
و در حال حاضر ما یک سوال برای پاسخ.
من نیاز به نوعی نشان می دهد که ما در پایان رشته Daven هستید.
بنابراین من فقط می تواند آن را ترک تهی.
>> اما اگر ما به Daven نام و نام خانوادگی نیز، که
است، همانطور که ما گفته ایم، داونپورت؟
پس چه می شود اگر Daven است در واقع یک زیر رشته،
یک پیشوند از یک رشته بسیار طولانی؟
ما نمی توانیم فقط به طور دائم می گویند هیچ چیزی در جریان است
برای رفتن وجود دارد، چرا که ما می تواند هرگز یک کلمه مانند داونپورت وارد
در این ساختار داده ها
>> بنابراین آنچه که ما می تواند انجام دهد به جای است درمان هر یک از این عناصر
به عنوان شاید داشتن دو عناصر داخل آنها.
یک اشاره گر است، در واقع، که من انجام شده است.
بنابراین هر یک از این جعبه فقط یک سلول نیست.
اما اگر بالا one-- یکی پایین است
رفتن به تهی، به دلیل هیچ داونپورت فقط رتبهدهی نشده است وجود دارد.
چه می شود اگر یکی از بالا برخی از ارزش ویژه است؟
و آن را برای رفتن به یک کمی سخت به آن اندازه این قرعه کشی.
اما فرض کنید که این فقط یک علامت چک است.
را بررسی کنید.
D-A-V-E-N یک رشته است در این ساختار داده ها.
>> در همین حال، اگر من فضای بیشتری داشت در اینجا، من می توانم P-O-R-T انجام دهید،
و من می توانم چک در گره قرار داده که حرف T در پایان بسیار.
پس این است که انبوه پیچیده، به دنبال ساختار داده ها.
و دست خط من قطعا کمک نمی کند.
اما اگر من می خواستم به وارد کردن چیزی دیگری، در نظر گرفتن آنچه که ما انجام می دهند.
اگر ما می خواستیم برای قرار دادن دیوید در، ما می خواهم از همین منطق، D-A-V را دنبال،
اما در حال حاضر من می خواهم در آینده اشاره عنصر نه از E است، اما از من به D.
پس برای رفتن به وجود گره در این درخت.
ما قصد داریم به malloc تماس است.
اما من نمی خواهم به یک ظروف سرباز یا مسافر کامل از این تصویر.
بنابراین اجازه دهید به جای در یک نگاه که از پیش فرموله شده است
مثل این که با نقطه نیست، نقطه، نقاط، اما فقط به صورت مختصر آرایه.
اما هر یک از گره ها در این درخت در اینجا
نشان دهنده thing-- همان آرایه ای از اندازه ری 26.
>> یا اگر ما می خواهیم به واقعا مناسب در حال حاضر، چه
اگر نام کسی را به عنوان آپوستروف، اجازه دهید
فرض کنیم که هر گره در واقع تا مانند 27 شاخص در آن، نه فقط 26.
پس این در حال حاضر است برای رفتن به یک داده ساختار به نام trie-- T-R-I-E.
درخت، است که ظاهرا در طول تاریخ نام هوشمندانه برای یک درخت
که برای بهینه سازی بازیابی، که البته،
با I-E املای پس از آن درخت.
اما تاریخ این درخت است.
>> بنابراین یک درخت این درخت مانند داده است ساختار مانند یک درخت خانواده
که در نهایت مانند که رفتار می کند.
و در اینجا فقط یک مثال دیگر از یک است تمام دسته از نام های افراد دیگر است.
اما سوال در حال حاضر در دست است چه
ما با معرفی مسلما بیشتر به دست آورد ساختار داده های پیچیده، و یک،
رک و پوست کنده، که با استفاده از مقدار زیادی از حافظه.
>> از آنجا که حتی اگر، در حال حاضر، من فقط هستم
با استفاده از اشاره گر ها D'و و V و Es و NS،
من هدر دادن یک معامله از مقدار زیادی از حافظه.
اما جایی که من صرف یک منبع، من تمایل به انجام دست آوردن دوباره یکی دیگر از.
پس اگر من صرف فضای بیشتر، آنچه احتمالا به این امید؟
که من هزینه های کمتر چه؟
رسید زمان کمتر.
DAVID مالان: زمان.
حالا چرا ممکن است؟
خب، چه درج شده است زمان، از نظر O بزرگ در حال حاضر،
از یک نام مانند Daven یا داونپورت و یا دیوید؟
خوب، Daven پنج مرحله بود.
داونپورت خواهد بود نه گام، بنابراین این امر می تواند گام های چند.
دیوید خواهد بود پنج مرحله نیز هست.
بنابراین کسانی که بتن اعداد، اما مطمئنا وجود دارد
حد بالا در طول نام کسی.
و در واقع، در مشکل مجموعه از پنج خصوصیات،
ما قصد داریم به پیشنهاد که آن چیزی
که شخصیت های 40 و برخی از عجیب و غریب است.
>> در واقع، هیچ کس نام بی نهایت طولانی،
است که می گویند که طول نام و یا طول یک رشته ممکن است ما
باید برخی از دولت ساختار مسلما چه؟
این ثابت است.
درست است؟
این ممکن است یک ثابت بزرگ مانند 40-چیزی، اما آن ثابت است.
و هیچ وابستگی به چه تعداد نام دیگر در این ساختار داده ها می باشد.
به عبارت دیگر، اگر من می خواستم به در حال حاضر وارد
کولتون یا جبرئیل و یا راب یا Zamyla یا آلیسون و یا بلیندا و یا هر نام دیگر
از کارکنان را به این داده ها ساختار، زمان در حال اجرا است
از قرار دادن نام های دیگر رفتن به در همه نهفته است
توسط چگونه بسیاری از عناصر دیگر هستند در ساختار داده ها در حال حاضر؟
این طور نیست.
درست است؟
از آنجا که ما در حال به طور موثر با استفاده از این چند لایه جدول هش.
و زمان اجرای هر یک از این عملیات
وابسته به تعداد نمی باشد. عناصری که در ساختار داده ها هستند
یا که در نهایت رفتن در ساختار داده شود،
اما در طول آنچه به طور خاص؟
>> رشته بودن درج شده است، که می کند را
این مجانبی ثابت O بزرگ time-- یک.
و رک و پوست کنده، فقط در در دنیای واقعی، این
به معنی قرار دادن نام Daven طول می کشد مثل پنج مرحله، یا نه داونپورت
مراحل، یا دیوید پنج مرحله.
که زیبا رفو بار کوچک در حال اجرا.
و، در واقع، که بسیار چیز خوبی است، به ویژه هنگامی که
آن را وابسته به کل نیست تعدادی از عناصر در آن وجود دارد.
پس چگونه ممکن است که ما از این اجرا نوع ساختار در کد؟
این کمی بیشتر پیچیده است، اما هنوز هم آن را
فقط استفاده از بلوک های ساختمان اصلی.
من قصد دارم به دوباره تعریف گره ما به شرح زیر است:
بولی نامیده می شود و این word-- می تواند هر چیزی گفته می شود.
اما بولی نشان دهنده آنچه که من به عنوان یک علامت چک کشید.
بله.
این پایان یک رشته است در این ساختار داده ها.
>> و، البته، ستاره گره با اشاره به کودکان وجود دارد.
و، در واقع، درست مثل یک درخت خانواده، شما
به گره در نظر که به حلق آویز کردن
از پایین برخی از پدر و مادر عنصر به کودکان.
و به این ترتیب کودکان در حال رفتن به یک مجموعه ای از 27، یکی از 27
تنها بودن برای آپوستروف.
ما قصد داریم به مرتب کردن بر اساس از موارد خاص است.
بنابراین شما می توانید برخی از آنها دارای نام با آپوستروف.
شاید حتی خط تیره باید در وجود دارد، اما شما
در ص 5 مجموعه ما فقط مراقبت ببینید درباره نامه ها و نشانه اپوستروف.
>> و سپس چگونه شما نماینده ساختار داده ها خود را؟
چگونه می توانم به شما نشان ریشه این درخت، پس به صحبت می کنند؟
خوب، فقط با یک لیست پیوندی را دوست دارم، شما نیاز به یک اشاره گر به اولین عنصر.
با درخت شما فقط نیاز به یک اشاره گر به ریشه این درخت.
و از آنجا شما می توانید هش راه خود را به پایین عمیق تر و عمیق تر
به هر گره دیگر در ساختار.
بنابراین به سادگی با این می ما نماینده که ساختار.
>> در حال حاضر Meanwhile-- اوه، سوال.
>> رسید کلمه بولی چیست؟
>> DAVID مالان: کلمه بولی است فقط این تجسم C
از آنچه من توصیف در این کادر در اینجا، هنگامی که
من شروع به تقسیم هر یک از عناصر آرایه را به دو تکه.
یک اشاره گر به گره بعدی است.
دیگر باید چیزی شبیه به یک جعبه چک
می گویند بله، یک وجود دارد کلمه Daven که در اینجا به پایان می رسد،
چون ما نمی خواهیم، در حال حاضر، دیو.
>> حتی اگر دیو است برای رفتن به یک کلمه مشروع، او در این درخت نمی
هنوز.
و D است یک کلمه نیست.
و D-A است یک کلمه یا یک نام نیست.
بنابراین علامت چک فقط یک بار به شما نشان می دهد
ضربه این گره است مسیر قبلی از شخصیت
در واقع یک رشته که شما قرار داده ایم.
به طوری که تمام بولی است در حال انجام برای ما وجود دارد.
>> هر گونه سؤال دیگر در تلاش؟
آره.
>> رسید همپوشانی چیست؟
اگر شما یک دیو و Daven چه؟
DAVID مالان: کامل.
اگر شما یک دیو و Daven چه؟
بنابراین اگر ما وارد است، می گویند که یک نام مستعار، برای David-- Dave-- D-A-V-E؟
این است که در واقع فوق العاده ساده است.
بنابراین ما تنها رفتن به چهار مرحله.
D-A-V-E. و چه چیزی به من انجام یک بار به من ضربه که گره چهارم؟
فقط رفتن به تیک بزنید.
ما در حال حاضر خوب به آن بروید.
انجام می شود.
چهار مرحله.
زمان ثابت مجانبی.
و در حال حاضر ما نشان داده ایم که هر دو دیو و Daven رشته در ساختار هستند.
بنابراین یک مشکل نیست.
و توجه کنید که چگونه حضور از Daven انجام آن را ندارد
را هر زمان بیشتر یا کمتر زمان برای دیو و بالعکس.
>> پس چه چیز دیگری می تواند ما در حال حاضر انجام می دهید؟
ما این استعاره قبل استفاده کرده اید سینی های نمایندگی چیزی.
اما معلوم است که پشته از سینی است که در واقع
نمایشی از داده انتزاعی دیگر type-- ساختمان داده سطح بالاتر
که در پایان روز است فقط مانند یک آرایه یا لیست پیوندی
و یا چیزی بیشتر دنیوی.
اما جالب تر مفهوم مفهومی.
پشته، مثل این سینی اینجا در مدر،
به طور کلی نام فقط that-- پشته.
>> و در این نوع از ساختمان داده شما دو operations--
شما باید یک فشار نامیده می شود برای اضافه کردن چیزی به پشته،
مانند قرار دادن سینی دیگر پشت در بالای پشته.
و سپس پاپ، که به معنی شما را بالاترین سینی کردن.
اما چه کلیدی در مورد پشته است که آن را کردم این ویژگی کنجکاو.
به عنوان سالن غذاخوری کارکنان هستند مجددا مرتب و سینی برای وعده بعدی غذا،
چه خواهد بود درست است در مورد اینکه چگونه دانش آموزان
با این ساختار داده ها ارتباط برقرار کنند؟
رسید آنها در حال رفتن به پاپ یکی کردن.
DAVID مالان: آنها در حال رفتن به پاپ یکی کردن، امیدوارم بالا.
در غیر این صورت آن را فقط به نوع احمقانه برای رفتن تمام راه را به پایین.
درست است؟
ساختار داده ها واقعا اجازه نمی دهد شما برای گرفتن سینی پایین حداقل
به راحتی.
بنابراین این کنجکاو وجود دارد اموال را به پشته
که آخرین مورد در است رفتن به یکی از اولین.
و دانشمندان کامپیوتر تماس بگیرید اولین بار از این LIFO-- گذشته در خارج.
و آن را در واقع اختصاص برنامه های جالب.
این لزوما به عنوان برخی از آشکار دیگران، اما می توان آن را، در واقع، مفید باشد،
و می توان آن را، در واقع، به اجرا در یک زن و شوهر از راه های مختلف.
>> بنابراین یکی، و در واقع، اجازه من به شیرجه رفتن نه به که.
بیایید به جای این کار را انجام.
بیایید در یک نگاه که تقریبا همان ایده است، اما آن را عادلانه تر کم است.
درست است؟
اگر شما یکی از این بچه ها فن هستید یا دختران که واقعا دوست دارد محصولات اپل
و شما را تا در 3:00 بیدار به خط کردن در برخی از فروشگاه
برای دریافت آخرین آی فون، شما ممکن است مثل این صف.
>> در حال حاضر یک صف بسیار عمدا به نام.
این یک خط به این دلیل وجود دارد برخی از انصاف به آن.
درست است؟
این نوع را مکیده اگر شما در فروشگاه اپل برای اولین بار وجود دارد
اما شما به طور موثر پایین ترین سینی زیرا کارکنان اپل در آن زمان
پاپ آخرین کسی که در واقع در خط کردم.
پس پشته و صف، حتی اگر عملکرد آنها نوعی از same-- هستید
آن را فقط به این مجموعه است منابع که
رفتن به رشد و shrink-- وجود دارد این جنبه انصاف به آن،
حداقل در دنیای واقعی، که در آن عملیات ورزش
اساسا متفاوت است.
stack-- یک صف rather-- است گفت: به
دو عملیات: N صف و صف د.
یا شما می توانید آنها را هر تعداد از چیزها.
اما شما فقط می خواهید را به تصرف این تصور که یکی اضافه کردن
و در نهایت کم کردن.
>> در حال حاضر در زیر هود، هر دو پشته و یک صف می تواند اجرا شود چگونه؟
ما نمی خواهد به کد بروید آن را به دلیل سطح بالاتر
ایده این است که نوعی از بیشتر آشکار است.
منظور من، چه چیزی انسان را انجام دهید؟
اگر من اولین کسی هستم در اپل ذخیره و این درب جلو است،
شما می دانید، من قصد دارم به اینجا ایستاده.
و شخص بعد رفتن به اینجا ایستاده.
پس چه ساختار داده خود را به یک صف آشنایی؟
>> رسید یک صف.
DAVID مالان: خوب، یک صف.
مطمئن شوید.
چه چیز دیگری؟
>> رسید لیست پیوندی.
>> DAVID مالان: A مرتبط شما می توانید از لیست اجرا.
و یک لیست پیوندی خوب است زیرا پس از آن است می توان آن را بلند خودسرانه رشد به عنوان مخالف
به داشتن مقداری ثابت از مردم در فروشگاه.
اما شاید یک عدد ثابت از مکان های مشروع است.
از آنجا که اگر آنها فقط مثل 20 باید اپل در روز اول، شاید
آنها فقط نیاز به یک آرایه ای از اندازه 20 برای نشان دادن که صف، که
فقط می گویند در حال حاضر زمانی که ما شروع به صحبت کردن در مورد این مشکلات در سطح بالاتر،
شما می توانید پیاده سازی آن در هر تعداد از راه.
و احتمالا فقط رفتن به وجود یک تجارت را در فضا و زمان
و یا فقط در پیچیدگی کد خود را.
>> چه در مورد پشته؟
خب، پشته، ما دیده ایم بیش از حد فقط می تواند این سینی باشد.
و شما می توانید از این آرایه پیاده سازی.
اما در برخی از نقطه در صورت استفاده از یک آرایه، آنچه اتفاق می افتد به سینی
شما در حال تلاش برای قرار دادن پایین؟
همه راست.
شما تنها به رفتن قادر به رفتن تا بالا.
و من در ماتر فکر می کنم آنها در واقع در آن باز احتمالا.
پس در واقع، آن را تقریبا مثل مادر با استفاده از
آرایه ای از اندازه ثابت، چون شما فقط می توانید
جا بسیاری از سینی را در آن باز کردن در دیوار پایین زانو مردم است.
و به طوری که ممکن است گفته می شود یک آرایه،
اما ما قطعا می تواند پیاده سازی است که به طور کلی با یک لیست پیوندی.
>> خب، چه در مورد ساختار دیگری داده؟
اجازه بدهید من را بالا بکشد یکی دیگر بصری در اینجا.
چیزی شبیه به این یکی چطور است؟
چرا ممکن است آن را مفید باشد نیست چیزی به عنوان به عنوان یک درخت فانتزی، که
ما دیدم این گره بسیار گسترده ای داشتند، که هر کدام در یک آرایه است؟
اما اگر ما چیزی بیش از انجام به سادگی، مانند یک درخت خانواده مدرسه قدیمی،
هر یک از گره ها که در اینجا است فقط ذخیره سازی یک عدد است.
در عوض از یک نام یا یک نسل است فقط ذخیره سازی یک عدد مانند این.
>> خب، ما با استفاده از اصطلاحات مخصوص یک صنف در ساختمان داده هر دو تلاش می کند است
و درختان، که در آن یک درخت، دوباره، است فقط یک گره که آرایه ها،
هنوز هم چیزی است که شما ممکن است استفاده از ابتدائی
زمانی که شما یک خانواده ساخته شده برگ tree-- و ریشه
از درخت و فرزندان پدر و مادر و خواهر و برادر آن.
و ما ممکن است یک درخت پیاده سازی، به عنوان مثال، به عنوان صرفا به عنوان این.
درخت، اگر آن را به عنوان یک گره، یکی از این محافل است که تعداد،
آن را نخواهیم داشت یک اشاره گر است، اما دو.
و به محض اینکه شما اضافه یک اشاره گر دوم، شما
در واقع می تواند در حال حاضر مرتب سازی بر را از داده های دو بعدی
ساختار در حافظه است.
بسیار شبیه به دو بعدی آرایه، شما می توانید
دارای نوع دو بعدی لیست های پیوندی، اما آنهایی که
که یک الگوی دنبال که در آن هیچ چرخه وجود دارد.
این واقعا یک درخت با یک است راه پدربزرگ و مادر بزرگ تا در اینجا و پس از آن
برخی از پدر و مادر و فرزندان و نوه و بزرگ نوه.
و غیره.
>> اما آنچه واقعا شسته و رفته در مورد این بیش از حد، فقط به کسی را دست انداختن شما را با یک بیت از کد،
بازگشت فراخوان از چندی بازگشت، به موجب آن
شما ارسال نامه تابع که خود می نامد.
این یک فرصت زیبا است برای پیاده سازی چیزی
مانند بازگشت، به دلیل در نظر گرفتن این.
>> این یک درخت است.
و من کمی مقعد با توجه بوده است من اعداد صحیح را به خیابان قرار داده است.
به طوری که آن را به یک ویژه name-- یک درخت جستجوی دودویی.
در حال حاضر ما از باینری شنیده ام جستجو، اما می تواند شما
کار عقب از نام این چیزی است؟
الگوی چگونه من چیست اعداد صحیح را به این درخت قرار داده؟
این دلخواه نیست.
برخی از الگو وجود دارد.
آره.
>> رسید کوچکتر در سمت چپ.
>> DAVID مالان: آره.
کوچکتر در سمت چپ می باشد.
آنهایی که بزرگتر در سمت راست هستند.
چنین است که یک عبارت صحیح است پدر و مادر بیشتر از کودک سمت چپ آن است،
اما کمتر از فرزند راست آن است.
و این تنهایی است که حتی یک تعریف لفظی بازگشتی
زیرا شما می توانید درخواست که همان منطق به هر گره
و آن را تنها پایین ، یک مورد پایه اگر شما
خواهد شد، هنگامی که شما ضربه یکی از برگ، پس به صحبت،
که در آن یک مرخصی بدون فرزند بیشتر است.
>> در حال حاضر چگونه ممکن است تعداد 44 را پیدا کردید؟
شما را در ریشه شروع و می گویند، HM.
55 44 است نه بنابراین من می خواهم برای رفتن راست یا من می خواهم برای رفتن به سمت چپ؟
خب، بدیهی است که شما می خواهید برای رفتن به سمت چپ.
و پس از آن درست مانند تلفن به عنوان مثال کتاب در جستجوی دودویی
به طور کلی.
اما ما در حال اجرای آن در حال حاضر کمی بیشتر به صورت پویا
از یک آرایه ممکن است اجازه می دهد.
و در واقع، اگر شما می خواهید به نگاه در کد، در نگاه اول مطمئن شوید.
آن را مانند یک دسته کامل از خطوط به نظر می رسد.
اما این زیبایی ساده.
اگر می خواهید به پیاده سازی یک تابع جستجو نام که هدف در زندگی
است به جستجو برای یک مقدار مانند N، یک عدد صحیح،
و شما در یک pointer-- گذشت یک اشاره گر به گره ریشه،
نه، از آن درخت که از آن شما می توانید هر چیز دیگری دسترسی داشته باشید،
توجه کنید که چگونه سرراست شما می توانید منطق پیاده سازی.
اگر درخت تهی است، بدیهی است که آن وجود ندارد.
اجازه دهید فقط بازگشت نادرست است.
درست است؟
اگر شما از آن دست هیچ چیز، هیچ چیز وجود دارد وجود دارد.
>> دیگری، اگر n کمتر از است درخت فلش n-- در حال حاضر فلش N،
به یاد ما معرفی فوق العاده به طور خلاصه روز دیگر،
و فقط بدان معناست که د مرجع اشاره گر و در این زمینه به نام N است.
پس از آن بدان معنی است وجود دارد و در این زمینه به نام N است.
بنابراین اگر N، ارزش به شما داده می شود، کمتر است از مقدار در عدد صحیح درختان،
که در آن شما می خواهید برای رفتن؟
به چپ.
>> بنابراین متوجه بازگشت.
من returning-- درست نیست.
غلط است.
من از بازگشت هر پاسخ است از یک تماس به خودم، عبور
N دوباره، که کار برکنار شده، اما آنچه که کمی متفاوت در حال حاضر؟
چگونه منظورم را به مشکل کوچکتر؟
من عبور در عنوان دوم بحث، نه ریشه درخت،
اما کودک سمت چپ در این مورد.
بنابراین من عبور در کودک سمت چپ.
>> در همین حال، اگر n بزرگتر از است گره من در حال حاضر در به دنبال،
من جستجو از سمت راست.
دیگری، اگر درخت تهی نیست، و اگر عنصر به سمت چپ نمی
و آن را به سمت راست نیست، آنچه که زیبا و مورد؟
ما در واقع گره در بر داشت سوال و بنابراین ما به راست.
>> بنابراین ما تنها خراش سطح در حال حاضر برخی از این ساختمان داده.
در مجموعه مسائل پنج نظر شما بررسی این هنوز بیشتر،
و به شما امکان طراحی خود را با توجه به انتخاب چگونه در این مورد.
چیزی که من می خواهم به این نتیجه در فقط یک تیزر 30 ثانیه است
از آنچه در هفته آینده و فراتر از انتظار.
>> همانطور که ما خوشبختانه begin-- شما ممکن است think-- گذار ما به آرامی
از دنیای C و پایین جزئیات پیاده سازی سطح،
به جهانی که در آن ما می توانیم برای گرفتن مسلم است که شخص دیگری در نهایت
اجرا این داده ها سازه دیگر برای ما،
و ما شروع به درک دنیای واقعی به معنای اجرای
برنامه های مبتنی بر وب و به طور کلی وب سایت
و همچنین امنیت بسیار مفاهیم است که ما فقط باید
شروع به خراش سطح.
در اینجا چیزی است که انتظار ما در روزهای آینده.
>> [VIDEO PLAYBACK]
>> -He با یک پیام آمد، با یک پروتکل خاص خود.
او را به یک جهان بی رحمانه آمد فایروال ها، روترها uncaring،
و خطرات به مراتب بدتر از مرگ است.
او سریع می باشد.
او قوی است.
او TCP / IP است، و او آدرس خود را.
"رزمندگان از خالص."
[END پخش ویدئو]
DAVID مالان: آمدن هفته آینده.
ما شما را پس از آن را مشاهده کنید.
[VIDEO PLAYBACK]
که البته در حال حاضر، "افکار عمیق" توسط Daven فارنام، کبک.
-David همیشه سخنرانی با، "بسیار خوب."
چرا که نه، "در اینجا راه حل این هفته مجموعه ای مشکل "
و یا: "ما در حال دادن همه شما؟"
[خنده]
[END پخش ویدئو]