1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [6 هفته ادامه] 2 00:00:02,520 --> 00:00:04,160 [دیوید J. مالان] [دانشگاه هاروارد] 3 00:00:04,160 --> 00:00:08,720 [این CS50.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 این CS50 است و این است که در پایان هفته 6. 5 00:00:12,970 --> 00:00:17,970 بنابراین CS50x، یکی از دوره های اول دانشگاه هاروارد که در طرح EDX 6 00:00:17,970 --> 00:00:20,590 در واقع عرضه این دوشنبه گذشته. 7 00:00:20,590 --> 00:00:23,460 اگر شما می خواهم نگاهی اجمالی به آنچه که دیگران در اینترنت 8 00:00:23,460 --> 00:00:27,180 در حال حاضر به دنبال همراه با، شما می توانید به x.cs50.net سر. 9 00:00:27,180 --> 00:00:30,350 که شما را به جای مناسب در edx.org هدایت، 10 00:00:30,350 --> 00:00:34,160 که بود که در آن این و دوره های دیگر از MIT و برکلی در حال حاضر زندگی می کنند. 11 00:00:34,160 --> 00:00:38,140 شما باید ثبت نام برای یک حساب کاربری پیدا خواهید کرد که مواد تا حد زیادی همان 12 00:00:38,140 --> 00:00:42,170 شما تا به حال این ترم، البته از چند هفته به تعویق افتاد، که ما همه چیز آماده است. 13 00:00:42,170 --> 00:00:46,930 اما آنچه که دانش آموزان در CS50x هم اکنون خواهید دید، رابط کاربری کاملا شبیه به این است. 14 00:00:46,930 --> 00:00:50,040 این، برای مثال، Zamyla پیشرو walkthrough برای مجموعه مشکل 0 است. 15 00:00:50,040 --> 00:00:54,230 پس از ورود به edx.org، یک دانشجوی CS50x می بیند چیزها 16 00:00:54,230 --> 00:00:57,170 شما انتظار می رود تا در یک دوره را مشاهده کنید: سخنرانی برای روز دوشنبه، 17 00:00:57,170 --> 00:01:01,650 سخنرانی برای چهارشنبه، شلوارک های مختلف، مجموعه مشکل، walkthroughs، پی دی اف. 18 00:01:01,650 --> 00:01:04,459 در علاوه بر این، همانطور که شما اینجا را ببینید، ترجمه ماشین 19 00:01:04,459 --> 00:01:08,390 از رونوشت های انگلیسی به چینی، ژاپنی، اسپانیایی، ایتالیایی، 20 00:01:08,390 --> 00:01:12,810 و یک دسته کامل از زبان های دیگر است که قطعا ناقص 21 00:01:12,810 --> 00:01:15,840 که ما آنها را رول از برنامه نویسی با استفاده از چیزی به نام API، 22 00:01:15,840 --> 00:01:18,360 و یا برنامه رابط برنامه نویسی، از گوگل 23 00:01:18,360 --> 00:01:21,360 است که به ما اجازه می دهد برای تبدیل زبان انگلیسی به این زبان های دیگر. 24 00:01:21,360 --> 00:01:24,100 اما به لطف روح فوق العاده از صد به علاوه برخی از داوطلبان، 25 00:01:24,100 --> 00:01:26,940 مردم به طور تصادفی بر روی اینترنت که با مهربانی پیشنهاد برای درگیر شدن 26 00:01:26,940 --> 00:01:30,180 در این پروژه، ما به تدریج خواهید بهبود کیفیت از آن ترجمه می شود 27 00:01:30,180 --> 00:01:35,790 با داشتن انسانها در اصلاح اشتباهات است که رایانه های ما را ساخته اند. 28 00:01:35,790 --> 00:01:42,330 >> بنابراین به نظر می رسد خارج ما چند دانش آموزان نشان می دهد تا به حال در تاریخ دوشنبه از ما در ابتدا انتظار می رود. 29 00:01:42,330 --> 00:01:48,980 در واقع، در حال حاضر CS50x دارای 100،000 نفر همراه پس از در خانه می باشد. 30 00:01:48,980 --> 00:01:54,430 بنابراین شما همه بخشی از تحقق این کلاس افتتاحیه این دوره در علم کامپیوتر 31 00:01:54,430 --> 00:01:57,370 آموزش و پرورش به طور کلی تر، گسترده تر، در دسترس است. 32 00:01:57,370 --> 00:02:00,130 و واقعیت این است در حال حاضر با برخی از این دوره ها گسترده آنلاین، 33 00:02:00,130 --> 00:02:04,070 همه آنها با این ارقام بسیار بالا شروع می شود، همانطور که ما به نظر می رسد که در اینجا انجام داده است. 34 00:02:04,070 --> 00:02:08,759 اما هدف، در نهایت، برای CS50x است واقعا به مردم به عنوان بسیاری از به خط پایان به عنوان امکان پذیر است. 35 00:02:08,759 --> 00:02:12,000 طراحی، CS50x رفتن به از این دوشنبه گذشته ارائه می شود 36 00:02:12,000 --> 00:02:17,430 تمام راه را از طریق آوریل 15 2013، به طوری که مردمی که به تعهدات مدرسه در جای دیگر، 37 00:02:17,430 --> 00:02:20,990 کار، خانواده، درگیری و مانند آن، انعطاف پذیری کمی بیشتر 38 00:02:20,990 --> 00:02:23,640 که با آن به شیرجه رفتن به این دوره، که، کافی است برای گفتن، 39 00:02:23,640 --> 00:02:30,540 کاملا ممنوعه انجام می شود در صورتی که فقط در طول این دوره از سه ماه در طول یک ترم معمول است. 40 00:02:30,540 --> 00:02:34,190 اما این دانش آموزان خواهد شد مقابله با مجموعه مشکل مشابه، مشاهده محتوا، 41 00:02:34,190 --> 00:02:36,350 داشتن دسترسی به همان شورت و مانند آن است. 42 00:02:36,350 --> 00:02:38,990 به طوری که همه ما واقعا در این را با هم تحقق بخشد. 43 00:02:38,990 --> 00:02:42,360 و یکی از اهداف پایان CS50x است فقط برای گرفتن مردمی به عنوان بسیاری از 44 00:02:42,360 --> 00:02:45,720 به خط پایان و به آنها این درک تازه کشف شده در علوم کامپیوتر را 45 00:02:45,720 --> 00:02:49,000 و برنامه نویسی بلکه به آنها این تجربه مشترک. 46 00:02:49,000 --> 00:02:52,010 یکی از ویژگی های از 50 تعریف در محوطه دانشگاه، ما امیدواریم که، 47 00:02:52,010 --> 00:02:56,260 این نوع تجربه جمعی، بوده است، گاهی اوقات برای بهتر شدن یا بدتر شدن 48 00:02:56,260 --> 00:02:59,480 اما پس از این مردم را به به سمت چپ و به سمت راست به نوبه خود، 49 00:02:59,480 --> 00:03:01,830 و ساعات اداری و hackathon و عادلانه است. 50 00:03:01,830 --> 00:03:04,560 از آن کمی سخت تر برای انجام این کار است که در شخص با مردمی آنلاین، 51 00:03:04,560 --> 00:03:10,580 اما CS50x در ماه آوریل با اولین CS50 نمایشگاه نتیجه گیری، 52 00:03:10,580 --> 00:03:13,630 که تطابق آنلاین از نظر ما در این نمایشگاه خواهد بود 53 00:03:13,630 --> 00:03:18,250 که در آن این هزاران نفر از دانش آموزان دعوت خواهد شد به ارائه 1 - فیلم 2 دقیقه ای، 54 00:03:18,250 --> 00:03:22,480 یا یک ضبط ویدیویی از صفحه از پروژه نهایی و یا تصویری خود را از آنها با تکان دادن خوش آمدید 55 00:03:22,480 --> 00:03:24,490 و صحبت کردن در مورد پروژه خود و demoing آن، 56 00:03:24,490 --> 00:03:27,610 بسیار شبیه به پیشینیان خود را در اینجا در این نمایشگاه در محوطه دانشگاه انجام می شود. 57 00:03:27,610 --> 00:03:31,400 به طوری که در پایان ترم، به این امید است که یک نمایشگاه جهانی 58 00:03:31,400 --> 00:03:37,080 پروژه های نهایی دانش آموزان CS50x، بسیار شبیه به آن است که در انتظار شما دسامبر امسال در محوطه دانشگاه. 59 00:03:37,080 --> 00:03:39,680 بنابراین بیشتر در مورد که در ماههای آینده است. 60 00:03:39,680 --> 00:03:43,640 >> با 100.000 دانش آموزان، هر چند، می آید نیاز به چند CA های دیگر است. 61 00:03:43,640 --> 00:03:47,590 با توجه که شما بچه ها دنباله دنباله در اینجا و گرفتن CS50 62 00:03:47,590 --> 00:03:51,630 چند هفته پیش از انتشار این مواد را به مردمی در EDX، 63 00:03:51,630 --> 00:03:55,330 درک عشق ما را به عنوان بسیاری از دانش آموزان خود ما که ممکن است در این ابتکار شامل، 64 00:03:55,330 --> 00:03:58,720 هر دو در طول ترم و همچنین این زمستان و این بهار آینده. 65 00:03:58,720 --> 00:04:01,620 بنابراین اگر شما می خواهم برای درگیر شدن در CS50x، 66 00:04:01,620 --> 00:04:07,450 به ویژه پیوستن در CS50x بحث، نسخه EDX CS50 گفتگو 67 00:04:07,450 --> 00:04:10,140 که بسیاری از شما در محوطه دانشگاه شده اند با استفاده از تخته بولتن آنلاین، 68 00:04:10,140 --> 00:04:13,040 لطفا سر به آن URL، به ما اطلاع دهید که شما، 69 00:04:13,040 --> 00:04:16,450 چون ما دوست داریم برای ساخت یک تیم از دانشجویان و کارکنان و اعضای هیات علمی به طور یکسان 70 00:04:16,450 --> 00:04:19,630 در محوطه دانشگاه که به سادگی بازی همراه و کمک است. 71 00:04:19,630 --> 00:04:21,720 و هنگامی که آنها را ببینید سوال که آشنا به آنها، 72 00:04:21,720 --> 00:04:25,320 شما می شنوید یک دانش آموز در گزارش برخی از اشکال در جایی خارج وجود دارد در برخی از کشور بر روی اینترنت، 73 00:04:25,320 --> 00:04:27,450 و بل که حلقه به خاطر شما هم همین مسئله بود که 74 00:04:27,450 --> 00:04:32,620 خود را در D-سالن چند وقت پیش، امیدوارم پس از آن شما می توانید در صدای سنج ایجاد کردن و به اشتراک گذاشتن تجربه خود را. 75 00:04:32,620 --> 00:04:37,300 پس از انجام لطفا شریک اگر شما می خواهم. 76 00:04:37,300 --> 00:04:39,360 >> دروس علوم کامپیوتر در دانشگاه هاروارد، یک بیت از یک سنت، 77 00:04:39,360 --> 00:04:44,730 CS50 در میان آنها، داشتن برخی از پوشاک، برخی از لباس ها، که شما می توانید با افتخار پوشیدن 78 00:04:44,730 --> 00:04:49,090 در پایان ترم، گفت: کاملا با افتخار است که شما به پایان رسید CS50 79 00:04:49,090 --> 00:04:51,830 و در زمان CS50 و مانند آن است، و ما همیشه سعی کنید به دانش آموزان شامل 80 00:04:51,830 --> 00:04:54,540 در این فرآیند به عنوان آنجا که ممکن است، به موجب آن دعوت می کنیم، 81 00:04:54,540 --> 00:04:56,900 در اطراف این زمان ترم، دانش آموزان به ارائه طرح 82 00:04:56,900 --> 00:04:59,330 با استفاده از فتوشاپ یا هر نرم افزار بهترین انتخاب شما می خواهم به استفاده از 83 00:04:59,330 --> 00:05:02,330 اگر شما یک طراح، به ارائه طرح برای تی شرت و میگذارند 84 00:05:02,330 --> 00:05:06,100 و چتر و bandanas کمی برای سگ ما در حال حاضر و مانند آن. 85 00:05:06,100 --> 00:05:09,370 و همه چیز - برندگان در هر سال پس از آن به نمایش گذاشته شده 86 00:05:09,370 --> 00:05:12,700 در وب سایت دوره store.cs50.net. 87 00:05:12,700 --> 00:05:15,790 همه چیز در هزینه وجود دارد به فروش می رسد، اما وب سایت خود را اجرا می کند 88 00:05:15,790 --> 00:05:18,330 و اجازه می دهد تا مردم را به انتخاب رنگ و طرح است که آنها دوست دارند. 89 00:05:18,330 --> 00:05:20,420 بنابراین من فکر می کنم ما فقط می خواهم اشتراک گذاشتن برخی از طرح های سال گذشته 90 00:05:20,420 --> 00:05:25,130 که بر روی وب سایت علاوه بر این یکی در اینجا است که یک سنت سالانه است. 91 00:05:25,130 --> 00:05:29,410 "هر روز من SEG Faultn" یکی از مطالب ارسالی سال گذشته، 92 00:05:29,410 --> 00:05:32,290 که هنوز هم در دسترس وجود دارد برای فارغ التحصیلان. 93 00:05:32,290 --> 00:05:35,820 ما تا به حال این یکی، CS50، تاسیس سال 1989. " 94 00:05:35,820 --> 00:05:39,010 یکی از Bowdens ما، چپاول، بسیار محبوب بود در سال گذشته است. 95 00:05:39,010 --> 00:05:43,480 "تیم Bowden" متولد شد، این طرح، در میان پرفروش ترین ها ارائه شد. 96 00:05:43,480 --> 00:05:49,040 در حالی بود که این یکی در اینجا. بسیاری از مردم، "تب Bowden" با توجه به سیاهههای مربوط به فروش. 97 00:05:49,040 --> 00:05:52,650 این را فهم کنید که در حال حاضر می تواند طراحی خود را بر روی اینترنت. 98 00:05:52,650 --> 00:05:57,510 جزئیات بیشتر در مورد این مشکل بعدی این مجموعه آمده است. 99 00:05:57,510 --> 00:06:00,330 >> یکی دیگر از ابزار: شما تا به حال برخی از در معرض این بیماری قرار گرفتن رخ می دهند و خوشبختانه در حال حاضر 100 00:06:00,330 --> 00:06:02,350 برخی از تجربه دست با GDB، 101 00:06:02,350 --> 00:06:04,570 است که، البته، دیباگر و به شما اجازه می دهد تا به دستکاری 102 00:06:04,570 --> 00:06:09,500 برنامه خود را در یک سطح نسبتا کم، انجام چه نوع از همه چیز؟ 103 00:06:09,500 --> 00:06:13,030 چه GDB به شما اجازه انجام این کار؟ 104 00:06:13,030 --> 00:06:15,030 آره؟ به من چیزی بدهد. [پاسخ دانشجویی، ناخوانا] 105 00:06:15,030 --> 00:06:18,120 خوب است. گام به تابع، بنابراین شما نه تنها باید به نوع اجرا 106 00:06:18,120 --> 00:06:22,310 و ضربه برنامه را از طریق تمامیت آن، چاپ کردن همه چیز را به خروجی استاندارد است. 107 00:06:22,310 --> 00:06:25,190 در عوض، شما می توانید از طریق آن خط خط به گام، یا تایپ بعدی 108 00:06:25,190 --> 00:06:30,300 برای رفتن به خط خط به خط و یا گام به شیرجه رفتن به یک تابع، به طور معمول یکی است که شما نوشت. 109 00:06:30,300 --> 00:06:35,240 چه چیز دیگری می کند GDB به شما اجازه انجام این کار؟ آره؟ [پاسخ دانشجویی، ناخوانا] 110 00:06:35,240 --> 00:06:38,100 چاپ متغیر است. بنابراین اگر شما می خواهید برای انجام یک درون گرایی کمی در داخل برنامه شما 111 00:06:38,100 --> 00:06:41,500 بدون نیاز به توسل به نوشتن بیانیه printf در همه جا، 112 00:06:41,500 --> 00:06:44,600 شما فقط می توانید یک متغیر را چاپ و یا نمایش یک متغیر است. 113 00:06:44,600 --> 00:06:46,710 چه چیز دیگری می تواند شما را با یک دیباگر مثل GDB انجام دهید؟ 114 00:06:46,710 --> 00:06:49,170 [پاسخ دانشجویی، ناخوانا] 115 00:06:49,170 --> 00:06:52,080 دقیقا. شما می توانید تعیین نقاط شکست، شما می توانید اعدام استراحت می گویند 116 00:06:52,080 --> 00:06:54,020 در تابع اصلی یا عملکرد صنایع غذایی. 117 00:06:54,020 --> 00:06:56,800 شما می توانید از اعدام استراحت در خط 123 می گویند. 118 00:06:56,800 --> 00:06:58,950 نقاطانفصال هستند واقعا یک تکنیک قدرتمند 119 00:06:58,950 --> 00:07:01,110 چرا که اگر شما یک حس کلی از جایی که مشکل شما را دارند 120 00:07:01,110 --> 00:07:05,360 احتمالا شما مجبور به اتلاف وقت قدم به قدم از طریق به طور کامل این برنامه. 121 00:07:05,360 --> 00:07:08,250 شما اساسا می تواند به سمت راست وجود دارد پرش و سپس شروع به تایپ - 122 00:07:08,250 --> 00:07:10,970 قدم به قدم از طریق آن با مرحله و یا در کنار و یا مانند. 123 00:07:10,970 --> 00:07:14,340 اما گرفتن با چیزی شبیه به GDB این است که این به شما کمک می کند، انسان، 124 00:07:14,340 --> 00:07:16,940 پیدا کردن مشکلات خود و پیدا کردن اشکالات خود را. 125 00:07:16,940 --> 00:07:19,470 آن را لزوما آنها را بسیار برای شما خواهد شد. 126 00:07:19,470 --> 00:07:23,070 >> بنابراین ما معرفی style50 روز دیگر، کوتاه است که یک ابزار خط فرمان 127 00:07:23,070 --> 00:07:27,500 است که تلاش می کند تا سبک خاصی دراوردن کد خود را کمی بیشتر پاک از شما، انسان، ممکن است انجام داده اند. 128 00:07:27,500 --> 00:07:29,530 اما این، بیش از حد است، واقعا فقط یک چیز زیبایی است. 129 00:07:29,530 --> 00:07:34,110 اما به نظر می رسد از این ابزار دیگر به نام Valgrind است که کمی پیچیده تر به استفاده از وجود دارد. 130 00:07:34,110 --> 00:07:36,860 خروجی آن است atrociously مرموز در نگاه اول می باشد. 131 00:07:36,860 --> 00:07:39,420 اما زیبا و مفید است، به خصوص در حال حاضر که ما در بخشی از این اصطلاح 132 00:07:39,420 --> 00:07:43,080 جایی که شما در حال شروع به استفاده از malloc و تخصیص حافظه پویا. 133 00:07:43,080 --> 00:07:45,420 چیزهایی که واقعا، واقعا اشتباه می تواند به سرعت. 134 00:07:45,420 --> 00:07:49,320 از آنجا که اگر شما فراموش نکنید که به حافظه آزاد خود را، و یا شما dereference برخی از اشاره گر NULL، 135 00:07:49,320 --> 00:07:55,770 و یا شما dereference برخی از اشاره گر زباله است، چه به طور معمول نشانه است که نتایج؟ 136 00:07:55,770 --> 00:07:59,470 SEG گسل. و شما می توانید این فایل اصلی برخی از شماره کیلوبایت یا مگابایت 137 00:07:59,470 --> 00:08:02,990 است که نشان دهنده وضعیت حافظه برنامه خود را هنگامی که آن سقوط کرد، 138 00:08:02,990 --> 00:08:05,730 اما برنامه های خود را در نهایت SEG گسل، تقسیم بندی گسل، 139 00:08:05,730 --> 00:08:08,450 به این معنی است که اتفاق بدی افتاده است تقریبا همیشه مربوط 140 00:08:08,450 --> 00:08:11,750 به اشتباه مرتبط با حافظه است که شما ساخته شده است در جایی. 141 00:08:11,750 --> 00:08:14,100 بنابراین Valgrind کمک می کند تا چیزهایی مثل این را پیدا کنید. 142 00:08:14,100 --> 00:08:17,720 این ابزاری است که شما را اجرا، مانند GDB، بعد از شما وارد برنامه شما، 143 00:08:17,720 --> 00:08:20,330 اما به جای اجرای برنامه های خود را به طور مستقیم، شما را اجرا Valgrind 144 00:08:20,330 --> 00:08:23,960 و شما را به آن منتقل می کند برنامه های خود را، درست مثل شما با GDB. 145 00:08:23,960 --> 00:08:26,220 در حال حاضر، استفاده، برای بدست آوردن بهترین نوع خروجی، 146 00:08:26,220 --> 00:08:30,410 کمی طولانی است، به طوری که سمت راست وجود دارد در بالای از صفحه نمایش شما Valgrind-V را ببینید. 147 00:08:30,410 --> 00:08:35,350 "V" تقریبا جهانی به معنی دراز زمانی که شما با استفاده از برنامه بر روی یک کامپیوتر لینوکس است. 148 00:08:35,350 --> 00:08:38,770 بنابراین آن را به معنی تف داده ها بیش از شما ممکن است به طور پیش فرض است. 149 00:08:38,770 --> 00:08:45,510 "- نشت چک = کامل است." این فقط گفت: چک برای نشت حافظه، 150 00:08:45,510 --> 00:08:49,430 اشتباهات که من ممکن را ساخته اند. این، بیش از حد، یک پارادایم مشترک با برنامه های لینوکس است. 151 00:08:49,430 --> 00:08:52,710 به طور کلی، اگر شما یک آرگومان خط فرمان است که یک "تعویض" است، 152 00:08:52,710 --> 00:08:55,830 که قرار است به منظور تغییر رفتار این برنامه است، و آن را تنها یک حرف است، 153 00:08:55,830 --> 00:09:00,310 آن را V، اما در صورتی که تغییر، فقط طراحی شده توسط برنامه نویس، 154 00:09:00,310 --> 00:09:05,150 یک کلمه یا مجموعه ای کامل از کلمات، آرگومان خط فرمان شروع می شود -. 155 00:09:05,150 --> 00:09:08,190 اینها فقط کنوانسیون انسان است، اما شما می توانید آنها را به طور فزاینده ای را ببینید. 156 00:09:08,190 --> 00:09:12,410 و سپس، در نهایت، "a.out" نام دلخواه برای برنامه در این مثال خاص می باشد. 157 00:09:12,410 --> 00:09:14,640 و در اینجا برخی از نماینده خروجی است. 158 00:09:14,640 --> 00:09:22,890 >> قبل از اینکه ما در آنچه که ممکن است به معنی نگاه کنید، به من اجازه رفتن به یک قطعه از کد را در اینجا. 159 00:09:22,890 --> 00:09:26,390 و اجازه دهید از این حرکت من از راه، به زودی، 160 00:09:26,390 --> 00:09:32,120 و اجازه دهید یک نگاهی به memory.c است، که این مثال های کوتاه در اینجا. 161 00:09:32,120 --> 00:09:36,290 بنابراین در این برنامه، به من اجازه زوم در توابع و پرسش. 162 00:09:36,290 --> 00:09:39,430 ما باید یک عملکرد اصلی است که فراخوانی یک تابع، f، 163 00:09:39,430 --> 00:09:45,590 و پس از آن چه F اقدام به انجام این کار، به زبان انگلیسی کمی فنی؟ 164 00:09:45,590 --> 00:09:49,760 چه F اقدام به انجام؟ 165 00:09:49,760 --> 00:09:53,680 چگونه در مورد من با خط 20 شروع، و محل سکونت ستاره مهم نیست، 166 00:09:53,680 --> 00:09:56,720 اما من فقط سازگار باشد در اینجا با سخنرانی گذشته است. 167 00:09:56,720 --> 00:09:59,910 خط 20 را برای ما؟ در سمت چپ. ما می خواهیم آن را شکستن بیشتر است. 168 00:09:59,910 --> 00:10:02,410 هوشمند *: X: چه کاری انجام دهید؟ 169 00:10:02,410 --> 00:10:04,940 باشه. این اعلام یک اشاره گر است، و حالا حتی بیشتر فنی است. 170 00:10:04,940 --> 00:10:10,230 به چه معنی است، بسیار مشخص است، یک اشاره گر به اعلام؟ شخص دیگری؟ 171 00:10:10,230 --> 00:10:15,050 آره؟ [پاسخ دانشجو، ناخوانا] بیش از حد. 172 00:10:15,050 --> 00:10:17,060 بنابراین شما در حال خواندن به سمت راست علامت مساوی است. 173 00:10:17,060 --> 00:10:20,290 اجازه بدهید تمرکز درست در سمت چپ، فقط در نوع int * X است. 174 00:10:20,290 --> 00:10:24,700 این بدان "اعلام" یک اشاره گر است، اما در حال حاضر بیایید در عمیق تر به این تعریف شیرجه رفتن. 175 00:10:24,700 --> 00:10:28,330 چه که مشخص، از نظر فنی چیست؟ آره؟ 176 00:10:28,330 --> 00:10:31,940 [پاسخ دانشجویی، ناخوانا] 177 00:10:31,940 --> 00:10:35,090 باشه. آماده شدن برای نجات یک آدرس در حافظه است. 178 00:10:35,090 --> 00:10:40,680 خوب است. و اجازه دهید این یک مرحله دیگر آن اعلام یک متغیر x، که 32 بیت است. 179 00:10:40,680 --> 00:10:44,440 و من می دانم که این 32 بیت به دلیل -؟ 180 00:10:44,440 --> 00:10:47,390 به این دلیل است که آن را از نوع int، زیرا این یک اشاره گر را در این مورد نیست. 181 00:10:47,390 --> 00:10:49,650 تصادفی نیست که آن را یکی و همین کار را با بین المللی، 182 00:10:49,650 --> 00:10:51,970 اما این واقعیت است که این ستاره وجود دارد به معنای این است که یک اشاره گر وجود دارد 183 00:10:51,970 --> 00:10:57,300 و در دستگاه، با بسیاری از کامپیوترها، اما نه همه، اشاره گر 32 بیت هستند. 184 00:10:57,300 --> 00:11:01,850 بر روی سخت افزار های مدرن تر مانند مکینتاش، رایانه های شخصی، شما ممکن است اشاره گر 64 بیتی داشته باشد، 185 00:11:01,850 --> 00:11:04,160 اما در دستگاه، این چیز ها 32 بیت. 186 00:11:04,160 --> 00:11:08,380 کنیم که در آن استاندارد است. مشخص، داستان می رود به شرح زیر است: 187 00:11:08,380 --> 00:11:10,820 ما "اعلام" یک اشاره گر؛ چه معنا است؟ 188 00:11:10,820 --> 00:11:12,810 ما آماده برای ذخیره یک آدرس حافظه است. 189 00:11:12,810 --> 00:11:15,530 به چه معنا است؟ 190 00:11:15,530 --> 00:11:19,810 متغیر x نامیده می شود که طول می کشد تا 32 بیت ایجاد می کنیم 191 00:11:19,810 --> 00:11:23,810 که به زودی آدرس یک عدد صحیح را ذخیره کنید. 192 00:11:23,810 --> 00:11:26,470 و این احتمالا به عنوان دقیق که می توانید. 193 00:11:26,470 --> 00:11:31,810 خوب در حال حرکت رو به جلو به ساده و فقط می گویند به اعلام یک اشاره گر به نام X است. 194 00:11:31,810 --> 00:11:35,380 تعریف اشاره گر، اما تحقق و درک آنچه در واقع در رفتن 195 00:11:35,380 --> 00:11:38,490 حتی در فقط کسانی که چند کاراکتر است. 196 00:11:38,490 --> 00:11:42,040 >> در حال حاضر، این یکی تقریبا یک کمی آسان تر است، حتی اگر آن را در یک عبارت طولانی تر است. 197 00:11:42,040 --> 00:11:48,160 بنابراین این انجام می دهند، که برجسته شده در حال حاضر: "malloc (10 * sizeof (INT))؛" آره؟ 198 00:11:48,160 --> 00:11:52,350 [پاسخ دانشجویی، ناخوانا] 199 00:11:52,350 --> 00:11:58,250 خوب است. و من آن را وجود دارد. این تخصیص یک تکه از حافظه به مدت ده عدد صحیح است. 200 00:11:58,250 --> 00:12:02,190 و حالا شیرجه در کمی عمیق تر اجازه دهید آن را به تخصیص یک تکه از حافظه به مدت ده عدد صحیح است. 201 00:12:02,190 --> 00:12:05,390 چه malloc و سپس بازگشت؟ 202 00:12:05,390 --> 00:12:10,390 آدرس که تکه های، یا، مشخص تر، آدرس بایت اول که تکه. 203 00:12:10,390 --> 00:12:14,080 پس چگونه من، برنامه نویس، می دانم که که آن تکه از حافظه به پایان می رسد؟ 204 00:12:14,080 --> 00:12:18,340 من می دانم که آن را به هم پیوسته است. Malloc، با تعریف شما را یک تکه به هم پیوسته از حافظه است. 205 00:12:18,340 --> 00:12:21,240 شکاف در آن وجود ندارد. شما دسترسی برای هر بایت در آن تکه، 206 00:12:21,240 --> 00:12:26,760 برگشت به پشت به پشت، اما چگونه من می دانم که در آن از پایان این قطعه از حافظه است؟ 207 00:12:26,760 --> 00:12:28,850 هنگامی که malloc استفاده می کنید؟ [پاسخ دانشجو، ناخوانا] خوب. 208 00:12:28,850 --> 00:12:30,670 شما نمی کنند. شما باید به یاد داشته باشید. 209 00:12:30,670 --> 00:12:35,960 من را به خاطر داشته باشید که من با استفاده از مقدار 10، و من حتی به نظر می رسد که انجام داده است که در اینجا. 210 00:12:35,960 --> 00:12:41,000 اما این تعهد به طور کامل بر روی من. Strlen، که ایم کمی متکی به رشته ها تبدیل شده است، 211 00:12:41,000 --> 00:12:45,860 با این نسخهها کار فقط به این دلیل از این کنوانسیون از داشتن \ 0 212 00:12:45,860 --> 00:12:48,840 یا این شخصیت خاص پوچ، پوچ، در پایان یک رشته. 213 00:12:48,840 --> 00:12:51,740 که فقط برای تکه های دلخواه از حافظه را نگه نمی. 214 00:12:51,740 --> 00:12:58,590 آن را به شما است. بنابراین خط 20، پس از آن، اختصاص یک تکه از حافظه 215 00:12:58,590 --> 00:13:02,590 است که می تواند ده عدد صحیح، ذخیره سازی و آن را ذخیره آدرس اولین بایت 216 00:13:02,590 --> 00:13:05,610 که تکه های حافظه در متغیر x به نام. 217 00:13:05,610 --> 00:13:11,140 بنابر این، است که یک اشاره گر است. بنابراین خط 21، متاسفانه، یک اشتباه بود. 218 00:13:11,140 --> 00:13:16,110 اما در ابتدا، آنچه در آن است انجام شده است؟ این فروشگاه گفت: در محل 10، 0 ایندکس، 219 00:13:16,110 --> 00:13:19,480 تکه از حافظه به نام X 0 ارزش است. 220 00:13:19,480 --> 00:13:21,510 >> یک زن و شوهر از چیزهایی که در حال رفتن به اطلاع می دهد. 221 00:13:21,510 --> 00:13:25,420 حتی اگر X یک اشاره گر است، از چند هفته پیش به یاد 222 00:13:25,420 --> 00:13:29,440 است که شما هنوز هم می توانید آرایه به سبک مربع علامت کروشه استفاده کنید. 223 00:13:29,440 --> 00:13:36,180 چرا که در واقع نماد برای حساب بیشتر مرموز، به دنبال اشاره گر کوتاه دست است. 224 00:13:36,180 --> 00:13:40,320 که در آن ما را چیزی شبیه به این را انجام دهید: نگاهی به آدرس X، حرکت 10 نقاط بیش از، 225 00:13:40,320 --> 00:13:44,550 پس از آن وجود دارد که به هر آدرس در آن محل ذخیره شده است بروید. 226 00:13:44,550 --> 00:13:48,090 اما صادقانه بگویم، این است که فقط همین به خواندن و راحت با. 227 00:13:48,090 --> 00:13:52,900 بنابراین جهان به طور معمول با استفاده از براکت مربع فقط به خاطر اینکه آن را خیلی بیشتر انسان دوستانه به خواندن. 228 00:13:52,900 --> 00:13:55,140 اما این چیزی است که واقعا در زیر هود؛ 229 00:13:55,140 --> 00:13:58,190 X یک آدرس، یک آرایه، و در هر سه است. 230 00:13:58,190 --> 00:14:02,410 پس این است که ذخیره سازی 0 در محل 10 در X است. 231 00:14:02,410 --> 00:14:06,120 چرا این بد است؟ آره؟ 232 00:14:06,120 --> 00:14:17,370 [پاسخ دانشجویی، ناخوانا] دقیقا. 233 00:14:17,370 --> 00:14:21,100 ما فقط اختصاص داده ده نوع داده int، اما ما از 0 تعداد در هنگام برنامه نویسی در C، 234 00:14:21,100 --> 00:14:25,690 بنابراین شما باید دسترسی به 0 10 1 2 3 4 5 6 7 8 9، اما نه. 235 00:14:25,690 --> 00:14:30,270 بنابراین یا این برنامه رفتن به گسل SEG یا آن نیست. 236 00:14:30,270 --> 00:14:32,900 اما ما واقعا نمی دانند که این نوع رفتار nondeterministic. 237 00:14:32,900 --> 00:14:35,600 این واقعا در مورد اینکه آیا ما خوش شانس بستگی دارد. 238 00:14:35,600 --> 00:14:40,650 اگر آن را معلوم می کند که سیستم عامل مهم نیست اگر من استفاده از آن بایت اضافی، 239 00:14:40,650 --> 00:14:43,360 حتی اگر آن را به من داده نشده است، برنامه ممکن است سقوط. 240 00:14:43,360 --> 00:14:46,780 خام، حشره دار، اما شما ممکن است این علامت را نمی بینید، 241 00:14:46,780 --> 00:14:48,960 و یا شما ممکن است آن را تنها یک بار در در حالی که. 242 00:14:48,960 --> 00:14:51,230 اما واقعیت این است که اشکال است، در واقع، وجود دارد. 243 00:14:51,230 --> 00:14:54,320 و این واقعا مشکل اگر شما نوشته شده است برنامه ای است که شما می خواهید می شود درست است، 244 00:14:54,320 --> 00:14:58,840 که شما به فروش می رسد برنامه ای است که مردم در حال استفاده از آن در هر یک بار در در حالی که سقوط کرد 245 00:14:58,840 --> 00:15:02,450 از آنجا که، البته، این خوب نیست. در واقع، اگر شما یک تلفن همراه آندروید یا آیفون 246 00:15:02,450 --> 00:15:05,550 و برنامه های شما دانلود این روزها، اگر شما تا به حال یک برنامه ترک، 247 00:15:05,550 --> 00:15:10,040 تمام آن را به طور ناگهانی ناپدید می شود، که تقریبا همیشه نتیجه برخی از موضوع های مربوط به حافظه، 248 00:15:10,040 --> 00:15:12,830 که در آن برنامه نویس پیچ و بصورت غیر مرجع اشاره گر 249 00:15:12,830 --> 00:15:18,670 که او یا او نباید داشته باشد، و در نتیجه از در iOS یا Android است که فقط به کشتن این برنامه به طور کلی 250 00:15:18,670 --> 00:15:23,080 به جای رفتار با ریسک تعریف نشده و یا به نوعی از سازش امنیت. 251 00:15:23,080 --> 00:15:25,950 >> یک اشکال دیگر در این برنامه علاوه بر این یکی وجود دارد. 252 00:15:25,950 --> 00:15:30,180 چه چیز دیگری که من در این برنامه پیچ؟ 253 00:15:30,180 --> 00:15:32,740 من تمرین آنچه که من موعظه. آره؟ 254 00:15:32,740 --> 00:15:34,760 [پاسخ دانشجو، ناخوانا] خوب. 255 00:15:34,760 --> 00:15:36,880 من به حافظه آزاد است. بنابراین قاعده کلی در حال حاضر 256 00:15:36,880 --> 00:15:43,150 است که باید در هر زمان با شما تماس malloc، شما باید تماس رایگان هنگامی که شما انجام می شود با استفاده از این حافظه است. 257 00:15:43,150 --> 00:15:45,610 در حال حاضر، زمانی که من می خواهم این حافظه به آزاد؟ 258 00:15:45,610 --> 00:15:49,780 احتمالا، با فرض این خط اول درست بود، من می خواهم در اینجا به آن را انجام دهد. 259 00:15:49,780 --> 00:15:55,710 از آنجا که من می توانم به عنوان مثال، نه، این کار را انجام را در اینجا. چرا؟ 260 00:15:55,710 --> 00:15:57,860 فقط از دامنه. بنابراین حتی اگر ما در حال صحبت کردن در مورد اشاره گر، 261 00:15:57,860 --> 00:16:04,830 این هفته 2 یا 3 شماره، که در آن X است تنها در محدوده داخل آکولاد که در آن اعلام شد. 262 00:16:04,830 --> 00:16:11,000 بنابراین شما قطعا می تواند این برنامه رایگان نیست وجود دارد. تنها شانس من این برنامه رایگان است که تقریبا بعد از خط 21. 263 00:16:11,000 --> 00:16:15,170 این یک برنامه نسبتا ساده است، آن را نسبتا آسان بود، هنگامی که شما از نوع پیچیده و ذهن شما را 264 00:16:15,170 --> 00:16:17,870 پیرامون آنچه که این برنامه انجام می دهند، که در آن اشتباهات بود. 265 00:16:17,870 --> 00:16:20,500 و حتی اگر آن را در ابتدا نمی بینم، امیدوارم آن را کمی واضح در حال حاضر 266 00:16:20,500 --> 00:16:23,870 که این اشتباهات خیلی به راحتی حل شده و به راحتی ساخته شده است. 267 00:16:23,870 --> 00:16:28,720 اما هنگامی که یک برنامه است که به طول بیش از 12 خط 50 خط طولانی، 100 صف های طولانی، 268 00:16:28,720 --> 00:16:31,150 راه رفتن را از طریق خط کد شما خط، از طریق آن فکر منطقی، 269 00:16:31,150 --> 00:16:35,110 امکان پذیر است، اما به ویژه سرگرم کننده برای انجام این کار، به طور مداوم به دنبال اشکالات، 270 00:16:35,110 --> 00:16:38,340 و آن را نیز به سختی انجام دهد، و به همین دلیل است که یک ابزار مانند Valgrind وجود دارد. 271 00:16:38,340 --> 00:16:40,900 اجازه دهید من به جلو بروید و این کار: اجازه باز کردن پنجره ترمینال من من، 272 00:16:40,900 --> 00:16:45,400 و من نه تنها اجرا حافظه، به دلیل حافظه به نظر می رسد خوب است. 273 00:16:45,400 --> 00:16:49,180 من خوش شانس. رفتن که بایت های اضافی در پایان از آرایه 274 00:16:49,180 --> 00:16:51,060 به نظر نمی رسد بیش از حد مشکل است. 275 00:16:51,060 --> 00:16:56,370 اما به من اجازه دهید، با این حال، انجام یک بررسی سلامت عقل، که تنها به معنی چک 276 00:16:56,370 --> 00:16:58,320 یا نه این است که در واقع درست است. 277 00:16:58,320 --> 00:17:04,690 >> بنابراین اجازه دهید valgrind-V - نشت بررسی = کامل، 278 00:17:04,690 --> 00:17:07,520 و پس از آن به نام برنامه در این مورد، حافظه، a.out است. 279 00:17:07,520 --> 00:17:10,760 پس جلو بروید و اجازه دهید این کار را انجام. آمار را وارد کنید. 280 00:17:10,760 --> 00:17:14,109 عزیز خدا. این خروجی آن است، و این همان چیزی است که من تا قبل از آن اشاره است. 281 00:17:14,109 --> 00:17:17,550 اما، اگر شما یاد می گیرید را از طریق تمام مزخرف را در اینجا بخوانید، 282 00:17:17,550 --> 00:17:20,760 بسیاری از این فقط خروجی تشخیصی است که که جالب نیست. 283 00:17:20,760 --> 00:17:24,829 چه چشم خود را واقعا می خواهد به دنبال هر گونه اشاره ای به خطا یا نامعتبر است. 284 00:17:24,829 --> 00:17:26,800 کلماتی را که نشان می دهد مشکلات. 285 00:17:26,800 --> 00:17:29,340 و در واقع، بیایید ببینید چه خبر است اینجا کلیک کنید یا با اشتباه پایین. 286 00:17:29,340 --> 00:17:35,230 من خلاصه ای از برخی از مرتب کردن بر اساس، در استفاده از خروجی: 40 بایت در 1 بلوک " 287 00:17:35,230 --> 00:17:38,750 من واقعا مطمئن نیست آنچه که به یک بلوک است با این حال، اما 40 کلمه در ادامه متن 288 00:17:38,750 --> 00:17:41,260 در واقع احساس می کنم توانستم بفهمم که در آن است که از. 289 00:17:41,260 --> 00:17:45,030 40 بایت است. چرا 40 بایت استفاده در خروج؟ 290 00:17:45,030 --> 00:17:48,780 و بیشتر به طور خاص، اگر ما در پایین حرکت کنید در اینجا، 291 00:17:48,780 --> 00:17:54,520 چرا که من قطعا از دست داده 40 بایت؟ آره؟ 292 00:17:54,520 --> 00:17:59,520 [پاسخ دانشجویی، ناخوانا] کامل. بله، دقیقا. 293 00:17:59,520 --> 00:18:03,540 ده اعداد صحیح وجود دارد، و هر یک از آن ها به اندازه 4 یا 32 بیت، 294 00:18:03,540 --> 00:18:08,300 بنابراین من از دست داده ایم دقیقا 40 بایت است، زیرا شما را به عنوان پیشنهاد من به نام آزاد نیست. 295 00:18:08,300 --> 00:18:13,460 این یک اشکال است، و در حال حاضر اجازه دهید نگاه کردن کمی بیشتر کنید و ببینید که در کنار این، 296 00:18:13,460 --> 00:18:16,900 "نامعتبر از اندازه 4 ارسال." در حال حاضر این چیست؟ 297 00:18:16,900 --> 00:18:21,150 این آدرس بیان شده است نماد پایگاه، ظاهرا؟ 298 00:18:21,150 --> 00:18:23,640 این هگزادسیمال است، و هر زمان به شما یک شماره با 0x آغاز، 299 00:18:23,640 --> 00:18:29,410 هگزادسیمال، به این معنی است که ما راه برگشت، من فکر می کنم، بخش pset 0 از سوالات، 300 00:18:29,410 --> 00:18:34,090 بود که فقط انجام یک ورزش warmup چون، تبدیل دهدهی به هگزا دسیمال به باینری و غیره. 301 00:18:34,090 --> 00:18:39,220 هگزادسیمال، فقط با کنوانسیون انسان، است که معمولا مورد استفاده قرار گیرد برای نشان دادن اشاره گر 302 00:18:39,220 --> 00:18:41,570 یا، به طور کلی، آدرس. این فقط یک کنوانسیون، 303 00:18:41,570 --> 00:18:45,340 زیرا آن را کمی ساده تر برای خواندن، آن را کمی جمع و جور تر از چیزی شبیه به دهدهی، 304 00:18:45,340 --> 00:18:47,720 و باینری به بی فایده است برای بسیاری از انسان ها را به استفاده از. 305 00:18:47,720 --> 00:18:50,840 بنابراین در حال حاضر به چه معنی است؟ خب، به نظر می رسد مثل نوشتن نامعتبر وجود دارد 306 00:18:50,840 --> 00:18:54,480 اندازه 4 در خط 21 از memory.c. 307 00:18:54,480 --> 00:18:59,180 بنابراین بازگشت به خط 21، و در واقع، در اینجا این است که نوشتن نامعتبر است. 308 00:18:59,180 --> 00:19:02,640 بنابراین Valgrind است که قصد ندارم به طور کامل به دست من و به من بگویید چه ثابت است، 309 00:19:02,640 --> 00:19:05,520 اما این تشخیص است که من انجام می دهند نوشتن نامعتبر است. 310 00:19:05,520 --> 00:19:08,800 من دست زدن به 4 بایت است که من نباید باشد، و ظاهرا به این دلیل که، 311 00:19:08,800 --> 00:19:13,960 به عنوان که شما اشاره کردید، من انجام می دهند [10] به جای [9] حداکثر 312 00:19:13,960 --> 00:19:16,660 [0] یا چیزی در میان است. 313 00:19:16,660 --> 00:19:19,690 با Valgrind، تحقق بخشیدن به هر زمان شما در حال حاضر نوشتن یک برنامه 314 00:19:19,690 --> 00:19:24,190 است که با استفاده از اشاره گر و استفاده از حافظه، و malloc بیشتر به طور خاص، 315 00:19:24,190 --> 00:19:27,080 قطعا به عادت در حال اجرا این مدت 316 00:19:27,080 --> 00:19:30,890 اما به راحتی کپی و جا به جا فرمان Valgrind 317 00:19:30,890 --> 00:19:32,650 برای دیدن برخی از اشتباهات در آنجا وجود دارد. 318 00:19:32,650 --> 00:19:34,820 و قریب به اتفاق قربانیان آن خواهید بود هر زمان که شما خروجی، 319 00:19:34,820 --> 00:19:39,430 اما تنها از طریق تجزیه و تحلیل بصری خروجی و ببینید اگر شما می بینید اشاره از اشتباهات 320 00:19:39,430 --> 00:19:43,190 و یا هشدار و یا نامعتبر است و یا از دست داده است. 321 00:19:43,190 --> 00:19:46,200 هر واژه ای که صدا مانند شما screwed تا جایی. 322 00:19:46,200 --> 00:19:48,580 پس متوجه باشید که یک ابزار جدید در جعبه ابزار خود را دارد. 323 00:19:48,580 --> 00:19:51,270 >> در حال حاضر در تاریخ دوشنبه، ما تا به حال یک دسته از مردمی می آیند تا در اینجا 324 00:19:51,270 --> 00:19:53,150 و نشان دادن مفهوم یک لیست پیوندی است. 325 00:19:53,150 --> 00:20:00,970 و ما معرفی لیست پیوندی به عنوان یک راه حل چه مشکلی؟ 326 00:20:00,970 --> 00:20:04,590 آره؟ [پاسخ دانشجو، ناخوانا] خوب. 327 00:20:04,590 --> 00:20:06,530 آرایه ها نیست می تواند حافظه به آنها اضافه شده است. 328 00:20:06,530 --> 00:20:09,440 اگر شما اختصاص آرایه ای از اندازه 10، که شما می توانید. 329 00:20:09,440 --> 00:20:13,690 شما می توانید یک تابع مانند بازتخصیص اگر شما در ابتدا به نام malloc تماس بگیرید، 330 00:20:13,690 --> 00:20:17,580 و که می توانید سعی کنید به رشد آرایه اگر فضا به سمت انتهای آن وجود دارد 331 00:20:17,580 --> 00:20:21,610 که هیچ کس به دیگری با استفاده از، و اگر وجود دارد، آن را فقط به شما یک تکه بزرگتر در جایی دیگر. 332 00:20:21,610 --> 00:20:25,040 اما سپس آن را به تمام کسانی که بایت به آرایه جدید کپی کنید. 333 00:20:25,040 --> 00:20:28,310 این برای تلفن های موبایل مانند یک راه حل بسیار درست است. 334 00:20:28,310 --> 00:20:34,790 چرا این غیرجذاب است؟ 335 00:20:34,790 --> 00:20:36,940 منظور من آن را با این نسخهها کار، انسان را به حل این مشکل است. 336 00:20:36,940 --> 00:20:40,710 چرا ما نیاز به آن در روز دوشنبه حل و فصل با لیست های پیوندی؟ آره؟ 337 00:20:40,710 --> 00:20:44,060 [پاسخ دانشجویی، ناخوانا] این می تواند مدت زمان طولانی را. 338 00:20:44,060 --> 00:20:49,260 در واقع، هر زمان که شما خواستار malloc یا بازتخصیص یا calloc است، که در عین حال یکی دیگر از، 339 00:20:49,260 --> 00:20:52,470 هر زمان شما، این برنامه، در حال صحبت کردن به سیستم عامل، 340 00:20:52,470 --> 00:20:54,310 شما تمایل به سرعت برنامه پایین. 341 00:20:54,310 --> 00:20:57,470 و اگر شما در حال انجام این نوع از چیز ها را در حلقه، شما واقعا کاهش چیزهایی پایین. 342 00:20:57,470 --> 00:21:00,740 شما در حال رفتن به اطلاع این ساده "سلام جهان" نوع برنامه، 343 00:21:00,740 --> 00:21:04,300 اما در برنامه های بسیار بزرگتر و درخواست از سیستم عامل را دوباره و دوباره برای حافظه 344 00:21:04,300 --> 00:21:07,520 و یا به آن بازگشت دوباره و دوباره تمایل به یک چیز خوب است. 345 00:21:07,520 --> 00:21:11,210 علاوه بر این، فقط مرتب کردن بر اساس عقل - این یک اتلاف وقت است. 346 00:21:11,210 --> 00:21:16,490 چرا به حافظه اختصاص دهد بیشتر و بیشتر، خطر کپی کردن همه چیز را به آرایه جدید، 347 00:21:16,490 --> 00:21:21,980 اگر شما یک جایگزین است که به شما اجازه می دهد تا به حافظه اختصاص دهد تنها به همان اندازه که شما در واقع نیاز است؟ 348 00:21:21,980 --> 00:21:24,130 پس مثبت و منفی در اینجا وجود دارد. 349 00:21:24,130 --> 00:21:26,730 یکی از علامت + در حال حاضر این است که پویایی می باشد. 350 00:21:26,730 --> 00:21:29,100 مهم نیست که در آن تکه از حافظه هستند که آزاد هستند، 351 00:21:29,100 --> 00:21:32,070 من فقط می تواند از ایجاد مرتب سازی بر اساس این خرده نان از طریق اشاره گر 352 00:21:32,070 --> 00:21:34,470 به تمام رشته مرتبط فهرست من با هم. 353 00:21:34,470 --> 00:21:36,470 اما من پرداخت حداقل یک قیمت است. 354 00:21:36,470 --> 00:21:40,060 >> چه چیزی من را در به دست آوردن لیست های پیوندی؟ 355 00:21:40,060 --> 00:21:42,470 آره؟ [پاسخ دانشجو، ناخوانا] خوب. 356 00:21:42,470 --> 00:21:45,650 شما نیاز به حافظه بیشتر. حالا من نیاز به فضا برای این اشاره گر، 357 00:21:45,650 --> 00:21:47,900 و در مورد این لیست فوق العاده ساده مرتبط 358 00:21:47,900 --> 00:21:51,410 است که تنها در تلاش برای ذخیره اعداد صحیح، که 4 بایت هستند، ما حفظ و گفت 359 00:21:51,410 --> 00:21:54,240 خب، یک اشاره گر 4 بایت است، بنابراین در حال حاضر من به معنای واقعی کلمه دو برابر 360 00:21:54,240 --> 00:21:57,290 مقدار حافظه فقط برای ذخیره این لیست است. 361 00:21:57,290 --> 00:21:59,680 اما باز هم، این معاوضه مداوم در علم کامپیوتر است 362 00:21:59,680 --> 00:22:03,440 بین زمان و فضا و توسعه، تلاش ها و منابع دیگر. 363 00:22:03,440 --> 00:22:06,630 یکی دیگر از حرکت نزولی با استفاده از یک لیست پیوندی چه خبر؟ آره؟ 364 00:22:06,630 --> 00:22:10,150 [پاسخ دانشجویی، ناخوانا] 365 00:22:10,150 --> 00:22:12,600 خوب است. به عنوان آسان برای دسترسی به. ما دیگر نمی توانیم اهرم 366 00:22:12,600 --> 00:22:15,530 هفته 0 اصول مانند تقسیم و حل. 367 00:22:15,530 --> 00:22:18,220 و بیشتر به طور خاص، جستجو دودویی. چرا که حتی اگر ما انسان ها 368 00:22:18,220 --> 00:22:20,400 تقریبا می توانید ببینید که در آن میانه از این لیست است، 369 00:22:20,400 --> 00:22:25,840 کامپیوتر تنها می داند که این لیست پیوندی در آدرس ابتدا فراخوانی میشود شروع می شود. 370 00:22:25,840 --> 00:22:28,250 و این 0x123 یا چیزی شبیه به آن است. 371 00:22:28,250 --> 00:22:30,990 و تنها راه این برنامه می تواند عنصر میانی پیدا کنید 372 00:22:30,990 --> 00:22:33,350 است که در واقع جستجو در کل لیست. 373 00:22:33,350 --> 00:22:35,500 و حتی پس از آن، آن را به معنای واقعی کلمه را به جستجو در فهرست کل به دلیل 374 00:22:35,500 --> 00:22:38,950 حتی یک بار عنصر میانی به شما برسد پس از اشاره گر، 375 00:22:38,950 --> 00:22:42,380 شما، برنامه، هیچ نظری ندارم که چه مدت این لیست است، به طور بالقوه، 376 00:22:42,380 --> 00:22:45,250 تا زمانی که شما به پایان رسید از آن، و چگونه شما می دانید برنامه نویسی 377 00:22:45,250 --> 00:22:48,600 که شما در پایان یک لیست پیوندی هستید؟ 378 00:22:48,600 --> 00:22:51,120 یک اشاره گر NULL، تا دوباره، یک کنوانسیون وجود دارد. 379 00:22:51,120 --> 00:22:53,870 به جای استفاده از این اشاره گر، ما قطعا نمی خواهید که برخی از ارزش زباله به 380 00:22:53,870 --> 00:22:57,750 اشاره کردن مرحله در جایی که ما می خواهیم آن را به طرف پایین، NULL، 381 00:22:57,750 --> 00:23:01,530 به طوری که در حال حاضر این پایانه در این ساختار داده را بنابراین ما می دانیم که در آن به پایان می رسد. 382 00:23:01,530 --> 00:23:03,410 >> چه می شود اگر ما می خواهیم به دستکاری این؟ 383 00:23:03,410 --> 00:23:05,980 ما بیشتر از این بصری، و با انسان، 384 00:23:05,980 --> 00:23:07,630 اما چه می شود اگر ما می خواهیم به درج؟ 385 00:23:07,630 --> 00:23:12,360 پس لیست اصلی، 9، 17، 20، 22، 29، 34 بود. 386 00:23:12,360 --> 00:23:16,730 چه اگر ما پس از آن به فضای malloc برای شماره 55، یک گره را برای آن می خواست، 387 00:23:16,730 --> 00:23:20,730 و پس از آن ما می خواهیم برای وارد کردن 55 به لیست همانطور که ما در روز دوشنبه انجام داد؟ 388 00:23:20,730 --> 00:23:23,690 چگونه این کار را انجام دهید؟ خوب، آنیتا آمد و او اساسا راه می رفت این فهرست است. 389 00:23:23,690 --> 00:23:27,500 او در عنصر اول آغاز شده است، پس از آن بعد، بعد از، بعد از، بعد از، بعد از. 390 00:23:27,500 --> 00:23:29,500 در نهایت سمت چپ تمام راه را به پایین ضربه 391 00:23:29,500 --> 00:23:34,480 و متوجه شدم آه، این NULL است. پس چه دستکاری اشاره گر مورد نیاز که باید انجام شود؟ 392 00:23:34,480 --> 00:23:37,980 کسی بود که در پایان، شماره 34، نیاز به دست چپ خود را مطرح 393 00:23:37,980 --> 00:23:46,220 به نقطه در 55، 55 نیاز به دست چپ خود را با اشاره به NULL ترمیناتور جدید. انجام شد. 394 00:23:46,220 --> 00:23:49,540 بسیار آسان برای وارد کردن 55 را به یک لیست طبقه بندی شده اند. 395 00:23:49,540 --> 00:23:51,800 و چگونه ممکن است این نگاه می کنید؟ 396 00:23:51,800 --> 00:23:55,690 >> اجازه بدهید من به جلو بروید و باز کردن برخی از کد مثال در اینجا. 397 00:23:55,690 --> 00:23:58,120 من باز کردن gedit، و به من اجازه باز کردن دو فایل برای اولین بار. 398 00:23:58,120 --> 00:24:02,050 یکی از list1.h، و اجازه دهید من فقط یادآوری می کنند که این قطعه از کد 399 00:24:02,050 --> 00:24:04,920 که ما استفاده می شود به نمایندگی از یک گره است. 400 00:24:04,920 --> 00:24:13,040 یک گره داشته باشد که هر دو از نوع int به نام N و یک اشاره گر به نام بعدی که فقط نقاط به کار بعدی در لیست است. 401 00:24:13,040 --> 00:24:15,450 که در حال حاضر در یک فایل در ساعت است. چرا؟ 402 00:24:15,450 --> 00:24:19,090 این کنوانسیون وجود دارد، و در حال حاضر استفاده از این مقدار زیادی خودمان، 403 00:24:19,090 --> 00:24:22,220 اما کسی که توابع printf و دیگر نوشت 404 00:24:22,220 --> 00:24:27,150 داد به عنوان یک هدیه است که جهان از آن دسته از توابع با نوشتن یک فایل به نام stdio.h. 405 00:24:27,150 --> 00:24:30,950 و سپس string.h وجود دارد، و پس از آن map.h وجود دارد، و تمام این فایل ها H وجود دارد 406 00:24:30,950 --> 00:24:34,410 که شما ممکن است دیده می شود و یا در مدت نوشته شده توسط افراد دیگر استفاده می شود. 407 00:24:34,410 --> 00:24:38,470 به طور معمول در آن ساعت فایل تنها چیزهایی هستند که مانند تعریف نوعهای 408 00:24:38,470 --> 00:24:42,310 اعلامیه های سفارشی و یا انواع اعلامیه های ثابت است. 409 00:24:42,310 --> 00:24:47,890 شما پیاده سازی توابع در فایل هدر قرار داده است. 410 00:24:47,890 --> 00:24:50,570 شما قرار داده، به جای آن، فقط نمونه های اولیه خود را. 411 00:24:50,570 --> 00:24:53,050 شما چیزهایی که شما می خواهید برای به اشتراک گذاشتن با جهان آنچه آنها نیاز دارند قرار داده است 412 00:24:53,050 --> 00:24:55,640 به منظور کامپایل کد خود را. پس فقط به این عادت کنید، 413 00:24:55,640 --> 00:24:59,110 ما تصمیم به انجام همان چیزی. بسیار در list1.h وجود دارد نیست، 414 00:24:59,110 --> 00:25:02,070 اما ما چیزی است که ممکن است مورد علاقه باشد در جهان به مردم قرار داده است 415 00:25:02,070 --> 00:25:05,030 که می خواهند به استفاده از پیاده سازی لیست ما داشته باشد. 416 00:25:05,030 --> 00:25:08,040 در حال حاضر، در list1.c، من نمی خواهد رفتن را از طریق تمام این چیز 417 00:25:08,040 --> 00:25:11,390 زیرا آن را کمی طولانی است، این برنامه، اما اجازه دهید آن را اجرا کنید واقعی به سرعت در اعلان. 418 00:25:11,390 --> 00:25:15,720 اجازه دهید list1 کامپایل من، به من اجازه پس از آن اجرا list1، و آنچه که شما خواهید دید 419 00:25:15,720 --> 00:25:18,070 ایم و شبیه سازی یک برنامه ساده کوچک در اینجا 420 00:25:18,070 --> 00:25:20,990 که به من اجازه می دهد برای اضافه کردن و حذف اعداد به یک لیست است. 421 00:25:20,990 --> 00:25:24,310 پس اجازه دهید من به جلو بروید و نوع 3 برای 3 گزینه منو. 422 00:25:24,310 --> 00:25:27,880 من می خواهم به وارد کردن شماره - اجازه دهید شماره اول، که بود (9). 423 00:25:27,880 --> 00:25:30,550 و در حال حاضر من گفت: این لیست در حال حاضر 9. 424 00:25:30,550 --> 00:25:33,760 اجازه دهید من به جلو بروید و انجام دیگر درج، بنابراین من ضربه گزینه منو 3. 425 00:25:33,760 --> 00:25:36,760 چه تعداد را من می خواهم برای وارد کردن؟ 17. 426 00:25:36,760 --> 00:25:39,220 را وارد کنید. و من فقط یک انجام دهید. 427 00:25:39,220 --> 00:25:41,720 اجازه بدهید شماره 22 درج کنم. 428 00:25:41,720 --> 00:25:45,850 بنابراین ما باید در ابتدای لیست پیوندی است که ما در فرم کشویی به حال یک لحظه قبل است. 429 00:25:45,850 --> 00:25:48,740 چگونه است که این درج در واقع اتفاق می افتد؟ 430 00:25:48,740 --> 00:25:52,000 در واقع، 22 است که در حال حاضر در انتهای لیست. 431 00:25:52,000 --> 00:25:55,050 پس داستان ما در صحنه در روز دوشنبه گفت: و فقط در حال حاضر تاکید 432 00:25:55,050 --> 00:25:57,460 باید واقع اتفاق می افتد در کد. 433 00:25:57,460 --> 00:25:59,700 بیایید نگاهی به. اجازه دهید من در پایین حرکت کنید در این فایل. 434 00:25:59,700 --> 00:26:01,720 ما براق خواهید بیش از برخی از توابع، 435 00:26:01,720 --> 00:26:05,630 اما ما رو به پایین، به می گویند، تابع را وارد کنید. 436 00:26:05,630 --> 00:26:11,720 >> بیایید ببینید که چگونه ما در مورد قرار دادن یک گره جدید به این لیست پیوندی. 437 00:26:11,720 --> 00:26:14,550 فهرست اعلام شده؟ خوب، اجازه دهید حرکت تمام راه را تا در بالا، 438 00:26:14,550 --> 00:26:19,970 و توجه کنید که مرتبط فهرست است که در اصل به عنوان یک اشاره گر که در ابتدا NULL اعلام شده است. 439 00:26:19,970 --> 00:26:23,180 بنابراین من با استفاده از یک متغیر جهانی، که به طور کلی ما در برابر موعظه ام 440 00:26:23,180 --> 00:26:25,280 به دلیل آن را می سازد کد خود را کمی کثیف به حفظ، 441 00:26:25,280 --> 00:26:29,080 مرتب کردن بر اساس آن است تنبل، معمولا، اما آن را تنبل نیست و اشتباه نیست و این بد نیست 442 00:26:29,080 --> 00:26:33,660 اگر تنها هدف برنامه های خود را در زندگی این است که به شبیه سازی یک لیست پیوندی است. 443 00:26:33,660 --> 00:26:35,460 که دقیقا همان چیزی است که ما در حال انجام است. 444 00:26:35,460 --> 00:26:39,100 بنابراین به جای این اعلام را در بخش اصلی و پس از آن باید آن را منتقل می کند به هر تابع 445 00:26:39,100 --> 00:26:42,640 ما در این برنامه نوشته شده است، ما به جای درک اوه، اجازه دهید فقط آن را جهانی 446 00:26:42,640 --> 00:26:47,060 زیرا هدف از این برنامه این است که برای نشان دادن یک و تنها یک لیست مرتبط است. 447 00:26:47,060 --> 00:26:50,700 به طوری که احساس می کند درست است. در اینجا نمونه های اولیه من است، و ما نمی خواهد رفتن را از طریق تمام این، 448 00:26:50,700 --> 00:26:55,800 اما من یک تابع حذف، یک تابع پیدا کنید، یک تابع را وارد کنید، و پیمودن یک تابع نوشت. 449 00:26:55,800 --> 00:26:59,080 اما اجازه دهید در حال حاضر رفتن به پایین به تابع درج 450 00:26:59,080 --> 00:27:01,490 و ببینید که چگونه این یکی کار می کند در اینجا. 451 00:27:01,490 --> 00:27:09,940 درج بر روی خط - در اینجا ما بروید. 452 00:27:09,940 --> 00:27:12,850 درج کنید. پس از آن هیچ استدلال را ندارد، چرا که ما قصد داریم به درخواست 453 00:27:12,850 --> 00:27:15,930 در داخل این تابع تعداد آنها می خواهند برای وارد کردن است. 454 00:27:15,930 --> 00:27:19,410 اما در ابتدا، ما آماده به برخی از آنها فضا را. 455 00:27:19,410 --> 00:27:22,050 این نوع از کپی و پیست کنید و از مثال دیگر است. 456 00:27:22,050 --> 00:27:25,110 در آن صورت، ما تخصیص بین المللی، این زمان ما در حال اختصاص یک گره است. 457 00:27:25,110 --> 00:27:27,910 من واقعا به یاد داشته باشید که چگونه بسیاری از بایت یک گره است، اما خوب است. 458 00:27:27,910 --> 00:27:30,460 Sizeof که می تواند رقم برای من. 459 00:27:30,460 --> 00:27:33,340 و چرا من را برای NULL در خط 120 چک کردن؟ 460 00:27:33,340 --> 00:27:37,530 آنچه می تواند به اشتباه در خط 119 است؟ آره؟ 461 00:27:37,530 --> 00:27:40,530 [پاسخ دانشجویی، ناخوانا] 462 00:27:40,530 --> 00:27:43,440 خوب است. فقط می تواند صورتی که من بیش از حد حافظه پرسیده 463 00:27:43,440 --> 00:27:47,020 یا چیزی اشتباه است و سیستم عامل بایت به اندازه کافی به من را نداشته باشند، 464 00:27:47,020 --> 00:27:50,640 پس از آن، سیگنال به همان اندازه با بازگشت NULL، و اگر من برای آن بررسی نمی 465 00:27:50,640 --> 00:27:54,710 و من فقط کورکورانه اقدام به استفاده از آدرس بازگشت، آن می تواند تهی باشد. 466 00:27:54,710 --> 00:27:58,400 این می تواند برخی از ارزش نیست، چیز خوبی نیست مگر اینکه I - 467 00:27:58,400 --> 00:28:00,590 در واقع نمی خواهد یک مقدار نامعلوم است. این می تواند NULL، بنابراین من نمی خواهم 468 00:28:00,590 --> 00:28:02,550 به سوء استفاده از آن و بصورت غیر مرجع آن را در معرض خطر است. 469 00:28:02,550 --> 00:28:07,410 در صورتی که اتفاق می افتد، من فقط و بازگشت خواهیم وانمود مثل من می کنید هر حافظه در همه. 470 00:28:07,410 --> 00:28:12,270 >> در غیر این صورت، من به کاربر یک شماره برای وارد کردن به من به من بدهید، من اسمش دوست قدیمی ما GetInt، 471 00:28:12,270 --> 00:28:15,530 و سپس به این نحو است که در روز دوشنبه معرفی شده بود. 472 00:28:15,530 --> 00:28:20,320 newptr-> N "به معنای آدرس است که شما با استفاده از malloc داده شد 473 00:28:20,320 --> 00:28:23,490 که نشان دهنده اولین بایت از یک شیء گره جدید، 474 00:28:23,490 --> 00:28:26,860 و پس از آن به زمینه به نام N بروید. 475 00:28:26,860 --> 00:28:35,270 کمی چیزهای بی اهمیت سوال: معادل این است که به چه خط بیشتر مرموز از کد؟ 476 00:28:35,270 --> 00:28:38,110 به چه روش دیگری می تواند به من نوشته اند؟ می خواهم یک چاقو را به؟ 477 00:28:38,110 --> 00:28:41,480 [پاسخ دانشجویی، ناخوانا] 478 00:28:41,480 --> 00:28:44,870 خوب است. با استفاده از ازت، اما آن را کاملا به عنوان به عنوان ساده نیست. 479 00:28:44,870 --> 00:28:47,090 چه من برای اولین بار نیاز به انجام؟ [پاسخ دانشجویی، ناخوانا] 480 00:28:47,090 --> 00:28:52,730 خوب است. من نیاز به انجام newptr.n *. 481 00:28:52,730 --> 00:28:55,610 پس این است که می گوید اشاره گر جدید بدیهی است که یک آدرس است. چرا؟ 482 00:28:55,610 --> 00:28:59,520 از آنجا که آن را با استفاده از malloc بازگردانده شد. * گفت newptr "وجود دارد،" 483 00:28:59,520 --> 00:29:02,970 و پس از آن هنگامی که شما وجود دارد، پس از آن شما می توانید بیشتر آشنا N استفاده کنید، 484 00:29:02,970 --> 00:29:05,730 اما این فقط کمی زشت به نظر می رسد، به خصوص اگر ما انسان ها در حال رفتن به 485 00:29:05,730 --> 00:29:10,360 قرعه کشی اشاره گر با فلش تمام وقت و جهان در مورد این نماد فلش استاندارد، 486 00:29:10,360 --> 00:29:12,320 که دقیقا همان چیزی است. 487 00:29:12,320 --> 00:29:16,070 > نماد زمانی که چیزی در سمت چپ یک اشاره گر است - بنابراین شما فقط استفاده کنید. 488 00:29:16,070 --> 00:29:18,790 در غیر این صورت، اگر آن را یک ساختار واقعی، استفاده از ازت. 489 00:29:18,790 --> 00:29:25,800 و پس از آن این است: چرا من مقداردهی اولیه newptr بعدی> NULL؟ 490 00:29:25,800 --> 00:29:28,610 ما می توانم در یک دست آویزان کردن سمت چپ از پایان مرحله را نمی خواهم. 491 00:29:28,610 --> 00:29:31,630 ما می خواهیم به آن اشاره راست پایین، که به معنی پایان این لیست 492 00:29:31,630 --> 00:29:34,980 می تواند به طور بالقوه در این گره باشد، بنابراین ما بهتر است مطمئن شوید که آن را NULL است. 493 00:29:34,980 --> 00:29:38,460 و به طور کلی، مقدار دهی اولیه متغیر خود و یا خود را داده اعضا و ساختمانها 494 00:29:38,460 --> 00:29:40,470 به چیزی است که فقط تمرین خوبی است. 495 00:29:40,470 --> 00:29:45,170 فقط اجازه زباله ها وجود دارد و همچنان وجود دارد به طور کلی به شما می شود در مشکل 496 00:29:45,170 --> 00:29:48,650 اگر شما فراموش نکنید که برای انجام کاری به بعد در. 497 00:29:48,650 --> 00:29:51,590 >> در اینجا چند مورد. این، دوباره، تابع درج، 498 00:29:51,590 --> 00:29:54,930 و اولین چیزی که من برای بررسی این است که اگر متغیر به نام برای اولین بار 499 00:29:54,930 --> 00:29:58,240 که متغیر جهانی NULL است، این بدان معناست که هیچ ارتباط وجود دارد. 500 00:29:58,240 --> 00:30:02,460 ما در هر شماره درج شده نیست، بنابراین آن را بی اهمیت برای وارد کردن این شماره در حال حاضر 501 00:30:02,460 --> 00:30:05,240 به این فهرست، چرا که آن را فقط در آغاز از لیست به آن تعلق دارد. 502 00:30:05,240 --> 00:30:08,100 بنابراین این بود که آنیتا فقط ایستاده بود تا به اینجا به تنهایی، وانمود 503 00:30:08,100 --> 00:30:11,390 هیچ کس دیگری بود تا به روی صحنه تا زمانی که ما اختصاص داده شده است یک گره، 504 00:30:11,390 --> 00:30:13,940 پس از آن او می تواند دست او را برای اولین بار بالا می برد، 505 00:30:13,940 --> 00:30:17,420 اگر هر کس دیگری در مرحله بعد از او آمده بود در روز دوشنبه است. 506 00:30:17,420 --> 00:30:22,900 در حال حاضر در اینجا، این یک چک کوچک که در آن من باید بگویم این است که اگر مقدار گره جدید N 507 00:30:22,900 --> 00:30:27,370 <مقدار ازت در گره اول، 508 00:30:27,370 --> 00:30:29,930 این بدان معناست که یک لیست پیوندی است که شروع شده است وجود دارد. 509 00:30:29,930 --> 00:30:32,330 حداقل یک گره در لیست وجود دارد، اما این پسر جدید 510 00:30:32,330 --> 00:30:37,230 به آن تعلق دارد قبل از آن، بنابراین ما نیاز به حرکت در اطراف. 511 00:30:37,230 --> 00:30:43,450 به عبارت دیگر، در صورتی که لیست فقط با شروع، اجازه دهید می گویند، 512 00:30:43,450 --> 00:30:48,100 فقط شماره 17، که - در واقع، ما می توانیم این را با وضوح بیشتری انجام دهد. 513 00:30:48,100 --> 00:30:56,010 اگر ما شروع داستان ما با یک اشاره گر در ابتدا فراخوانی، 514 00:30:56,010 --> 00:30:59,870 و در ابتدا آن را NULL، و شماره 9 درج می کنیم. 515 00:30:59,870 --> 00:31:02,510 شماره 9 به وضوح در آغاز از لیست به آن تعلق دارد. 516 00:31:02,510 --> 00:31:07,400 بنابراین وانمود اجازه دهید ما فقط به malloced آدرس یا شماره 9 قرار داده و آن را در اینجا. 517 00:31:07,400 --> 00:31:13,170 اگر اولین بار است که 9 به طور پیش فرض، سناریو اول مورد بحث ما فقط به معنای اجازه دهید این پسر در اینجا، 518 00:31:13,170 --> 00:31:15,790 ترک این را به عنوان NULL، در حال حاضر در حال حاضر شماره 9. 519 00:31:15,790 --> 00:31:18,280 شماره آینده ما می خواهیم برای وارد کردن 17 است. 520 00:31:18,280 --> 00:31:22,420 17 به آن تعلق دارد در اینجا، بنابراین ما قصد داریم به برخی از پله های منطقی را از طریق این کار را انجام دهند. 521 00:31:22,420 --> 00:31:26,060 بنابراین به جای آن اجازه دهید، قبل از ما انجام این کار، بیایید وانمود کنیم که ما می خواستیم به وارد کردن شماره 8. 522 00:31:26,060 --> 00:31:28,650 >> پس فقط به خاطر راحتی است، من قصد دارم به منظور جلب. 523 00:31:28,650 --> 00:31:30,760 اما به یاد داشته باشید، malloc می توانید آن را در هر نقطه قرار داده است. 524 00:31:30,760 --> 00:31:33,460 اما به خاطر طراحی است، من آن را در اینجا قرار داده است. 525 00:31:33,460 --> 00:31:38,440 پس من فقط گره شماره 8 اختصاص داده وانمود NULL است به طور پیش فرض می باشد. 526 00:31:38,440 --> 00:31:42,800 آنچه اکنون اتفاق می افتد؟ یک زن و شوهر از همه چیز. 527 00:31:42,800 --> 00:31:47,090 ما این اشتباه را به روی صحنه در دوشنبه ساخته شده است که در آن ما یک اشاره گر مانند این به روز رسانی، 528 00:31:47,090 --> 00:31:51,890 پس از آن این را، و پس از آن ما ادعا کرد - ما یتیم هر کس دیگری روی صحنه. 529 00:31:51,890 --> 00:31:54,350 از آنجا که شما نمی توانند - منظور از عملیات در اینجا مهم است، 530 00:31:54,350 --> 00:31:58,760 چون در حال حاضر ما از دست داده ایم به این 9 گره است که فقط نوع شناور در فضا. 531 00:31:58,760 --> 00:32:01,150 بنابراین این رویکرد درست در روز دوشنبه نمی شود. 532 00:32:01,150 --> 00:32:03,330 ما در مرحله اول باید به انجام این کار چیز دیگری است. 533 00:32:03,330 --> 00:32:06,280 دولت از جهان به نظر می رسد مثل این. در ابتدا، 8 اختصاص یافته است. 534 00:32:06,280 --> 00:32:10,550 یک راه بهتر از قرار دادن 8 چه خواهد بود؟ 535 00:32:10,550 --> 00:32:14,720 به جای به روز رسانی این اشاره گر برای اولین بار، فقط این یکی در اینجا به جای به روز رسانی. 536 00:32:14,720 --> 00:32:17,720 بنابراین ما نیاز به یک خط از کد است که به نوبه خود این کاراکتر NULL 537 00:32:17,720 --> 00:32:22,020 به یک اشاره گر واقعی که اشاره به گره 9، 538 00:32:22,020 --> 00:32:27,970 و پس از آن ما با خیال راحت می توانید اولین در این مرد نکته در اینجا است. 539 00:32:27,970 --> 00:32:31,330 در حال حاضر ما باید یک لیست، یک لیست پیوندی از دو عنصر است. 540 00:32:31,330 --> 00:32:33,580 و چه این در واقع مثل اینجا نگاه کنید؟ 541 00:32:33,580 --> 00:32:36,900 اگر ما نگاهی به کد نگاه کنید، توجه کنید که دقیقا همان است که من انجام داده ام. 542 00:32:36,900 --> 00:32:41,970 من گفت: newptr، و در این داستان، newptr اشاره در این مرد بود. 543 00:32:41,970 --> 00:32:45,520 >> بنابراین اجازه دهید یک چیز بیشتر جلب کنم، و من باید جا کمی بیشتر برای این است. 544 00:32:45,520 --> 00:32:48,540 بنابراین نقاشی کوچک ببخشند. 545 00:32:48,540 --> 00:32:52,140 این مرد به نام newptr. 546 00:32:52,140 --> 00:32:57,940 این متغیر به ما اعلام کرد که چند خط قبل، در خط - فقط بالای 25. 547 00:32:57,940 --> 00:33:03,430 و آن را با اشاره به 8 است. بنابراین، هنگامی که من می گویم newptr بعدی>، این بدان معناست که به ساختار 548 00:33:03,430 --> 00:33:07,910 که در توسط newptr اشاره کرد، بنابراین در اینجا ما هستند، به وجود دارد. 549 00:33:07,910 --> 00:33:13,990 سپس فلش است گفت: زمینه آینده، و پس از آن = می گوید قرار دادن چه مقدار وجود دارد؟ 550 00:33:13,990 --> 00:33:17,280 ارزش بود که برای اولین بار در چه مقدار برای اولین بار در؟ 551 00:33:17,280 --> 00:33:21,930 اولین اشاره در این گره شده بود، بنابراین این بدان معناست که این در حال حاضر باید در این گره نقطه. 552 00:33:21,930 --> 00:33:25,660 به عبارت دیگر، آنچه به نظر می رسد البته ظروف سرباز یا مسافر مضحک با دست خط من، 553 00:33:25,660 --> 00:33:28,620 یک ایده ساده و فقط در حال حرکت این فلش در سراسر 554 00:33:28,620 --> 00:33:31,560 ترجمه به کد فقط با این بوش. 555 00:33:31,560 --> 00:33:38,110 فروشگاه چیزی است که در اولین بار در زمینه آینده و پس از آن به روز رسانی 1 واقع است. 556 00:33:38,110 --> 00:33:40,900 اجازه دهید به جلو بروید و به سرعت رو به جلو را از طریق برخی از این 557 00:33:40,900 --> 00:33:44,220 و نگاه در حال حاضر فقط در درج این دم. 558 00:33:44,220 --> 00:33:51,210 فرض کنید من به نقطه ای که در آن پیدا کنم که زمینه برخی از گره NULL آورید. 559 00:33:51,210 --> 00:33:53,410 و در این نقطه در داستان، با جزئیات است که من glossing بیش از 560 00:33:53,410 --> 00:33:58,170 این است که من به معرفی یکی دیگر از اشاره گر تا اینجا در خط 142، اشاره گر سلف. 561 00:33:58,170 --> 00:34:01,320 اساسا، در این نقطه در داستان، یک بار لیست می شود طولانی، 562 00:34:01,320 --> 00:34:04,800 من نوع نیاز به آن را با دو انگشت راه بروند چرا که اگر بیش از حد، 563 00:34:04,800 --> 00:34:08,219 به یاد داشته باشید در یک لیست واحد طول، شما نمی توانید به عقب. 564 00:34:08,219 --> 00:34:13,659 بنابراین این ایده از predptr انگشت سمت چپ من است، و newptr - newptr نیست. 565 00:34:13,659 --> 00:34:17,199 یکی دیگر از اشاره گر است که در اینجا، انگشت دیگر من است، و من فقط نوع راه رفتن این فهرست است. 566 00:34:17,199 --> 00:34:22,179 به همین دلیل است که وجود دارد. اما اجازه دهید که تنها یکی از موارد ساده تر در اینجا در نظر. 567 00:34:22,179 --> 00:34:26,620 اگر میدان بعدی که اشاره گر NULL است، چه مفهوم منطقی است؟ 568 00:34:26,620 --> 00:34:30,840 اگر شما در حال عبور این لیست و به شما رسید یک اشاره گر NULL است؟ 569 00:34:30,840 --> 00:34:35,780 شما در انتهای لیست هستید، و بنابراین کد به آن اضافه این یک عنصر اضافی 570 00:34:35,780 --> 00:34:41,230 مرتب سازی بر اساس حسی که گره که در کنار اشاره گر NULL، 571 00:34:41,230 --> 00:34:46,120 پس از این است که در حال حاضر NULL، و آن را تغییر دهید، هر چند، به آدرس گره جدید است. 572 00:34:46,120 --> 00:34:52,260 بنابراین ما فقط در کد طراحی فلش است که ما در صحنه با بالا بردن دست چپ کسی را به خود جلب کرد. 573 00:34:52,260 --> 00:34:54,070 >> و در صورتی که من تو دست من در حال حاضر موج، 574 00:34:54,070 --> 00:34:58,020 فقط به خاطر اینکه من فکر می کنم آن را آسان به گم که ما آن را انجام دهید در این نوع از محیط زیست، 575 00:34:58,020 --> 00:35:00,600 برای چک کردن قرار دادن در وسط لیست. 576 00:35:00,600 --> 00:35:03,220 اما فقط به طور مستقیم، چه اتفاقی باید بیفتد اگر شما می خواهید برای کشف کردن 577 00:35:03,220 --> 00:35:06,600 که در آن برخی از شماره به آن تعلق دارد در وسط این است که شما باید آن را به راه رفتن 578 00:35:06,600 --> 00:35:09,510 با بیش از یک انگشت، بیش از یک اشاره گر، 579 00:35:09,510 --> 00:35:12,920 که در آن با چک کردن به آن تعلق دارد این عنصر کمتر از یک جریان، 580 00:35:12,920 --> 00:35:15,450 > در حال حاضر، و در هنگامی که شما در پیدا کردن این محل، 581 00:35:15,450 --> 00:35:20,400 پس از آن شما را مجبور به انجام این نوع از پوسته بازی که در آن شما حرکت اشاره گر را در اطراف با دقت بسیار. 582 00:35:20,400 --> 00:35:23,850 و این پاسخ، اگر شما می خواهم به همین دلیل از طریق این دوست در خانه را آن گونه که مایلید تغییر دهید، 583 00:35:23,850 --> 00:35:28,340 جوش پایین فقط به این دو خط کد است، اما منظور از آن خطوط فوق العاده مهم است. 584 00:35:28,340 --> 00:35:31,390 از آنجا که اگر دست کسی شما را رها کردن و بالا بردن شخص دیگری در جهت اشتباه است، 585 00:35:31,390 --> 00:35:34,580 باز هم، شما می توانید تا پایان یتیم این فهرست است. 586 00:35:34,580 --> 00:35:39,500 به طور خلاصه از نظر مفهومی، درج در دم نسبتا سر راست است. 587 00:35:39,500 --> 00:35:42,940 درج در سر نیز نسبتا سرراست است، 588 00:35:42,940 --> 00:35:45,580 اما شما نیاز به اشاره گر دیگر این زمان به روز رسانی 589 00:35:45,580 --> 00:35:47,930 به فشار شماره 5 در اینجا، به لیست 590 00:35:47,930 --> 00:35:51,560 و سپس قرار دادن در وسط شامل تلاش و حتی بیشتر، 591 00:35:51,560 --> 00:35:56,130 بسیار با دقت در محل صحیح خود قرار دادن شماره 20، 592 00:35:56,130 --> 00:35:58,350 است که بین 17 و 22. 593 00:35:58,350 --> 00:36:02,700 بنابراین شما نیاز به چیزی شبیه به گره جدید 20 تا 22، 594 00:36:02,700 --> 00:36:08,470 و پس از آن، اشاره گر که گره نیاز به به روز رسانی و زمان آخرین؟ 595 00:36:08,470 --> 00:36:10,630 این 17 است، در واقع آن را درج کنید. 596 00:36:10,630 --> 00:36:14,080 بنابراین دوباره، من کد واقعی که برای اجرای خاص تسلیم. 597 00:36:14,080 --> 00:36:17,280 >> در نگاه اول، کمی سخت و طاقت فرسا است، اما واقعا فقط یک حلقه بی نهایت 598 00:36:17,280 --> 00:36:21,770 که حلقه، حلقه، حلقه، حلقه، و شکستن به محض این که شما ضربه اشاره گر NULL، 599 00:36:21,770 --> 00:36:24,590 که در آن شما می توانید درج لازمه را انجام دهد. 600 00:36:24,590 --> 00:36:30,960 این، پس از آن، نماینده مرتبط با لیست کد درج شده است. 601 00:36:30,960 --> 00:36:34,590 این نوع از بسیاری بود، و آن را احساس می کند که یکی از مشکلات ما را حل، 602 00:36:34,590 --> 00:36:36,940 اما ما به معرفی کل یک دیگر است. صادقانه بگویم، ما صرف این همه زمان 603 00:36:36,940 --> 00:36:40,540 در بزرگ O و Ω و در حال اجرا، تلاش برای حل مشکلات با سرعت بیشتری، 604 00:36:40,540 --> 00:36:43,270 و در اینجا ما در حال گرفتن یک گام بزرگ به عقب، آن را احساس می کند. 605 00:36:43,270 --> 00:36:45,380 و در عین حال، اگر هدف این است که برای ذخیره اطلاعات، 606 00:36:45,380 --> 00:36:48,010 آن را مانند جام مقدس احساس می کند، همانطور که ما در روز دوشنبه گفت، واقعا خواهد بود 607 00:36:48,010 --> 00:36:50,470 برای ذخیره همه چیز فورا. 608 00:36:50,470 --> 00:36:53,930 >> در واقع، فرض کنید که ما لیست کنار گذاشته مرتبط برای یک لحظه 609 00:36:53,930 --> 00:36:56,000 و ما به جای معرفی مفهوم یک جدول است. 610 00:36:56,000 --> 00:36:59,110 و بهتر است فقط از یک جدول فکر می کنم برای یک لحظه به عنوان یک آرایه است. 611 00:36:59,110 --> 00:37:03,790 این آرایه و این مورد در اینجا 26 عناصر 0 تا 25، 612 00:37:03,790 --> 00:37:07,940 و فرض کنید که شما برخی از تکه های ذخیره سازی برای نام های مورد نیاز: 613 00:37:07,940 --> 00:37:10,350 آلیس و باب و چارلی و مانند آن. 614 00:37:10,350 --> 00:37:12,880 و شما نیاز به برخی از ساختمان داده به ذخیره آن نام است. 615 00:37:12,880 --> 00:37:15,000 خب، شما می توانید چیزی شبیه به یک لیست پیوندی استفاده کنید 616 00:37:15,000 --> 00:37:20,260 و شما می توانید لیست قرار دادن آلیس قبل از باب و چارلی پس از باب راه رفتن و غیره. 617 00:37:20,260 --> 00:37:23,850 و، در واقع، اگر شما می خواهید برای دیدن کد به آن را به عنوان به کنار، 618 00:37:23,850 --> 00:37:27,230 می دانم که در list2.h، دقیقا همان است که ما انجام می دهیم. 619 00:37:27,230 --> 00:37:30,610 ما نمی خواهد از طریق این کد، اما این است که یک نوع از مثال اول 620 00:37:30,610 --> 00:37:34,640 است که به معرفی یک ساختار دیگر ما که قبل از دانش آموزان به اصطلاح دیده می شود، 621 00:37:34,640 --> 00:37:40,330 و پس از آن چیزی است که آن را در واقع در لیست پیوندی ذخیره یک اشاره گر به ساختار دانشجویی 622 00:37:40,330 --> 00:37:44,520 به جای یک عدد صحیح ساده کوچک، N. 623 00:37:44,520 --> 00:37:46,900 بنابراین درک کد وجود دارد وجود دارد که شامل رشته های واقعی، 624 00:37:46,900 --> 00:37:49,940 اما اگر هدف در دست واقعا در حال حاضر است که برای رسیدگی به مشکل بهره وری، 625 00:37:49,940 --> 00:37:53,380 آن را نه خوب می شود اگر ما با توجه به یک شی به نام آلیس، 626 00:37:53,380 --> 00:37:56,020 ما می خواهیم تا او را به محل مناسب در ساختار داده ها قرار داده است، 627 00:37:56,020 --> 00:37:58,860 آن را احساس می کند مانند آن را واقعا خوب می شود فقط با قرار دادن آلیس، 628 00:37:58,860 --> 00:38:01,180 که نام شروع می شود با A، در مکان اول است. 629 00:38:01,180 --> 00:38:05,270 و باب که نامش با B شروع می شود، در مکان دوم است. 630 00:38:05,270 --> 00:38:09,580 با استفاده از یک آرایه، و یا اجازه دهید که آن را به یک جدول، یک جدول هش را در آن، 631 00:38:09,580 --> 00:38:13,650 دقیقا همان است که ما می توانیم انجام دهیم. اگر ما با توجه به نام مثل آلیس، 632 00:38:13,650 --> 00:38:16,700 یک رشته مانند آلیس، که در آن A-L-I-C-E شما قرار داده است؟ 633 00:38:16,700 --> 00:38:20,540 ما نیاز به یک hueristic. ما نیاز به یک تابع را به برخی از ورودی مانند آلیس 634 00:38:20,540 --> 00:38:24,610 و بازگشت پاسخ، "آلیس در این مکان قرار دهید." 635 00:38:24,610 --> 00:38:28,720 و این تابع، این جعبه سیاه و سفید، به نام یک تابع هش. 636 00:38:28,720 --> 00:38:32,330 >> یک تابع هش چیزی است که طول می کشد یک ورودی، مانند "آلیس" است، 637 00:38:32,330 --> 00:38:38,080 و بازده به شما، به طور معمول، محل سکونت عددی در برخی از ساختمان داده که در آن آلیس به آن تعلق دارد. 638 00:38:38,080 --> 00:38:40,830 در این مورد، تابع هش ما باید نسبتا ساده است. 639 00:38:40,830 --> 00:38:47,510 تابع هش ما باید گفت، اگر شما با توجه به "آلیس"، که شخصیت باید در مورد مراقبت؟ 640 00:38:47,510 --> 00:38:55,660 یکی از اولین. بنابراین من در [0] نگاه کنید، و پس از آن من می گویم اگر [0] کاراکتر A، بازگشت به شماره 0. 641 00:38:55,660 --> 00:39:01,130 اگر B، بازگشت 1. اگر C آن، بازگشت 2، و غیره. 642 00:39:01,130 --> 00:39:05,940 شاخص 0، و این که به من اجازه می دهد به قرار دادن آلیس و باب و سپس چارلی و غیره 643 00:39:05,940 --> 00:39:10,960 به این ساختار داده ها. اما یک مشکل وجود دارد. 644 00:39:10,960 --> 00:39:13,060 چه می شود اگر آنیتا می آید همراه دوباره؟ 645 00:39:13,060 --> 00:39:17,510 کجا می توانم آنیتا ما را؟ نام او، بیش از حد، با حرف A شروع می شود، 646 00:39:17,510 --> 00:39:20,330 و آن را احساس می کند مانند ظروف سرباز یا مسافر حتی بزرگتر از این مشکل را ساخته ایم. 647 00:39:20,330 --> 00:39:24,380 ما در حال حاضر به درج فوری، قرار دادن زمان ثابت، به ساختار داده ها 648 00:39:24,380 --> 00:39:27,100 به جای بدتر مورد خطی، 649 00:39:27,100 --> 00:39:29,510 اما آنچه که می تواند ما را با آنیتا در این مورد کاری انجام دهید؟ 650 00:39:29,510 --> 00:39:34,110 چه هستند این دو گزینه، واقعا؟ آره؟ 651 00:39:34,110 --> 00:39:37,410 [پاسخ دانشجو، ناخوانا] خوب، به طوری که ما می تواند ابعاد دیگری داشته باشد. 652 00:39:37,410 --> 00:39:42,320 این خوب است. بنابراین ما می توانیم مسائل را ساختن در 3D مثل ما صحبت شفاهی در روز دوشنبه است. 653 00:39:42,320 --> 00:39:46,700 ما می تواند یکی دیگر از دسترسی را در اینجا اضافه کنید، اما فرض کنید که هیچ، من در تلاش برای حفظ این ساده. 654 00:39:46,700 --> 00:39:50,160 هدف در اینجا این است که دسترسی فوری ثابت زمان، 655 00:39:50,160 --> 00:39:52,170 به طوری که با اضافه کردن پیچیدگی بیش از حد است. 656 00:39:52,170 --> 00:39:55,970 گزینه های دیگر که در هنگام تلاش برای وارد کردن آنیتا به این ساختار داده ها چه هستند؟ آره؟ 657 00:39:55,970 --> 00:39:58,610 [پاسخ دانشجو، ناخوانا] خوب. بنابراین ما می توانیم هر کس دیگری به پایین حرکت می کند، 658 00:39:58,610 --> 00:40:03,040 مانند nudges چارلی پایین باب و آلیس، و پس از آن ما را آنیتا جایی که او واقعا می خواهد. 659 00:40:03,040 --> 00:40:05,660 >> البته، در حال حاضر، یک عارضه جانبی از این وجود دارد. 660 00:40:05,660 --> 00:40:09,000 این ساختار داده ها است که احتمالا به این دلیل نیست که ما می خواهیم برای وارد کردن مردم یک بار 661 00:40:09,000 --> 00:40:11,250 بلکه به این دلیل که ما می خواهیم به بررسی کنید که آیا آنها بعد از 662 00:40:11,250 --> 00:40:13,600 اگر ما می خواهیم برای چاپ کردن همه نامها در ساختار داده ها. 663 00:40:13,600 --> 00:40:15,850 ما قصد داریم برای انجام کاری با این داده ها در نهایت. 664 00:40:15,850 --> 00:40:20,810 بنابراین در حال حاضر ما از نوع پیچ بیش از آلیس، که دیگر جایی که او تصور می شود. 665 00:40:20,810 --> 00:40:23,880 نه باب است، و نه چارلی است. 666 00:40:23,880 --> 00:40:26,060 شاید این یک ایده خوب نیست. 667 00:40:26,060 --> 00:40:28,830 اما در واقع، این یک گزینه است. ما می توانیم همه را تغییر 668 00:40:28,830 --> 00:40:32,240 یا هک، آنیتا دیر به بازی آمد، چرا ما نه تنها آنیتا قرار داده است 669 00:40:32,240 --> 00:40:35,870 نه در اینجا، اینجا نه، اینجا نه، اجازه دهید فقط او را کمی پایین تر در فهرست. 670 00:40:35,870 --> 00:40:38,680 اما پس از آن این مشکل شروع می شود به واگذاردن دوباره. 671 00:40:38,680 --> 00:40:41,630 شما ممکن است قادر به پیدا کردن آلیس بلافاصله، بر اساس نام و نام خانوادگی خود را. 672 00:40:41,630 --> 00:40:44,320 و باب، بلافاصله، و چارلی. اما پس از آن شما برای آنیتا نگاه کنید، 673 00:40:44,320 --> 00:40:46,360 و شما می بینید، HMM، آلیس در راه است. 674 00:40:46,360 --> 00:40:48,770 خوب، اجازه دهید من زیر آلیس چک کنید. باب آنیتا نیست. 675 00:40:48,770 --> 00:40:51,850 چارلی آنیتا نیست. اوه، آنیتا وجود دارد. 676 00:40:51,850 --> 00:40:54,720 و اگر شما همچنان که قطار از منطق تمام راه، 677 00:40:54,720 --> 00:41:00,690 بدترین زمان در حال اجرا از پیدا کردن و یا قرار دادن آنیتا به این ساختار داده های جدید؟ 678 00:41:00,690 --> 00:41:03,280 O (n) است، درست است؟ 679 00:41:03,280 --> 00:41:06,280 از آنجا که در بدترین حالت، آلیس، باب، چارلی وجود دارد. است. است. 680 00:41:06,280 --> 00:41:10,150 تمام راه را به فردی به نام "Y"، به طوری که تنها یک نقطه وجود دارد را ترک کردند. 681 00:41:10,150 --> 00:41:13,950 خوشبختانه، هیچ کس به نام "Z"، بنابراین ما آنیتا در سطح بسیار پائین قرار داده است. 682 00:41:13,950 --> 00:41:16,040 >> ما واقعا به حل این مشکل است. 683 00:41:16,040 --> 00:41:19,890 بنابراین شاید ما نیاز به این بعد سوم را به شما معرفی. 684 00:41:19,890 --> 00:41:22,230 و معلوم، اگر ما معرفی این بعد سوم، 685 00:41:22,230 --> 00:41:25,240 ما می توانیم این کار را انجام دهند نه کاملا، اما جام مقدس است که رفتن به گرفتن 686 00:41:25,240 --> 00:41:28,370 قرار دادن زمان ثابت و پویا اضافه به طوری که 687 00:41:28,370 --> 00:41:30,960 ما لازم نیست که به کد سخت مجموعه ای از اندازه 26. 688 00:41:30,960 --> 00:41:34,400 ما می توانیم به عنوان بسیاری از نام های وارد که ما می خواهیم، ​​اما اجازه دهید 5 دقیقه استراحت ما در اینجا 689 00:41:34,400 --> 00:41:38,790 و پس از آن به درستی انجام دهد. 690 00:41:38,790 --> 00:41:46,020 بسیار خوب. من مجموعه ای از داستان خیلی مصنوعی وجود دارد 691 00:41:46,020 --> 00:41:48,670 با انتخاب آلیس و چارلی باب و پس از آن بعد از آن و پس از آن آنیتا، 692 00:41:48,670 --> 00:41:51,000 که نام واضح است که قرار بود با آلیس برخورد می کنند. 693 00:41:51,000 --> 00:41:54,120 اما سوال ما در روز دوشنبه به پایان رسید این است که چقدر احتمال آن است که 694 00:41:54,120 --> 00:41:56,370 که شما می توانید این نوع از برخورد را دریافت کنم؟ به عبارت دیگر، 695 00:41:56,370 --> 00:42:00,490 اگر ما شروع به استفاده از این ساختار جدولی است که واقعا فقط یک آرایه، 696 00:42:00,490 --> 00:42:02,460 در این مورد از 26 مکان، 697 00:42:02,460 --> 00:42:05,740 چه می شود اگر ورودی ما به جای توزیع یکنواخت؟ 698 00:42:05,740 --> 00:42:09,620 این مصنوعی آلیس و باب و چارلی و دیوید و به همین ترتیب حروف الفبا، 699 00:42:09,620 --> 00:42:12,380 آن را بطور یکنواخت از طریق Z. بیش از یک توزیع 700 00:42:12,380 --> 00:42:15,220 >> شاید ما فقط خوش شانس دریافت است و ما قصد داریم به دو یا دو B 701 00:42:15,220 --> 00:42:17,640 با احتمال بسیار بالا است، اما به عنوان کسی که اشاره کرد، 702 00:42:17,640 --> 00:42:20,730 اگر ما تعمیم این مشکل و نه از 0 تا 25 703 00:42:20,730 --> 00:42:26,060 اما، می گویند، 0 تا 364 یا 65، در اغلب موارد تعداد روزها در یک سال معمولی، 704 00:42:26,060 --> 00:42:31,170 و سوال پرسید: "چه احتمال این که دو نفر از ما در این اتاق همان روز تولد؟ 705 00:42:31,170 --> 00:42:34,600 از آن راه دیگری قرار داده، چه احتمال این که دو نفر از ما یک نام شروع با؟ 706 00:42:34,600 --> 00:42:37,190 مرتب کردن بر اساس سوال همان است، اما این فضای آدرس، 707 00:42:37,190 --> 00:42:39,940 این فضای جستجو، بزرگتر است در مورد تولد، 708 00:42:39,940 --> 00:42:42,820 از آنجا که ما روز بسیار زیادی در سال از حروف الفبا. 709 00:42:42,820 --> 00:42:44,910 احتمال برخورد چه خبر؟ 710 00:42:44,910 --> 00:42:48,410 خب، ما می توانیم این کار را بدانند ریاضی راه مخالف فکر می کنم. 711 00:42:48,410 --> 00:42:50,580 احتمال هیچ برخورد چه خبر؟ 712 00:42:50,580 --> 00:42:53,970 خوب، این عبارت در اینجا می گوید که احتمال 713 00:42:53,970 --> 00:42:58,770 اگر فقط یک نفر در این اتاق، که آنها را منحصر به فرد تولد وجود دارد؟ 714 00:42:58,770 --> 00:43:01,190 این 100٪ است. زیرا اگر تنها یک نفر در اتاق وجود دارد، 715 00:43:01,190 --> 00:43:03,940 و یا تاریخ تولد خود می تواند هر یک از 365 روز از سال است. 716 00:43:03,940 --> 00:43:08,650 بنابراین 365/365 گزینه به من می دهد یک مقدار از 1. 717 00:43:08,650 --> 00:43:11,250 بنابراین احتمال در مورد در حال حاضر فقط 1 است. 718 00:43:11,250 --> 00:43:13,270 اما اگر فرد دوم در اتاق وجود دارد، 719 00:43:13,270 --> 00:43:16,490 احتمال که تاریخ تولد آنها متفاوت است؟ 720 00:43:16,490 --> 00:43:20,680 تنها 364 روز، بدون در نظر گرفتن سال کبیسه وجود دارد، 721 00:43:20,680 --> 00:43:23,580 برای روز تولد خود را با افراد دیگر برخورد می کنند. 722 00:43:23,580 --> 00:43:31,920 بنابراین 364/365. اگر یک شخص سوم در می آید، آن را 363/365، و غیره. 723 00:43:31,920 --> 00:43:35,790 پس ما را ضرب با هم این فراکسیون، که در حال گرفتن کوچک و کوچکتر، 724 00:43:35,790 --> 00:43:40,720 به شکل از آنچه احتمال است که همه ما جشن های تولد منحصر به فرد است؟ 725 00:43:40,720 --> 00:43:43,570 اما پس از آن ما می توانیم، البته، فقط جواب تلنگر آن را در سراسر 726 00:43:43,570 --> 00:43:47,210 و 1 منهای تمام از آن، بیان ما در نهایت خواهید 727 00:43:47,210 --> 00:43:51,250 اگر شما به یاد داشته باشید پشت کتاب ریاضی خود را، آن را به نظر می رسد چیزی کمی شبیه به این، 728 00:43:51,250 --> 00:43:54,590 است که بسیار آسان تر از تفسیر گرافیکی. 729 00:43:54,590 --> 00:43:57,820 و این گرافیک بر روی محور X شماره تولد، 730 00:43:57,820 --> 00:44:02,030 و یا تعدادی از افراد مبتلا به متولد، و در محور Y احتمال یک مسابقه است. 731 00:44:02,030 --> 00:44:06,060 و آنچه در این گفت این است که اگر شما، اجازه دهید بگویم، حتی، 732 00:44:06,060 --> 00:44:10,860 اجازه دهید چیزی شبیه به 22، 23 را انتخاب کنید. 733 00:44:10,860 --> 00:44:13,160 اگر 22 یا 23 نفر در اتاق وجود دارد، 734 00:44:13,160 --> 00:44:17,100 احتمال این که دو نفر از این افراد بسیار کمی در حال رفتن به تولد 735 00:44:17,100 --> 00:44:19,560 است که در واقع بالا فوق العاده، combinatorially. 736 00:44:19,560 --> 00:44:23,450 50 شانس٪ است که در یک کلاس فقط 22 نفر، سمینار، عملا، 737 00:44:23,450 --> 00:44:25,790 2 از این افراد در حال رفتن به تولد. 738 00:44:25,790 --> 00:44:28,520 چرا که راه های زیادی وجود دارد که در آن شما می توانید تاریخ تولد یکسانی داشته باشند. 739 00:44:28,520 --> 00:44:31,110 حتی بدتر از آن، اگر شما در سمت راست نمودار نگاه کنید، 740 00:44:31,110 --> 00:44:34,040 در زمانی که شما یک کلاس با 58 دانش آموز در آن، 741 00:44:34,040 --> 00:44:39,270 احتمال 2 نفر داشتن یک تولد فوق العاده، فوق العاده بالا، نزدیک به 100٪ است. 742 00:44:39,270 --> 00:44:41,880 در حال حاضر، که مرتب سازی بر اساس یک واقعیت جالب در مورد زندگی واقعی است. 743 00:44:41,880 --> 00:44:45,850 >> اما مفاهیم، ​​در حال حاضر، برای سازه های داده و اطلاعات ذخیره سازی 744 00:44:45,850 --> 00:44:51,100 بدان معنی است که فقط با فرض شما خوب، پاک، توزیع یکنواخت داده ها 745 00:44:51,100 --> 00:44:53,650 و شما باید یک آرایه به اندازه کافی بزرگ یک دسته از مسائل به جا 746 00:44:53,650 --> 00:44:59,360 به این معنا نیست که شما در حال رفتن به مردم در مکان های منحصر به فرد است. 747 00:44:59,360 --> 00:45:03,810 شما در حال رفتن به برخورد. بنابراین این مفهوم از هش کردن، آن را به عنوان نامیده می شود، 748 00:45:03,810 --> 00:45:07,450 گرفتن ورودی مانند "آلیس" و ماساژ آن را در برخی از راه 749 00:45:07,450 --> 00:45:10,190 و پس از آن جواب مثل 0 یا 1 یا 2. 750 00:45:10,190 --> 00:45:17,500 به دست آوردن برخی از خروجی آن تابع است با این احتمال برخورد گرفتار شده است. 751 00:45:17,500 --> 00:45:19,530 پس چگونه می تواند کسانی که برخورد ما رسیدگی؟ 752 00:45:19,530 --> 00:45:21,940 خب، در یک مورد، ما می توانیم این ایده که پیشنهاد شد. 753 00:45:21,940 --> 00:45:25,100 ما فقط می تواند همه را تغییر و یا شاید کمی ساده تر، 754 00:45:25,100 --> 00:45:29,870 نه از همه حرکت دیگری، اجازه دهید فقط حرکت آنیتا به پایین از نقطه ای در دسترس است. 755 00:45:29,870 --> 00:45:32,810 بنابراین اگر آلیس در 0، باب 1، چارلی در 2، 756 00:45:32,810 --> 00:45:35,260 ما فقط آنیتا در محل 3 قرار داده است. 757 00:45:35,260 --> 00:45:38,860 و این روش در ساختمان های داده به نام کاوش خطی است. 758 00:45:38,860 --> 00:45:41,310 خطی زیرا شما فقط پیاده روی این خط، و شما در حال مرتب کردن بر اساس کاوش 759 00:45:41,310 --> 00:45:43,640 برای لکه های موجود در ساختار داده ها. 760 00:45:43,640 --> 00:45:46,210 البته، این devolves به O (n) است. 761 00:45:46,210 --> 00:45:49,590 اگر ساختمان داده واقعا کامل است، 25 نفر در آن وجود دارد در حال حاضر، 762 00:45:49,590 --> 00:45:54,120 و سپس آنیتا به همراه می آید، او به پایان می رسد تا در چه خواهد بود محل سکونت Z، و این خوب است. 763 00:45:54,120 --> 00:45:56,540 او هنوز هم متناسب است، و ما می توانیم او را بعد از پیدا کردن. 764 00:45:56,540 --> 00:46:00,100 >> اما این خلاف به هدف از سرعت چیز بود. 765 00:46:00,100 --> 00:46:02,530 پس چه می شود اگر ما به جای معرفی این بعد سوم؟ 766 00:46:02,530 --> 00:46:06,400 این روش به طور کلی زنجیره ای جداگانه نامیده می شود، و یا داشتن زنجیر است. 767 00:46:06,400 --> 00:46:10,030 و چه یک جدول هش در حال حاضر، این ساختار جدولی، 768 00:46:10,030 --> 00:46:13,450 جدول شما فقط یک آرایه ای از اشاره گرها. 769 00:46:13,450 --> 00:46:18,230 اما آنچه که اشاره گر اشاره به حدس بزن چی شده است؟ 770 00:46:18,230 --> 00:46:21,970 لیست پیوندی. پس چه در صورتی که هر دو از این دنیا (دنیای شخصی ودنیای هنری) را اجرامی کنید ما را؟ 771 00:46:21,970 --> 00:46:26,500 ما با استفاده از آرایه ها برای شاخص های اولیه 772 00:46:26,500 --> 00:46:32,070 به ساختار داده تا ما فورا می توانید به [0] [1]، [30] و یا غیره، 773 00:46:32,070 --> 00:46:36,480 اما به طوری که ما باید برخی از انعطاف پذیری و ما می توانیم آنیتا و آلیس و آدم جا 774 00:46:36,480 --> 00:46:38,630 و هر یک نام، 775 00:46:38,630 --> 00:46:43,470 ما به جای رشد محور دیگر خودسرانه کنیم. 776 00:46:43,470 --> 00:46:47,340 و ما در نهایت، به عنوان روز دوشنبه، که توانایی بیانی با لیست پیوندی. 777 00:46:47,340 --> 00:46:49,530 ما می توانیم یک ساختار داده ها خودسرانه رشد می کنند. 778 00:46:49,530 --> 00:46:52,450 متناوبا، ما فقط می تواند یک آرایه 2 بعدی بزرگ را، 779 00:46:52,450 --> 00:46:57,190 اما برای رفتن به یک وضعیت افتضاح اگر یکی از ردیف ها را در یک آرایه 2 بعدی 780 00:46:57,190 --> 00:47:01,280 برای شخص دیگری که نام اتفاق می افتد با A. شروع به اندازه کافی بزرگ نیست 781 00:47:01,280 --> 00:47:04,200 خدای ناکرده ما را به دوباره اختصاص 2 بعدی ساختار بزرگ 782 00:47:04,200 --> 00:47:06,600 فقط به خاطر اینکه بسیاری از مردم وجود دارد به نام، 783 00:47:06,600 --> 00:47:09,480 به ویژه هنگامی که تعداد کمی از مردم به نام چیزی Z وجود دارد. 784 00:47:09,480 --> 00:47:12,170 این فقط برای رفتن به ساختمان داده بسیار پراکنده است. 785 00:47:12,170 --> 00:47:15,400 پس از آن به هر وسیله مناسب نیست، اما در حال حاضر ما حداقل توانایی 786 00:47:15,400 --> 00:47:19,090 فورا به پیدا کردن جایی که آلیس یا آنیتا به آن تعلق دارد، 787 00:47:19,090 --> 00:47:21,090 حداقل در شرایط استفاده از محور عمودی، 788 00:47:21,090 --> 00:47:25,850 و پس از آن ما فقط باید تصمیم بگیرید که در آن برای قرار دادن آنیتا یا آلیس در سرزمین این لیست پیوندی. 789 00:47:25,850 --> 00:47:32,480 اگر ما در مورد مرتب سازی کارها اهمیتی نمی دهند، چگونه به سرعت می تواند آلیس ما وارد را به یک ساختار شبیه به این؟ 790 00:47:32,480 --> 00:47:35,370 این زمان ثابت است. ما را به [0] صفحه اول، و اگر وجود دارد هیچ کس، 791 00:47:35,370 --> 00:47:37,550 آلیس می رود در آغاز که لیست های پیوندی می باشد. 792 00:47:37,550 --> 00:47:40,000 اما این یک معامله بزرگ است. از آنجا که اگر آنیتا پس از آن می آید همراه 793 00:47:40,000 --> 00:47:42,160 برخی از تعدادی از مراحل بعد، که در آن آنیتا تعلق دارد؟ 794 00:47:42,160 --> 00:47:45,140 خب، [0]. OOP. آلیس در حال حاضر در آن لیست پیوندی. 795 00:47:45,140 --> 00:47:47,760 >> اما اگر ما در مورد مرتب سازی بر این نام برام مهم نیست، 796 00:47:47,760 --> 00:47:53,580 ما فقط می تواند آلیس بر این، قرار دادن آنیتا، حرکت می کند، اما حتی که زمان ثابت است. 797 00:47:53,580 --> 00:47:57,010 حتی اگر آلیس و آدم و همه این نام وجود دارد، 798 00:47:57,010 --> 00:47:59,410 واقعا آنها را تغییر فیزیکی است. چرا؟ 799 00:47:59,410 --> 00:48:04,090 از آنجا که ما فقط در اینجا با لیست پیوندی، که می داند که آیا این گره ها شد به هر حال؟ 800 00:48:04,090 --> 00:48:06,550 همه شما باید انجام دهید این است که حرکت خرده نان. 801 00:48:06,550 --> 00:48:10,930 حرکت از فلش در اطراف، شما لازم نیست که به صورت فیزیکی انتقال هر گونه داده در اطراف. 802 00:48:10,930 --> 00:48:14,610 بنابراین ما می توانیم آنیتا، قرار دادن در آن صورت، فورا. زمان ثابت است. 803 00:48:14,610 --> 00:48:20,250 بنابراین ما باید زمان مراجعه، ثابت و زمان ثابت درج کسی مثل آنیتا. 804 00:48:20,250 --> 00:48:22,740 اما نوع ساده انگاشت جهان. 805 00:48:22,740 --> 00:48:28,510 اگر ما بعدا می خواهید برای پیدا کردن آلیس؟ 806 00:48:28,510 --> 00:48:31,050 اگر ما بعدا می خواهید برای پیدا کردن آلیس؟ 807 00:48:31,050 --> 00:48:35,690 چگونه بسیاری از مراحل است که رفتن را؟ 808 00:48:35,690 --> 00:48:37,850 [پاسخ دانشجویی، ناخوانا] 809 00:48:37,850 --> 00:48:40,950 دقیقا. تعداد زیادی از مردم قبل از آلیس در لیست پیوندی. 810 00:48:40,950 --> 00:48:45,420 پس از آن کاملا بی نقص نیست، چرا که ساختار داده های ما، دوباره، این دسترسی عمودی 811 00:48:45,420 --> 00:48:50,240 و سپس آن را تا به این لیست های پیوندی حلق آویز - در واقع، اجازه دهید آن را یک آرایه قرعه کشی نیست. 812 00:48:50,240 --> 00:48:56,020 این به این لیست های پیوندی حلق آویز کردن از آن است که به نظر می رسد چیزی کمی مانند این. 813 00:48:56,020 --> 00:48:59,110 اما مشکل این است که اگر آلیس و آدم و این همه نام 814 00:48:59,110 --> 00:49:01,720 تا پایان بیشتر و بیشتر به بیش از وجود دارد، 815 00:49:01,720 --> 00:49:04,810 پیدا کردن کسی می تواند در نهایت گرفتن یک دسته از مراحل، 816 00:49:04,810 --> 00:49:06,670 bcause شما را مجبور به گذشتن از لیست پیوندی 817 00:49:06,670 --> 00:49:08,090 که یک عملیات خطی است. 818 00:49:08,090 --> 00:49:14,270 پس در واقع، پس از آن، زمان درج در نهایت O (N)، که در آن n تعداد عناصر در لیست است. 819 00:49:14,270 --> 00:49:21,780 تقسیم، اجازه دهید خودسرانه متر، که در آن M است که تعدادی از لیست های پیوندی 820 00:49:21,780 --> 00:49:24,500 که ما در این محور عمودی داشته باشد. 821 00:49:24,500 --> 00:49:27,180 به عبارت دیگر، اگر ما واقعا فرض توزیع یکنواخت از نام، 822 00:49:27,180 --> 00:49:30,150 کاملا غیر واقعی است. بدیهی است برخی از حروف نسبت به دیگران وجود دارد. 823 00:49:30,150 --> 00:49:32,580 >> اما اگر ما برای لحظه ای یک توزیع یکنواخت فرض کنیم، 824 00:49:32,580 --> 00:49:37,350 و در حال حاضر نفر از مردم در کل، و متر زنجیر ها 825 00:49:37,350 --> 00:49:40,630 در دسترس به ما، پس از آن در طول هر یک از این زنجیره ها 826 00:49:40,630 --> 00:49:44,380 نسبتا به سادگی رفتن به کل، N تقسیم شده توسط تعدادی از زنجیره. 827 00:49:44,380 --> 00:49:48,900 پس N / m است. اما در اینجا که در آن ما می تواند ریاضی باهوش است. 828 00:49:48,900 --> 00:49:53,030 م ثابت است، چرا که تعداد ثابتی از این وجود دارد. 829 00:49:53,030 --> 00:49:54,620 شما در حال رفتن به تعریف آرایه خود را در آغاز، 830 00:49:54,620 --> 00:49:58,450 و ما در حال تغییر محور عمودی نیست. با این تعریف، که ثابت باقی می ماند. 831 00:49:58,450 --> 00:50:01,220 این تنها محور افقی، پس به صحبت می کنند، که در حال تغییر است. 832 00:50:01,220 --> 00:50:04,760 بنابراین از لحاظ فنی، این ثابت شده است. بنابراین در حال حاضر، زمان درج 833 00:50:04,760 --> 00:50:09,700 خیلی O (n) است. 834 00:50:09,700 --> 00:50:12,410 به طوری که احساس نمی کند که بسیار بهتر است. 835 00:50:12,410 --> 00:50:14,940 اما آنچه در حقیقت در اینجا؟ خب، تمام این مدت، هفته، 836 00:50:14,940 --> 00:50:20,640 گفته ایم که O (n ²). O (N)، 2 X N ² - N، تقسیم بر 2. است. است. ech. 837 00:50:20,640 --> 00:50:23,580 این فقط ² N است. اما در حال حاضر، در این بخش از ترم، 838 00:50:23,580 --> 00:50:25,560 ما می توانیم شروع به صحبت کردن در مورد دنیای واقعی دوباره است. 839 00:50:25,560 --> 00:50:31,520 و N / M است کاملا سریعتر از فقط یک نفر به تنهایی است. 840 00:50:31,520 --> 00:50:35,170 اگر شما از یک هزار نام، و آنها را شکست شما را به سطل های متعدد 841 00:50:35,170 --> 00:50:37,820 به طوری که شما فقط به ده نام در هر یک از این زنجیره ها، 842 00:50:37,820 --> 00:50:41,670 کاملا جستجوی ده چیز است که در حال رفتن به سریع تر از هزار چیز. 843 00:50:41,670 --> 00:50:43,740 و به این ترتیب یکی از مجموعه های مشکل آینده قصد دارد شما را به چالش می کشند 844 00:50:43,740 --> 00:50:46,100 فکر می کنم در مورد دقیقا همان است که حتی اگر، آره، 845 00:50:46,100 --> 00:50:49,520 مجانبی و ریاضی، این است که هنوز فقط خطی، 846 00:50:49,520 --> 00:50:51,700 که بمکد به طور کلی زمانی که در تلاش برای پیدا کردن چیزهایی است. 847 00:50:51,700 --> 00:50:54,530 در واقع، آن را سریع تر از آن باشد 848 00:50:54,530 --> 00:50:56,520 با توجه به این تقسیم. 849 00:50:56,520 --> 00:50:58,310 و بنابراین دوباره وجود دارد برای رفتن به این تجارت 850 00:50:58,310 --> 00:51:01,390 و این تضاد میان تئوری و واقعیت، 851 00:51:01,390 --> 00:51:03,550 و یکی از دستگیره عطفی در این نقطه آغاز خواهد شد در ترم 852 00:51:03,550 --> 00:51:07,510 بیشتر از یک واقعیت به عنوان نوعی از آماده شدن برای پایان semster، 853 00:51:07,510 --> 00:51:09,280 جهان برنامه نویسی وب را معرفی می کنیم، 854 00:51:09,280 --> 00:51:11,530 که در آن در واقع، عملکرد رفتن به دفعات مشاهده شده است که کاربران خود را در حال رفتن به 855 00:51:11,530 --> 00:51:14,880 شروع به احساس و درک تصمیمات طراحی فقیر. 856 00:51:14,880 --> 00:51:19,950 >> پس چگونه می توانم شما را در مورد اجرای مرتبط - با 31 عنصر جدول هش؟ 857 00:51:19,950 --> 00:51:22,600 و مثال قبلی خودسرانه تولدهای بود. 858 00:51:22,600 --> 00:51:26,190 اگر کسی تا به تولد 1 ماه ژانویه یا فوریه 1، ما آنها را در این سطل قرار داده است. 859 00:51:26,190 --> 00:51:28,960 اگر آن را ژانویه فوریه 2، 2، 2 مارس، ما آنها را در این سطل قرار داده است. 860 00:51:28,960 --> 00:51:32,220 که چرا آن 31 سال بود. چگونه یک جدول هش به شما اعلام؟ 861 00:51:32,220 --> 00:51:37,480 این می تواند خیلی ساده، جدول گره * نام دلخواه من برای آن، [31] است. 862 00:51:37,480 --> 00:51:42,400 این به من می دهد 31 اشاره گر به گره، 863 00:51:42,400 --> 00:51:45,370 و اجازه می دهد که به من 31 اشاره گر به لیست های پیوندی 864 00:51:45,370 --> 00:51:48,800 حتی اگر این زنجیره در ابتدا NULL است. 865 00:51:48,800 --> 00:51:54,860 چه من می خواهم برای قرار دادن اگر من می خواهم به فروشگاه "آلیس"، "باب"، "چارلی"؟ 866 00:51:54,860 --> 00:51:57,010 خب، ما نیاز به کسانی که همه چیز را در یک ساختار بسته بندی 867 00:51:57,010 --> 00:52:00,530 از آنجا که ما نیاز به آلیس به باب اشاره، به نقطه را به چارلی، و غیره. 868 00:52:00,530 --> 00:52:04,940 ما فقط نمی تواند به نام تنهایی، به طوری که من می تواند یک ساختار جدید به نام گره در اینجا ایجاد کنید. 869 00:52:04,940 --> 00:52:08,310 >> یک گره واقعی چیست؟ گره در این لیست جدید مرتبط است؟ 870 00:52:08,310 --> 00:52:11,840 اولین چیزی که به نام کلمه، نام شخص. 871 00:52:11,840 --> 00:52:14,340 طول، احتمالا مربوط به حداکثر طول نام یک انسان، 872 00:52:14,340 --> 00:52:18,210 هر چه که است، 20، 30 و 40 کاراکتر در موارد گوشه ای دیوانه، 873 00:52:18,210 --> 00:52:22,680 +1 و برای چه؟ این فقط شخصیت NULL اضافی، \ 0. 874 00:52:22,680 --> 00:52:27,410 بنابراین این گره بسته بندی "چیزی" را به داخل خود، 875 00:52:27,410 --> 00:52:29,640 اما آن را نیز اعلام کرد که یک اشاره گر به نام آینده 876 00:52:29,640 --> 00:52:32,580 به طوری که ما می تواند زنجیره آلیس به باب به چارلی و غیره. 877 00:52:32,580 --> 00:52:36,700 می تواند NULL، اما لزوما باید. 878 00:52:36,700 --> 00:52:40,110 هر گونه سؤال در این جداول مخلوط؟ آره؟ 879 00:52:40,110 --> 00:52:46,190 پرسش و پاسخ [دانشجویی، ناخوانا] آرایه - سوال خوبی است. 880 00:52:46,190 --> 00:52:50,120 چرا این کلمه char در یک آرایه به جای * کاراکتر؟ 881 00:52:50,120 --> 00:52:53,830 در این مثال تا حدودی خودسرانه، من نمی خواست مجبور به توسل 882 00:52:53,830 --> 00:52:56,190 به malloc برای هر یک از نام های اصلی است. 883 00:52:56,190 --> 00:52:59,530 من می خواستم به اعلام یک مقدار حداکثر حافظه برای رشته 884 00:52:59,530 --> 00:53:06,020 به طوری که من می تواند به ساختار کپی آلیس \ 0 و لازم نیست که برای مقابله با malloc و آزاد و مانند آن. 885 00:53:06,020 --> 00:53:11,710 اما من که می تواند در صورتی که من می خواستم به استفاده از فضای آگاهانه تر انجام دهد. خوب سوال. 886 00:53:11,710 --> 00:53:14,780 بنابراین سعی کنید برای تعمیم به دور از این 887 00:53:14,780 --> 00:53:18,350 و تمرکز باقی مانده از امروز بر روی ساختمان های داده به طور کلی 888 00:53:18,350 --> 00:53:21,170 و مشکلات دیگری که ما می توانیم حل با استفاده از اصول مشابه 889 00:53:21,170 --> 00:53:24,590 حتی اگر ساختارهای داده ای خود ممکن است در خاص خود متفاوت است. 890 00:53:24,590 --> 00:53:27,910 >> پس از آن معلوم میشود که در علوم کامپیوتر، درخت ها بسیار رایج است. 891 00:53:27,910 --> 00:53:29,760 و شما می توانید از مرتب کردن بر اساس درخت مانند درخت خانواده فکر می کنم، 892 00:53:29,760 --> 00:53:31,830 که در آن برخی از ریشه ها، برخی از مادر و یا ایلخانی وجود دارد، 893 00:53:31,830 --> 00:53:34,540 مادر بزرگ یا پدر بزرگ یا زودتر برگشت، 894 00:53:34,540 --> 00:53:38,880 زیر که مادر و پدر و یا خواهر و برادر های مختلف و یا می خواهم. 895 00:53:38,880 --> 00:53:42,500 بنابراین یک ساختار درختی گره ها و کودکان بوده است. 896 00:53:42,500 --> 00:53:45,260 معمولا 0 یا بیشتر بچه ها برای هر گره است. 897 00:53:45,260 --> 00:53:47,320 و برخی از اصطلاحات مخصوص یک صنف است که شما را در این عکس می بینید 898 00:53:47,320 --> 00:53:50,630 است هر یک از بچه های کوچک و یا grandkids در لبه 899 00:53:50,630 --> 00:53:52,330 که هیچ فلش ناشی از آنها، 900 00:53:52,330 --> 00:53:55,070 کسانی که به اصطلاح برگ، و هر کسی که در داخل 901 00:53:55,070 --> 00:53:58,790 یک گره درونی است و شما می توانید آن را هر چیزی در امتداد آن خطوط تماس بگیرید. 902 00:53:58,790 --> 00:54:01,430 اما این ساختار بسیار رایج است. این یکی کمی خودسرانه است. 903 00:54:01,430 --> 00:54:04,930 در حال حاضر یکی از بچه ها در سمت چپ، ما دارای سه فرزند در سمت راست، 904 00:54:04,930 --> 00:54:06,830 دو فرزند در پایین سمت چپ. 905 00:54:06,830 --> 00:54:10,740 بنابراین ما می تواند در اندازه های مختلف درختان داشته باشد، اما اگر ما شروع به استانداردسازی همه چیز، 906 00:54:10,740 --> 00:54:15,330 و شما ممکن است از این ویدیو پاتریک در جستجوی دودویی از کوتاه قبلی به یاد 907 00:54:15,330 --> 00:54:19,490 آنلاین، جستجو باینری را ندارد که با یک آرایه اجرا شود 908 00:54:19,490 --> 00:54:21,410 و یا تکه های کاغذ را بر روی تخته سیاه. 909 00:54:21,410 --> 00:54:25,490 فرض کنید که شما می خواهید برای ذخیره شماره های خود را در یک ساختار داده های پیچیده تر. 910 00:54:25,490 --> 00:54:27,680 شما می توانید یک درخت شبیه به این را ایجاد کنید. 911 00:54:27,680 --> 00:54:35,290 شما می توانید یک گره اعلام شده در C، و آن گره می تواند حداقل دو عنصر در داخل آن داشته باشند. 912 00:54:35,290 --> 00:54:39,470 یکی از این شماره شما می خواهید برای ذخیره است، و از سوی دیگر - خب، ما نیاز به یک است. 913 00:54:39,470 --> 00:54:41,540 دیگر کودکان آن است. 914 00:54:41,540 --> 00:54:45,150 بنابراین در اینجا یکی دیگر از ساختمان داده. در این زمان، یک گره به عنوان ذخیره کردن یک شماره تعریف شده N 915 00:54:45,150 --> 00:54:49,060 و سپس دو اشاره گر فرزند چپ و فرزند راست. 916 00:54:49,060 --> 00:54:52,100 و آنها خودسرانه نیست. چه جالب در مورد این درخت؟ 917 00:54:52,100 --> 00:55:00,550 >> چه الگوی ایم گذاشته از این و یا چگونه پاتریک آن را گذاشته در ویدئو های خود را؟ 918 00:55:00,550 --> 00:55:02,790 این نوع آشکار است که برخی از مرتب سازی در اینجا وجود دارد، 919 00:55:02,790 --> 00:55:04,460 اما چه قاعده ساده است؟ آره؟ 920 00:55:04,460 --> 00:55:08,350 [پاسخ دانشجویی، ناخوانا] 921 00:55:08,350 --> 00:55:12,040 کامل. اگر شما را در این نگاه، شما را اعداد کوچک در سمت چپ، 922 00:55:12,040 --> 00:55:14,690 اعداد بزرگ در سمت چپ، اما این درست است برای هر گره است. 923 00:55:14,690 --> 00:55:20,370 برای هر گره فرزند چپ خود را کمتر از آن است، و فرزند راست آن بیشتر از آن است. 924 00:55:20,370 --> 00:55:25,210 این به این معنی در حال حاضر این است اگر من می خواهم به جستجو در این ساختمان داده، می گویند، شماره 44، 925 00:55:25,210 --> 00:55:29,320 من باید در ریشه شروع کنید، چرا که به عنوان با تمام از این پیچیده تر از ساختمان های داده در حال حاضر، 926 00:55:29,320 --> 00:55:31,910 ما تنها یک اشاره گر به یک چیز است، شروع می شود. 927 00:55:31,910 --> 00:55:35,010 و در این مورد، ابتدا ریشه است. این سمت چپ نیست، 928 00:55:35,010 --> 00:55:39,530 ریشه این ساختار است. بنابراین من در اینجا 55، و من به دنبال به مدت 44. 929 00:55:39,530 --> 00:55:41,430 کدام جهت را من می خواهم برای رفتن؟ 930 00:55:41,430 --> 00:55:45,680 خوب، من می خواهم برای رفتن به سمت چپ، به دلیل بدیهی است، به سمت راست خواهد بود بیش از حد بزرگ است. 931 00:55:45,680 --> 00:55:49,050 بنابراین متوجه در اینجا، شما در حال مرتب کردن بر اساس مفهومی سفت درخت در نصف 932 00:55:49,050 --> 00:55:51,700 زیرا شما هرگز به پایین به سمت راست. 933 00:55:51,700 --> 00:55:55,410 بنابراین در حال حاضر من از از 55 تا 33. این یک عدد خیلی کوچک است. 934 00:55:55,410 --> 00:56:01,590 من به دنبال 44، اما در حال حاضر من می دانم که اگر 44 را در این درخت، من به وضوح می تواند به سمت راست بروید. 935 00:56:01,590 --> 00:56:04,460 بنابراین دوباره، من هرس درخت در نصف. 936 00:56:04,460 --> 00:56:06,780 این تا حد زیادی یکسان مفهومی به دفترچه تلفن است. 937 00:56:06,780 --> 00:56:09,510 این یکسان به آنچه که ما با مقالات بر روی تخته سیاه، 938 00:56:09,510 --> 00:56:13,940 اما آن را به یک ساختار پیچیده تر است که اجازه می دهد تا ما را به واقع 939 00:56:13,940 --> 00:56:16,880 این تقسیم و حل طراحی الگوریتم 940 00:56:16,880 --> 00:56:19,420 و در واقع، تراورس یک ساختار شبیه به این - اوه. 941 00:56:19,420 --> 00:56:22,870 عبور یک ساختار شبیه به این است، که در آن تنها "برو این راه و یا بروید که راه، 942 00:56:22,870 --> 00:56:26,870 به این معنی است که کد است که ذهن خود را برای اولین بار در خم هنگامی که اجرای آن در بخش 943 00:56:26,870 --> 00:56:31,270 و یا راه رفتن را از طریق آن در خانه، برای جستجوی باینری با استفاده از بازگشت یا تکرار، 944 00:56:31,270 --> 00:56:35,060 درد در گردن است. یافتن عنصر میانی، و سپس گرد خود را به بالا یا پایین انجام دهد. 945 00:56:35,060 --> 00:56:39,230 >> زیبایی وجود دارد به این دلیل ما در حال حاضر می توانید با استفاده از بازگشت دوباره، 946 00:56:39,230 --> 00:56:43,760 اما خیلی بیشتر پاک. در واقع، اگر شما را در شماره 55 هستید و می خواهید برای پیدا کردن 44، 947 00:56:43,760 --> 00:56:48,450 شما به سمت چپ در این مورد، پس چه کار میکنید؟ شما اجرا الگوریتم دقیقا همان است. 948 00:56:48,450 --> 00:56:51,560 ارزش گره بررسی کنید، و سپس شما را به سمت چپ یا راست. 949 00:56:51,560 --> 00:56:53,670 سپس مقدار گره را چک می کنید، به سمت چپ یا راست. 950 00:56:53,670 --> 00:56:56,710 این کاملا به بازگشت مناسب است. 951 00:56:56,710 --> 00:57:00,920 بنابراین حتی اگر در گذشته انجام داده ایم برخی از نمونه های نسبتا خودسرانه مربوط به بازگشت 952 00:57:00,920 --> 00:57:03,430 که آیا نیازی به بازگشتی، با stuctures داده، 953 00:57:03,430 --> 00:57:07,820 به ویژه درختان، آن را یک برنامه کامل از این ایده که یک مشکل است، 954 00:57:07,820 --> 00:57:12,920 کاهش آن، و سپس حل از همان نوع، اما کوچکتر، برنامه. 955 00:57:12,920 --> 00:57:14,590 >> بنابراین یکی دیگر از ساختمان داده است که ما می توانیم معرفی وجود دارد. 956 00:57:14,590 --> 00:57:18,760 این است که در نگاه اول به نگاه مرموز طراحی شده است، اما این یکی از شگفت انگیز است. 957 00:57:18,760 --> 00:57:25,090 بنابراین این یک ساختمان داده به نام درخت، درخت است که از بازیابی کلمه به ارث برده است، 958 00:57:25,090 --> 00:57:30,210 دوباره امتحان کنید VAL تلفظ نیست، اما این چیزی است که جهان خواستار این چیزها. تلاش می کند. T-R-I-e. 959 00:57:30,210 --> 00:57:35,190 این یک ساختار درختی از نوعی است، اما هر یک از گره ها در درخت 960 00:57:35,190 --> 00:57:41,280 به نظر می رسد چه؟ و این است که کمی گمراه کننده است، زیرا این نوع از مخفف است. 961 00:57:41,280 --> 00:57:45,960 اما به نظر می رسد مثل هر گره در این درخت است که در واقع یک آرایه است. 962 00:57:45,960 --> 00:57:48,840 و حتی هر چند نویسنده از این نمودار نشان داده نشده است، 963 00:57:48,840 --> 00:57:54,130 در این مورد، این درخت ساختار داده ها است که هدف در زندگی است برای ذخیره کلمات 964 00:57:54,130 --> 00:57:57,330 مانند A-L-I-C-E و B-O-B. 965 00:57:57,330 --> 00:58:02,480 و روشی که در آن این اطلاعات فروشگاه آلیس و باب و چارلی و آنیتا و غیره 966 00:58:02,480 --> 00:58:06,970 آن را با استفاده از یک آرایه که در آن برای ذخیره آلیس در سرزمین درخت، 967 00:58:06,970 --> 00:58:09,820 ما در گره ریشه است که به نظر می رسد مثل یک آرایه شروع، 968 00:58:09,820 --> 00:58:12,080 و آن را در نماد مختصر نوشته شده است. 969 00:58:12,080 --> 00:58:15,070 نویسنده حذف abcdefg چون هیچ نامهای با آن وجود دارد. 970 00:58:15,070 --> 00:58:19,150 آنها نه تنها نشان داد M و P و T است، اما در این مورد، 971 00:58:19,150 --> 00:58:22,780 اجازه دهید به دور از آلیس و باب و چارلی به برخی از اسامی که اینجا هستید. 972 00:58:22,780 --> 00:58:25,670 ماکسول است که در واقع در این نمودار. 973 00:58:25,670 --> 00:58:29,570 پس چطور فروشگاه نویسنده M-A-x-W-e-L-L؟ 974 00:58:29,570 --> 00:58:36,990 او در گره ریشه آغاز شده است، و رفت و به [M]، به طوری که تقریبا 13 محل سکونت: 13TH در آرایه. 975 00:58:36,990 --> 00:58:40,750 سپس از آنجا، یک اشاره گر وجود دارد. 976 00:58:40,750 --> 00:58:42,760 یک اشاره گر که منجر به یکی دیگر از آرایه. 977 00:58:42,760 --> 00:58:47,880 از نویسنده وجود دارد که به آرایه در محل نمایه، در بالا سمت چپ نشان داده شده، 978 00:58:47,880 --> 00:58:52,250 و پس از آن او به دنبال که اشاره گر به یک آرایه، 979 00:58:52,250 --> 00:58:55,460 و به اشاره گر را در محل X. رفت 980 00:58:55,460 --> 00:58:59,840 سپس در محل آرایه بعدی W، E، L، L، و غیره، 981 00:58:59,840 --> 00:59:03,090 و در نهایت، اجازه دهید در واقع سعی کنید برای قرار دادن یک عکس به این. 982 00:59:03,090 --> 00:59:05,380 چه نگاه گره مانند در کد؟ 983 00:59:05,380 --> 00:59:11,820 گره در درخت دارای یک آرایه از اشاره گر به گره. 984 00:59:11,820 --> 00:59:16,090 اما هم وجود دارد باید به نوعی از ارزش های بولی، حداقل در این پیاده سازی است. 985 00:59:16,090 --> 00:59:18,770 من اتفاق می افتد به آن را is_word. چرا؟ 986 00:59:18,770 --> 00:59:22,670 زیرا هنگامی که شما در حال قرار دادن ماکسول، شما در حال قرار دادن 987 00:59:22,670 --> 00:59:25,300 هر چیزی را به این ساختار داده ها. 988 00:59:25,300 --> 00:59:27,480 شما در حال M. نوشتن نیست شما X. نوشتن نیست 989 00:59:27,480 --> 00:59:30,240 همه شما در حال انجام است که پس از اشاره گر است. 990 00:59:30,240 --> 00:59:33,360 اشاره گر است که نشان دهنده M، سپس اشاره گر است که نشان دهنده یک، 991 00:59:33,360 --> 00:59:36,310 سپس اشاره گر است که نشان دهنده X، سپس W، E، L، L، 992 00:59:36,310 --> 00:59:41,950 اما آنچه شما نیاز دارید در پایان مرتب کردن بر اساس بروید، بررسی، من به این مکان رسید. 993 00:59:41,950 --> 00:59:45,560 کلمه ای که در اینجا به پایان می رسد در ساختار داده ها وجود دارد. 994 00:59:45,560 --> 00:59:48,190 >> پس چه درخت واقعا با پر و نویسنده، تصمیم گرفت برای نشان دادن 995 00:59:48,190 --> 00:59:51,880 این terminuses با مثلث های کوچک. 996 00:59:51,880 --> 00:59:56,470 این فقط بدان معنی است که این واقعیت این مثلث در اینجا، این مقدار بولی واقعی 997 00:59:56,470 --> 00:59:59,200 معنی است که اگر شما به عقب در درخت، 998 00:59:59,200 --> 01:00:02,420 این بدان معناست که یک کلمه به نام ماکسول در این است. 999 01:00:02,420 --> 01:00:04,870 اما صنایع غذایی کلمه، به عنوان مثال، 1000 01:00:04,870 --> 01:00:07,970 در درخت نیست، چرا که اگر من در گره ریشه شروع در بالا، 1001 01:00:07,970 --> 01:00:14,030 هیچ اشاره گر F، هیچ اشاره گر O، هیچ اشاره گر O وجود دارد. FOO نام در این فرهنگ نیست. 1002 01:00:14,030 --> 01:00:22,460 اما در مقابل، تورینگ، t-u-R-I-N-G. باز هم، من T یا U و یا یک تحقیق و یا من یا N یا G را ذخیره نمی کند. 1003 01:00:22,460 --> 01:00:29,820 اما من در این ساختار داده را ذخیره یک مقدار از راه درست را در اینجا در این گره - در درخت 1004 01:00:29,820 --> 01:00:33,030 با تنظیم این مقدار بولی is_word درست است. 1005 01:00:33,030 --> 01:00:35,740 نوع درخت از این ساختار متا بسیار جالب است، 1006 01:00:35,740 --> 01:00:39,810 که در آن شما واقعا نمی ذخیره سازی کلمات خود را برای این نوع از فرهنگ لغت. 1007 01:00:39,810 --> 01:00:45,100 برای روشن باشد، شما فقط ذخیره سازی بله یا نه، یک کلمه وجود دارد که در اینجا به پایان می رسد. 1008 01:00:45,100 --> 01:00:46,430 >> حالا چه مفهوم است؟ 1009 01:00:46,430 --> 01:00:51,120 اگر شما 150.000 کلمات موجود در فرهنگ لغت است که شما در حال تلاش برای در حافظه ذخیره 1010 01:00:51,120 --> 01:00:53,400 با استفاده از چیزی شبیه به یک لیست پیوندی، 1011 01:00:53,400 --> 01:00:56,870 شما در حال رفتن به 150،000 گره در لیست پیوندی خود. 1012 01:00:56,870 --> 01:01:00,250 و پیدا کردن یکی از این کلمات بر اساس حروف الفبا می تواند زمان O (n) را. 1013 01:01:00,250 --> 01:01:04,370 زمان خطی است. اما در مورد یک درخت، 1014 01:01:04,370 --> 01:01:09,210 زمان در حال اجرا از پیدا کردن یک کلمه؟ 1015 01:01:09,210 --> 01:01:17,390 به نظر می رسد از زیبایی در اینجا این است که حتی اگر شما دارای 149،999 کلمه در حال حاضر در این فرهنگ، 1016 01:01:17,390 --> 01:01:20,170 با این ساختار داده ها اجرا شده است، 1017 01:01:20,170 --> 01:01:25,560 چه مدت آن را به پیدا کردن و یا قرار دادن یک نفر به آن، مانند آلیس، آلیس؟ 1018 01:01:25,560 --> 01:01:30,640 خوب، آن را تنها 5، شاید 6 گام برای شخصیت عقبی. 1019 01:01:30,640 --> 01:01:32,880 از آنجا که حضور نام های دیگر در ساختار 1020 01:01:32,880 --> 01:01:35,340 در راه قرار دادن آلیس می کنید. 1021 01:01:35,340 --> 01:01:39,640 علاوه بر این، پیدا کردن آلیس یک بار 150،000 کلمات موجود در این فرهنگ لغت وجود دارد 1022 01:01:39,640 --> 01:01:41,960 در راه خود را برای پیدا کردن آلیس نه در همه، 1023 01:01:41,960 --> 01:01:46,880 چون آلیس است. است. است. است. است. در اینجا، چون که من پیدا کردم یک مقدار بولی است. 1024 01:01:46,880 --> 01:01:50,920 و اگر هیچ بولی درست باشد، پس آلیس وجود دارد این است که در این ساختار داده ها از کلمات نیست. 1025 01:01:50,920 --> 01:01:56,220 به عبارت دیگر، مدت زمان در حال اجرا برای پیدا کردن اشیاء و قرار دادن همه چیز به این جدید 1026 01:01:56,220 --> 01:02:01,920 ساختمان داده درخت O است - آن را به ñ هنوز. 1027 01:02:01,920 --> 01:02:05,730 از آنجا که حضور 150،000 نفر دارای هیچ اثر آلیس، آن را به نظر می رسد. 1028 01:02:05,730 --> 01:02:11,560 بنابراین اجازه دهید آن را K، که در آن K است که حداکثر طول یک کلمه در زبان انگلیسی 1029 01:02:11,560 --> 01:02:14,050 است که به طور معمول بیش از 20 چیزی کاراکتر است. 1030 01:02:14,050 --> 01:02:17,940 بنابراین K یک ثابت است. پس جام مقدس ما به نظر می رسد پیدا کرده اند در حال حاضر 1031 01:02:17,940 --> 01:02:26,000 این است که از یک درخت، زمان ثابت برای درج، برای متغیر، برای حذف. 1032 01:02:26,000 --> 01:02:29,170 از آنجا که تعدادی از چیزهایی که در حال حاضر در ساختار، 1033 01:02:29,170 --> 01:02:32,600 که حتی از لحاظ جسمی وجود ندارد. باز هم، آنها فقط نوع از چک کردن، آری یا نه، 1034 01:02:32,600 --> 01:02:35,050 هیچ تاثیری بر آینده آن زمان در حال اجرا است. 1035 01:02:35,050 --> 01:02:37,940 >> اما آنجا به گرفتن، در غیر این صورت ما را نمی اتلاف زمان بسیار 1036 01:02:37,940 --> 01:02:41,460 در تمام این ساختارهای داده ای دیگر فقط به در نهایت به یک راز شگفت انگیز دریافت کنید. 1037 01:02:41,460 --> 01:02:46,410 پس چه قیمت ما پرداخت برای رسیدن به این عظمت در اینجا؟ فضا. 1038 01:02:46,410 --> 01:02:49,010 این چیزی است که عظیم است. و به همین دلیل است که نویسنده 1039 01:02:49,010 --> 01:02:52,400 آن را در حال حاضر در اینجا، توجه کنید که همه این چیزهایی را که مانند آرایه ها نگاه کنید، 1040 01:02:52,400 --> 01:02:55,400 او بقیه از درخت، دیگر از درخت قرعه کشی نیست، 1041 01:02:55,400 --> 01:02:58,060 زیرا آنها فقط مربوط به داستان نیست. 1042 01:02:58,060 --> 01:03:01,870 اما همه از این گره های فوق العاده گسترده ای هستند، و هر گره در درخت طول می کشد تا 1043 01:03:01,870 --> 01:03:07,780 26 یا در واقع، می تواند 27 کاراکتر چون در این مورد من از جمله فضا برای آپوستروف 1044 01:03:07,780 --> 01:03:09,980 به طوری که ما می تواند کلمات apostrophized داشته باشد. 1045 01:03:09,980 --> 01:03:14,450 در این مورد، این آرایه وسیعی هستند. بنابراین حتی اگر آنها در حال picutured نیست، 1046 01:03:14,450 --> 01:03:18,190 این طول می کشد تا مقدار عظیمی از RAM است. 1047 01:03:18,190 --> 01:03:20,670 که ممکن است خوب، especilly در سخت افزار های مدرن، 1048 01:03:20,670 --> 01:03:25,650 اما این معاوضه است. ما زمان کمتری صرف فضای بیشتری است. 1049 01:03:25,650 --> 01:03:28,580 پس کجاست این همه رفتن؟ 1050 01:03:28,580 --> 01:03:32,640 خوب، اجازه دهید - اجازه دهید اینجا را ببینید. 1051 01:03:32,640 --> 01:03:39,510 رفتن به این پسر اینجا. 1052 01:03:39,510 --> 01:03:43,450 >> باور کنید یا نه، به عنوان بسیار سرگرم کننده به عنوان C شده است برای برخی از زمان بوده است که در حال حاضر، 1053 01:03:43,450 --> 01:03:48,130 ما در حال رسیدن به نقطه در ترم که در آن زمان به انتقال به چیزهای مدرن تر است. 1054 01:03:48,130 --> 01:03:50,950 چیزهایی که در یک سطح بالاتر است. و حتی اگر برای چند هفته آینده 1055 01:03:50,950 --> 01:03:54,580 ما هنوز هم می خواهید به خودمان غوطه ور در جهان اشاره گرها و مدیریت حافظه ادامه 1056 01:03:54,580 --> 01:03:57,210 به این راحتی که ما پس از آن می توانید بر روی ساخت، 1057 01:03:57,210 --> 01:04:01,270 پایان بازی است که در نهایت به معرفی، جالب، این زبان نیست. 1058 01:04:01,270 --> 01:04:03,330 خواهیم صرف کنند، 10 دقیقه صحبت کردن در مورد HTML. 1059 01:04:03,330 --> 01:04:05,950 HTML یک زبان نشانه گذاری است، و آنچه که یک زبان نشانه گذاری است 1060 01:04:05,950 --> 01:04:10,220 این سری از براکت براکت باز و بسته که می گویند: "این ضخیم 'است 1061 01:04:10,220 --> 01:04:12,000 این کج (ایتالیک) 'را در این محور است. 1062 01:04:12,000 --> 01:04:14,250 این همه که فکری جالب نیست، اما آن را فوق العاده مفید است. 1063 01:04:14,250 --> 01:04:16,650 و این قطعا در همه جا حاضر است این روزها. 1064 01:04:16,650 --> 01:04:19,450 اما آنچه قدرتمند جهان از HTML، و برنامه نویسی وب به طور کلی، 1065 01:04:19,450 --> 01:04:25,910 ساختن چیزهایی پویا، نوشتن کد در زبان هایی مانند PHP یا پایتون یا روبی یا جاوا یا C #. 1066 01:04:25,910 --> 01:04:30,360 واقعا، به هر زبانی خود را از انتخاب است، و تولید HTML به صورت پویا. 1067 01:04:30,360 --> 01:04:32,960 ایجاد چیزی به نام CSS به صورت پویا. 1068 01:04:32,960 --> 01:04:35,810 شیوه نامه های آبشاری، که آن هم درباره زیبایی شناسی است. 1069 01:04:35,810 --> 01:04:41,360 و بنابراین حتی اگر امروز، اگر من به برخی از وب سایت مانند Google.com آشنا، 1070 01:04:41,360 --> 01:04:46,100 و من برای مشاهده، توسعه دهنده، منبع این دیدگاه، که شاید شما قبل از رفتن، 1071 01:04:46,100 --> 01:04:49,800 اما با رفتن به نمایش مبدأ، احتمالا این مسائل به نظر می رسد بسیار مرموز است. 1072 01:04:49,800 --> 01:04:55,320 اما این کد اساسی است که پیاده سازی Google.com است. 1073 01:04:55,320 --> 01:04:57,940 در بخش جلویی است. و در واقع همه این کرکی مسائل زیبایی شناسی است. 1074 01:04:57,940 --> 01:05:01,740 این CSS است تا اینجا. اگر من در حفظ و نوار پیمایش پایین خواهیم برخی از مواد رنگی را دریافت کنید. 1075 01:05:01,740 --> 01:05:06,890 HTML است. کد گوگل به نظر می رسد مثل یک ظرف غذا، اما اگر من در واقع باز کردن پنجره های مختلف، 1076 01:05:06,890 --> 01:05:09,380 ما می توانیم برخی از ساختار به این را مشاهده کنید. 1077 01:05:09,380 --> 01:05:12,640 اگر من برای باز کردن این تا اینجا، توجه، آن را کمی بیشتر قابل خواندن است. 1078 01:05:12,640 --> 01:05:16,850 ما قصد داریم تا قبل از اینکه طولانی این برچسب، [کلمه] برچسب، 1079 01:05:16,850 --> 01:05:23,520 HTML، سر، بدن، دیو، اسکریپت، ناحیه متن، دهانه، محور، دیو. 1080 01:05:23,520 --> 01:05:26,770 و این هم از مرموز، به دنبال مرتب کردن، در نگاه اول 1081 01:05:26,770 --> 01:05:30,890 اما همه از این آشفته بازار به دنبال الگوهای خاص، و الگوهای تکرار، 1082 01:05:30,890 --> 01:05:33,850 به طوری که زمانی که ما اصول اولیه، شما قادر خواهید بود برای نوشتن کد مثل این 1083 01:05:33,850 --> 01:05:37,550 و سپس کد مانند این استفاده از یک زبان، به نام جاوا اسکریپت را دستکاری کنند. 1084 01:05:37,550 --> 01:05:40,440 و جاوا اسکریپت یک زبان است که اجرا می شود به داخل یک مرورگر است 1085 01:05:40,440 --> 01:05:44,380 امروز که ما در دوره های هاروارد، استفاده از ابزار البته خرید که نقشه های گوگل استفاده می کند 1086 01:05:44,380 --> 01:05:48,660 برای شما یک دسته کامل از پویایی می دهد، فیس بوک به شما می دهد برای نشان دادن به روز رسانی وضعیت از طریق مسنجر، 1087 01:05:48,660 --> 01:05:51,430 توییتر از آن استفاده می کند به شما نشان می دهد توییت فورا. 1088 01:05:51,430 --> 01:05:53,820 همه از این ما آغاز خواهد شد به خودمان غوطه ور شوید. 1089 01:05:53,820 --> 01:05:57,190 اما برای رسیدن به آنجا، ما نیاز به درک چیزی کمی در مورد اینترنت. 1090 01:05:57,190 --> 01:06:01,130 این کلیپ در اینجا فقط یک دقیقه طولانی، و اجازه دهید فرض کنیم در حال حاضر این است که، در واقع، 1091 01:06:01,130 --> 01:06:08,380 اینترنت چگونه کار می کند به عنوان یک تیزر برای آنچه که در مورد آمده است. من به تو "رزمندگان خالص است." 1092 01:06:08,380 --> 01:06:14,720 >> [♫ موسیقی کر آهسته ♫] 1093 01:06:14,720 --> 01:06:20,450 [راوی پسر او با پیام آمد. 1094 01:06:20,450 --> 01:06:23,770 با پروتکل تمام خود را است. 1095 01:06:23,770 --> 01:06:37,270 [♫ سریعتر موسیقی الکترونیک ♫] 1096 01:06:37,270 --> 01:06:41,330 او به جهان از فایروال سرد آمد، uncaring روتر، 1097 01:06:41,330 --> 01:06:45,690 و خطرات به مراتب بدتر از مرگ است. 1098 01:06:45,690 --> 01:06:55,400 او سریع است. او قوی است. TCP / IP، و او را به آدرس شما. 1099 01:06:55,400 --> 01:06:59,250 سربازان خالص. 1100 01:06:59,250 --> 01:07:05,290 [مالان] هفته بعد، و سپس. اینترنت می باشد. برنامه نویسی وب. این CS50 است. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]