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 الذي كان فيه هذه وغيرها من الدورات من معهد ماساتشوستس للتكنولوجيا وبيركلي يعيش الآن. 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 قيادة تجول لمجموعة مشكلة 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 محاضرة ليوم الأربعاء، والسراويل مختلفة، ومجموعات المشكلة، وكثروو، ملفات PDF. 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 في الواقع، والآن لديها 100،000 شخص CS50x بعد طول في المنزل. 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 طالب، على الرغم من حاجة ليأتي الاكاديمية بضعة. 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 في قاعة د الخاص منذ بعض الوقت، ونأمل بعد ذلك يمكنك تتناغم في وتبادل الخبرات الخاصة بك. 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 إذا كنت مصمم، لتقديم تصاميم للقمصان وبلوزات-T 84 00:05:02,330 --> 00:05:06,100 والمظلات وعصابات صغيرة للكلاب لدينا الآن وما شابه ذلك. 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 "فريق بودين" ولدت، وقدم هذا التصميم، من بين الأكثر مبيعا. 96 00:05:43,480 --> 00:05:49,040 كما كان هذا واحد هنا. كان كثير من الناس "حمى بودين" وفقا لسجلات المبيعات. 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 هو خفي انتاجها حشية للوهلة الأولى. 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 لأنه إذا كنت قد نسيت لتحرير الذاكرة الخاصة بك، أو يمكنك إلغاء مرجعية بعض مؤشر NULL، 135 00:07:49,320 --> 00:07:55,770 أو يمكنك إلغاء مرجعية بعض مؤشر القمامة، ما هو عادة أعراض التي تنتج؟ 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 لدينا المهمة الرئيسية التي يستدعي دالة، و، 163 00:09:39,430 --> 00:09:45,590 ثم ماذا و الشروع في القيام به، باللغة الإنجليزية التقنية قليلا؟ 164 00:09:45,590 --> 00:09:49,760 ماذا المضي قدما و أن تفعل؟ 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 دعونا نركز فقط على اليسار، فقط على X * INT. 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 انها ليست بسبب انها الباحث، لأنه مؤشر في هذه الحالة. 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 (الباحث))؛" نعم؟ 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 أو هذه الشخصية الاستثنائية NUL، NUL، في نهاية سلسلة. 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 يمكن أن تخزن 10 أعداد صحيحة، وأنه يخزن عنوان البايت الأول 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 في العاشر. 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 ونحن خصصت عشرة فقط رجات، ولكن نحن نعول من 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 لكننا لا نعرف حقا، وهذا هو نوع من السلوك غير الحتمي. 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 لأنه، بطبيعة الحال، هذه ليست جيدة. في الواقع، إذا كان لديك هاتف يعمل بنظام Android أو iPhone على 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 انه او انها لا ينبغي أن يكون، ونتيجة لدائرة الرقابة الداخلية أو الروبوت هو قتل للتو البرنامج تماما 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 الذي كان فقط للقيام بعملية الاحماء، وتحويل عشري إلى عشري إلى ثنائي وهكذا دواليك. 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 أي الكلمات التي يبدو وكأنه ثمل كنت في مكان ما. 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 يمكنك استدعاء دالة مثل realloc إذا كنت تسمى في البداية 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 أو realloc، وهو آخر واحد، 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 A عقدة على حد سواء ودعا الباحث ن ومؤشر يسمى المقبل الذي يشير فقط إلى الشيء التالي في القائمة. 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، وهناك كل هذه الملفات ح 406 00:24:30,950 --> 00:24:34,410 قد رأيتم أو المستعملة خلال فترة كتابة من قبل أشخاص آخرين. 407 00:24:34,410 --> 00:24:38,470 عادة في تلك ملفات ساعة فقط من الأشياء مثل typedefs 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 حتى قصة قيل لنا على خشبة المسرح يوم الاثنين وrecapped الآن فقط 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 وأنا عمياء فقط الشروع في استخدام عنوان عاد، يمكن أن يكون NULL. 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-> ن' يعني اتخاذ العنوان الذي قدمت لك من قبل malloc 473 00:28:20,320 --> 00:28:23,490 وهو ما يمثل البايت الأول من كائن عقدة جديدة، 474 00:28:23,490 --> 00:28:26,860 ثم انتقل إلى حقل يسمى ن. 475 00:28:26,860 --> 00:28:35,270 A شك التوافه: وهذا يعادل ما خفي الخط أكثر من التعليمات البرمجية؟ 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 ثم مرة كنت هناك، ثم يمكنك استخدام أكثر دراية. ن، 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 و<قيمة n في أول عقدة الحالي، 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 لأنك can't - ترتيب العمليات هنا أمر مهم، 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 تخزين ما هو الاول في الحقل التالي ثم قم بتحديث ما هو فعلا اول. 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 وعند هذه النقطة في القصة، وهي التفاصيل التي أنا التغاضي عن 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 مرة أخرى، قد ينتهي بك المطاف orphaning القائمة. 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 الذي يقدم البنية 1 الاخرى التي سمعنا قبل الطالب يسمى، 621 00:37:34,640 --> 00:37:40,330 ثم يخزن في الواقع ما في القائمة هو مؤشر مرتبط إلى بنية الطالب 622 00:37:40,330 --> 00:37:44,520 بدلا من عدد صحيح بسيطة قليلا، ن. 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 مثل الوكز تشارلي أسفل بوب وأليس، ثم وضعنا أنيتا حيث تريد حقا أن تكون. 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 وكما ترى، هم، أليس هو في الطريق. 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 (ن)، أليس كذلك؟ 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 انها وزعت بشكل موحد على مدى A من خلال Z. 700 00:42:12,380 --> 00:42:15,220 >> ربما سوف نحصل على مجرد الحظ ونحن لن يكون اثنين أو اثنين في A 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 بعبارة أخرى، ما هو احتمال أن يكون اثنان منا لديه اسم بدءا A؟ 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 دعونا اختيار شيء من هذا القبيل 23، 22. 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 بطبيعة الحال، هذه تؤول إلى 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 لمجرد أن هناك الكثير من الناس اسمه A، 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 حتى لو هناك أليس وآدم وجميع هذه أسماء أخرى A، 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 ولكن المشكلة هي إذا أليس وآدم وجميع هذه أسماء أخرى A 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 إلى حد ما ببساطة سيكون المجموع، ن مقسوما على عدد من سلاسل. 827 00:49:44,380 --> 00:49:48,900 حتى ب / م. ولكن هنا هو المكان الذي يمكن أن يكون كل ذكي رياضيا. 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 (ن ²). O (ن)، 2 × ن ²، - ن، مقسوما على 2. . . ECH. 837 00:50:20,640 --> 00:50:23,580 انها مجرد ² ن. ولكن الآن، في هذا الجزء من الفصل الدراسي، 838 00:50:23,580 --> 00:50:25,560 يمكننا أن نبدأ الحديث عن العالم الحقيقي مرة أخرى. 839 00:50:25,560 --> 00:50:31,520 وب / م أسرع من N تماما وحده فقط. 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 LENGTH، ويفترض، يتصل الحد الأقصى لطول اسم الانسان، 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 لماذا هذه الكلمة حرف في صفيف بدلا من مجرد شار *؟ 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 هو أي من الصغار أو الأحفاد على حواف 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 حتى هنا هو آخر بنية البيانات. هذه المرة، يتم تعريف عقدة وتخزين عدد غير 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 هذا لم يجب أن تكون متكررة، مع تراجع تعبئة البيانات، 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 الذي لا ينطق إعادة محاكمة فال، ولكن هذا ما يدعو العالم هذه الأشياء. يحاول. 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 من هناك فهرسة المؤلف إلى أن مجموعة في الموقع A، كما هو مبين هناك في أعلى اليسار، 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 A عقدة في يحاكم يحتوي على مجموعة من المؤشرات إلى أكثر من العقد. 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، ثم المؤشر الذي يمثل A، 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 ليس هناك مؤشر واو، لا مؤشر س، أي مؤشر س. فو ليست اسما في هذا القاموس. 1002 01:00:14,030 --> 01:00:22,460 ولكن على النقيض من ذلك، تورينج، T-U-R-I-N-G. مرة أخرى، لم أكن تخزين أو تي يو أو ص أو i أو n أو ز. 1003 01:00:22,460 --> 01:00:29,820 لكنني في هذا المتجر بنية بيانات قيمة من الطريق الصحيح إلى هنا في هذه العقدة - في شجرة 1004 01:00:29,820 --> 01:00:33,030 من خلال تحديد هذه القيمة منطقية من is_word إلى true. 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 (ن) مرة. 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 تبين جمال هنا هو أنه حتى لو كان لديك 149999 الكلمات بالفعل في هذا القاموس، 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 لأن presense من الأسماء الأخرى في هيكل 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 هيكل البيانات يحاكم هو يا - ليست ن ذلك. 1027 01:02:01,920 --> 01:02:05,730 لأن presense من 150،000 شخص ليس له تأثير على أليس، على ما يبدو. 1028 01:02:05,730 --> 01:02:11,560 لذلك دعونا نسميها ك، حيث ك هو الحد الأقصى لطول كلمة في اللغة الإنجليزية 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 أو Python أو روبي أو جافا أو 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، الرأس، الجسم، DIV، النصي، منطقة نص، تمتد، محورها، DIV. 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 وقال انه جاء إلى عالم من الجدران النارية باردة، غير مكترثة أجهزة التوجيه، 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]