[Powered by Google Translate] [الأسبوع 7] [ديفيد J. مالان - جامعة هارفارد] [هذا CS50. - CS50.TV] حسنا. مرحبا بك مرة أخرى. هذا هو CS50، وهذا هو بداية الأسبوع 7. وقبل بضعة إعلانات قليلا: Pset5 الآن في التقدم، أو يكون قريبا، واسمحوا لي أن أقول، بصراحة، هذا لا تميل إلى أن تكون أكثر تحديا وبين مجموعات مشكلة أثناء، لذا فلا مانع لي أن أذكر هذا الآن بحيث هذا الأسبوع أكثر من أي وقت مضى كنت لا تنتظر حتى، يقول، ليلة الأربعاء أو ليلة الخميس للغوص فيه. هذا هو بالتأكيد pset مثيرة للاهتمام. نعتقد انها متعة. اذا كان لديك فعلا الصحيح تماما، ويمكن الطعن ثم مجلس يسمى الكبير، سيكون لديك فرصة لمباراة الذكاء مع بعض الموظفين أثناء ل وبعض زملائك. ما هو المجلس الكبير مرة يكون لديك عمل المدقق الإملائي، عليك أن تكون قادرا على الذهاب إلى cs50.net بعد تشغيل الأمر، اختيار محض في، ومن ثم مقدار الوقت وكمية من ذاكرة الوصول العشوائي وأكثر من ذلك والتي كنت قد استخدمت في التطبيق الخاص بك يتم عرضها هنا على الصفحة الرئيسية للدورة ل. ستلاحظ أن يتم سرد مجموعة كاملة من هؤلاء الناس هنا عن الموظفين منذ مطلع الاسبوع، يعتقد أن الموظفين أنه سيكون من المرح لمحاولة التفوق على بعضها البعض. حتى ندرك أن الهدف هنا ليس التفوق على الموظفين. حتى أنا هنا فقط في الرقم 13. اختيار محض في، لكنه فرصة لنرى كيف RAM قليلا وكيف ثواني قليلة يمكنك استخدام CPU وجها لتجاه بعض زملائك. وأنا أعترف أن مايكل كيفن شميد، حاليا في الموضع 1 عدد باعتباره واحدا من TFS، هذا هو الذي نسميه تنفيذ لا يمكن بالنظر إلى أن ما يقرب من انه باستخدام RAM 0 ثانية تقريبا و0 للتحميل. وهكذا لن نهتم حاليا كيفن. [ضحك] هناك مهارات معينة أن يضع كيفن لاختبار هنا. واحدة من الأشياء كنا نظن أننا كنا نفعله هو أيضا الآن هو CS50x الأسبوع الجاري، ويا رفاق هي جزء لا يتجزأ من هذه التجربة وهؤلاء الطلاب هم. لقد طلبنا منهم كجزء من pset0، والتي كان على غرار تقديم مشروع سكراتش التي تهمها - لعبة، قطعة من الفن التفاعلي، والرسوم المتحركة، أو ما شابه ذلك - (أ) 1 - فيديو ل2-دقائق، إذا كانوا يريدون قائلا مرحبا على العالم والذين هم في الواقع. اعتقدت أشاطركم بضع من أشرطة الفيديو التي قدمت حتى الآن لأن بالنسبة لنا، على الموظفين على الأقل، وأنه حقا كان مثيرة والملهم لرؤية هؤلاء الناس من جميع أنحاء العالم - بلدا في جميع أنحاء العالم - ضبط في، كل شيء، بالطبع إلى كمبيوتر العلوم على شبكة الإنترنت، سواء كان ذلك لأنهم يريدون مواصلة دراساتهم الخاصة، كانت تريد أن تأخذ حياتهم المهنية في اتجاه جديد، يريدون لملء الفجوات في المعرفة الخاصة بها، حتى بعض من الأسباب نفسها التي يا رفاق ربما كانت هنا. لذلك أنا أعطيك طالب واحد من هذا القبيل هنا. هل يمكن زيادة حجم قليلا. هنا هو واحد من التقارير 1-دقائق طالب لدينا. مرحبا، العالم. أنا طالب في الهندسة الصناعية هنا في ملقة بإسبانيا. أنا متحمس حول هذه الدورة التدريبية عبر الإنترنت لأنني أحب علوم الحاسب الآلي، أنا حقا لا، وأنا أقدر حقا أن أحصل على لاستكشاف ذلك. وحقيقة أستطيع أن تعلم كل نفس تفعل يا رفاق ولكن بدلا من أن تكون في جامعة هارفارد وأنا في ملقة، وكيف رهيبة هو أن؟ حسنا، أنا فرناندو، وهذا هو CS50. انظر يا رفاق. [ضحك] مقطع آخر نود بشكل خاص، ستجد أن هذا الرجل في اللغة الإنجليزية ليست قوية جدا. يبدو أنه كان لديه آلة تترجم، وبالتالي فإن الترجمات أنفسهم قليلا الكمال، ولكن هذا واحد من المفضلة لدينا حتى الآن كذلك. [♪ ♪] مرحبا، العالم. [يتحدث باللغة اليابانية] [لا بد لي من تحية باللغة اليابانية لأن لغتي الإنجليزية لا يمكن الاعتماد عليها للغاية.] [وقد ألقيت إليك الرسالة من مدينة جيفو، اليابان.] [يمكنني أن أكون طالبا للمرة الأولى منذ 20 عاما، كما يمكن أن يرى.] [أنا ممتن جدا لجامعة هارفارد الذي قدم لي هذه الفرصة وEDX.] [لعبة غولف هو الغيتار وتشغيل الشيء المفضل.] [ضحك] [♪ ♪] [لماذا تعتقد أن كنت أحاول لحضور cs50x.] [جامعة هارفارد، من الشوق بلدي.] [خصوصا إذا أنا جود بعيدة عاش في اليابان.] [كنت أرغب في محاولة تدرك على الفور عن وجود مثل هذه EDX متى.] [ألا تعتقد ذلك لا تتعلق بكم في سن التعلم I.] [CS50 هو الشوق بلدي. اسمي كازو، وهذا هو CS50.] [♪ ♪] [تصفيق والهتاف] وكان آخر هذه المفضلة لنا هنا من تقديم شخص ما. [♪ ♪] [مالان] جوجل إذا كنت غير مألوف مع هذا ميمي. ثم أخيرا، وزوجين من غيرها من الجهات التي حصلت على نشر هذا الفوز ربما الجائزة رائعتين. [الطلاب] الامير الوليد بن طلال! >> [مالان] علينا أن الاستماع. هذا هو باختصار، حتى الاستماع عن كثب. [المتكلم أنثى] ما اسمك؟ لوي >>. [المتكلم أنثى] ما هذا؟ >> [الضحك] CS50. [ضحك] [مالان] هو لم يأخذ 2، وإن كان. هنا نذهب، وكان آخر. اسمي لوي، وهذا هو CS50. [ضحك] هذا هو ثم CS50x. شكرا لجميع من تلك التي كنت بعد طول حين في الداخل الذين تشارك حتى الآن. اليوم، فإننا نستنتج مناقشتنا لهياكل البيانات، على الأقل بعض من أكثر الأساسية، ومن ثم نواصل حديثنا عن HTML وبرمجة الويب. في الواقع، لقد قضينا الماضي بعض الأسابيع السبعة يبحث في أساسيات البرمجة - الخوارزميات وهياكل البيانات، وما شابه ذلك - وC، كما كنت قد شهدت حتى الآن، ليس بالضرورة في متناول معظم لغات التي لتنفيذ بعض هذه الأفكار. وابتداء من هذا الأسبوع وحتى الأسبوع المقبل ومن ثم التالي، سنكون في النهاية قادرا على الانتقال من C، والذي يعرف عموما كلغة إلى حد ما على مستوى منخفض، إلى أشياء أعلى مستوى، من بينها PHP، جافا سكريبت، وما شابه ذلك، الذي سنرى الاستفادة من الدروس نفسها التي تعلمنا على مدار الأسابيع القليلة الماضية، ولكن ستجد أن يعلن أشياء مثل المصفوفات والجداول التجزئة والبحث والفرز أصبحت أسهل بكثير لأن لغات أنفسهم سنبدأ باستخدام سوف تصبح أكثر قوة. ولكن أولا، تطبيق الأشجار. انها شائعة جدا هذه الأيام في حاجة لضغط المعلومات. وفي أي سياق وتريد لضغط نوع من المعلومات الرقمية؟ نعم. >> [طالب] عندما تحتاج إلى إرسالها عبر الويب. نعم، عندما كنت ترغب في إرسال شيء عبر الويب. إذا كنت ترغب في تحميل ملف كبير، انها مثالية إذا كان شخص ما على الطرف الآخر وضغط هذا الملف باستخدام الشكل والرمز البريدي أو شيء من هذا القبيل بحيث كنت ترسل أقل من البتات قد خلاف ذلك أن تنتقل. إذا كيف يمكنك ضغط المعلومات؟ كل ذلك يتلخص باستخدام عدد أقل من البتات مطلوبة بشكل افتراضي. ولكن هذا هو نوع من الشيء الغريب لأن بذاكرتي إلى أسابيع 0 و 1 عندما تحدثنا عن ASCII وثنائي وتحدثنا عن ASCII بشكل خاص كما تستخدم 8 بت لتمثيل الحروف الأبجدية بحيث يتم تمثيل الحرف بنسبة 65، وأحرف صغيرة هو رقم 97، ولكن هل تمثل 65 أو 97، كنت تستخدم 7 أو 8 بت. لكن الفكرة هنا أن هناك بعض الحروف في الأبجدية الإنجليزية التي ليست شعبية كما غيرها. Z ليس كل ما شعبية، Q ليس كل ما شعبية، ولكن ألف وE فائقة الشعبية. وبعد كل هذه الرسائل، بشكل افتراضي في العالم يستخدم نفس العدد من البتات، على بعد 8. وحتى لا يكون قد تم ذكاء إذا بدلا من استخدام 8 بت لكل حرف، حتى أكثر قلما تستخدم مثل س وZ، ماذا لو استخدمنا أقل بت لA E S وورسائل والأكثر شعبية ويستخدم أكثر من بت لرسائل أقل شعبية، وكانت الفكرة هي الأمثل دعونا لحالة مشتركة، وهو موضوع في علوم الكمبيوتر من محاولة لتحسين ما سيحدث أكثر وقضاء المزيد من الوقت، ومساحة أكثر قليلا على الأشياء التي، نعم، قد يحدث ولكن ليس بالضرورة كما في كثير من الأحيان. لذلك دعونا نأخذ مثالا. لنفترض أننا نريد لترميز المعلومات بكفاءة إلى حد ما. قد كنت قد نمت حتى مع العلم شيئا قليلا عن رموز مورس، والاحتمالات هي أنك لم تكن تعرف الشفرة الفعلية، ولكن هل يمكن أن أذكر أنه على الأقل هذا سلسلة من النقاط وشرطات. هذا هو الترميز فعالة إلى حد ما، ثم لاحظ أن الرسالة الأكثر شعبية - على سبيل المثال، E - يستخدم أقصر من أصوات التنبيه. مورس هو كل شيء عن زمارة زمارة زمارة زمارة زمارة زمارة وعقد نغمات إما لفترات قصيرة من الزمن أو فترات طويلة من الزمن. E، كما تدل من قبل نقطة، هو إشارة صوتية قصيرة السوبر، زمارة فقط، والتي من شأنها أن تمثل E. على النقيض من ذلك، فإن T تكون أطول زمارة، مثل صوت تنبيه [يطيل الصوت]، والتي من شأنها أن تمثل T. ولكن هذا لا يزال قصيرة جدا، لأنه على النقيض من ذلك، إذا نظرتم الى Z، للتعبير عن Z سوف تذهب زمارة، زمارة [أطول صوت]، زمارة، زمارة [أقصر الصوت]. لذلك فمن أطول لأنه أقل شيوعا. لكن مسكتك هنا هو أن مورس قليلا معيبة في أنه ليس decodable على الفور. على سبيل المثال، افترض أن تسمع على بعض زمارة نهاية سلك [قصيرة]، زمارة [الطويل]. ما هي الرسالة لم أتلقى فقط؟ A نقطة واندفاعة ل. ماذا تمثل؟ [طالب] A. >> [مالان] ربما. يمكن أن يكون أيضا E تليها T. وبعبارة أخرى، مورس، على الرغم من أنه يستفيد من هذا المبدأ من تحسين حالة الزاوية، لا تصلح لdecodability فوري. هذا هو، والإنسان الذي لا يسمع أو تلقي هذه النقاط وشرطات أن الرقم بطريقة ما حيث فواصل بين الحروف هي، لأنه إذا كنت لا تعرف أين هي تلك فواصل، قد تخلط بين لET أو العكس بالعكس. لذلك قد ما تفعله؟ في مورس يمكن أن أتوقف بين كل من الحروف. ولكن التوقف هو نوع من مضاد لبيت القصيد من تسريع الامور. ولكن ماذا لو بدلا توصلنا مع رمز حيث لم يكن هناك هذا الوضع السيئ حيث E هو بادئة، على سبيل المثال، من A - وبعبارة أخرى، إذا ما تمكنا من التأكد من أن أنماط لا تزال قصيرة للرسائل شعبية رسائل طويلة لأقل شعبية، ولكن هناك أي التباس ممكن؟ رجل من جانب اسم هوفمان منذ سنوات اخترع هذا المخطط يسمى ترميز هوفمان التي تعزز الواقع واحدة من هياكل البيانات التي قضيت قليلا من الوقت في الحديث عن في الاسبوع الماضي، وذلك من الأشجار، والأشجار الثنائية على وجه التحديد - معنى شجرة ثنائية انها لديها اكثر من 2 لا الأطفال. ربما لديها طفل اليسار، وربما طفل الحق، وهذا كل شيء. لنفترض ذلك لمجرد أن شخصا ما من النقاش يريد أن يرسل رسالة يشبه هذا. انها محض هراء ولكن هذا يتكون من و، بكالوريوس، خدمات العملاء، DS، و ES. وإذا كنت تعول فعليا حتى كل من و، بكالوريوس، خدمات العملاء، DS، و دإط ويقسم ثم على العدد الكلي للرسائل، هذا المخطط قليلا هنا يقول أن 45٪ من الرسائل هي وفاق، و 20٪ هي كما، 10٪ الإفطار، وهكذا دواليك. لذلك وبعبارة أخرى، نفترض أن هناك سلسلة نقلت هو فقط بعض الرسالة التي تريد إرسالها. يحدث أن يكون هراء فقط حتى نتمكن من استخدام الرسائل وأقل عدد ممكن، ولكن هذا في الواقع القضية التي لا تزال E الأكثر شعبية، وB و C هي الأقل شعبية، على الأقل من هذه الرسائل 5 من الأبجدية. فكيف نذهب عن الخروج مع ترميز، ترميز ثنائي، وجود نمط من 0S و1S لكل من هذه الرسائل في مثل هذه الطريقة التي E هو نمط قصيرة وربما B و C هي أنماط أطول قليلا، مرة أخرى، وكانت الفكرة هي أننا نريد أن استخدام عدد أقل من بت أكثر من مرة وأكثر من بت مرة واحدة فقط في كل حين. وفقا لترميز هوفمان، يمكنك إنشاء غابة من الأشجار. هناك نوع من خط القصة هنا أن ينطوي الأشجار وأيضا عملية بناء عليها. دعونا نبدأ. أقترح أن تبدأ مع هذه الغابة، إذا جاز التعبير، من 5 الأشجار، كل واحدة منها هي شجرة غبية جدا. وتتكون الشجرة من عقدة واحدة فقط، كما هو ممثل هنا من قبل الدائرة. لذلك قد كل من هذه الأشياء تكون البنية C وربما داخل البنية C يكون عدد عشري يمثل عدد الترددات ومن ثم ربما يمثل حرف حرف. أعتقد ذلك من هذه العقد تماما كما أي بنية C القديمة ولكن، في الوقت الحالي، مستوى أعلى. هذا هو غابة من 5 الأشجار، كل الذين لديهم عقدة واحدة فقط. ما هوفمان المقترح هو أن نبدأ من الجمع بين تلك الأشجار التي لديها أصغر التهم التردد في أشجار أكبر قليلا من خلال ربط لهم عقدة الجذر الجديد. حتى بين الحروف هنا، لاحظ أن للراحة لقد مصنفة عليها من اليسار إلى اليمين، على الرغم من أن هذا ليس ضروريا تماما، ثم لاحظ أن أصغر العقد يوجد حاليا 10٪ و 10٪. اقترح ذلك هوفمان أننا دمج تلك العقد أصغر 2 إلى شجرة جديدة عن طريق إدخال عقدة الأم الجديدة ومن ثم إعطاء الأم أن الطفل الأيسر وطفل الحق حيث B هو تعسفي اليسار وC هو تعسفا من حق. ومن ثم اقترح كذلك أن هوفمان دعونا الآن مجرد التفكير في الطفل اليسار في واحدة من هذه الأشجار كما هو الحال دائما أن تكون ممثلة من قبل 0 والطفل دائما على حق بأنها ممثلة من قبل عدد 1. لا يهم إذا كنت الوجه لهم طالما كنت متسقة. حتى الآن لدينا أربعة الأشجار في هذه الغابة. وأنا أقول الآن الأربعة لشجرة على اليسار - وانها ليست الكثير من شجرة، بمعنى أنه ينمو بهذه الطريقة، انها أشبه شجرة العائلة حيث الآن 0.2 هو نوع من والد الطفلين - تلاحظ أن في هذا الأصل لدينا تعادل 0.2. لقد أضفنا التهم تواتر الطفلين ونظرا لعقدة جديدة المبلغ الإجمالي. حتى الآن نحن مجرد تكرار هذه العملية. العثور على أصغر العقد سنتين وبعد ذلك الانضمام إلى شجرة جديدة ثم كرر عملية أخرى. الآن لدينا عدد قليل من المرشحين،٪ 20،٪ 15، وآخر 20٪. في هذه الحالة، لدينا لكسر التعادل. يمكننا أن نفعل ذلك بشكل تعسفي. ينبغي لنا أن مجرد القيام بذلك باستمرار. في هذه الحالة، سأذهب مع واحد بشكل تعسفي على اليسار، وأنا الآن دمج ال 20٪ وبنسبة 15٪ لاعطائي أحد الوالدين جديدة تسمى 35٪، اليسار الذي هو 0 الطفل الذي الحق الطفل هو 1، والآن لدينا فقط ثلاثة الأشجار في الغابة. يمكنك ان ترى هذا ربما حيث هو ذاهب. إذا نكرر هذا مرات أكثر زوجين، ونحن ستكون لدينا واحدة فقط أكبر شجرة، جميع حواف التي وصفت مع 0S و1S. دعونا نفعل ذلك مرة أخرى. 35٪ لدي الآن هو جذور تلك الشجرة ل. 20٪ و 45٪، لذلك نحن ذاهبون الى دمج 35٪ و 20٪. الآن لدينا هذه الشجرة هنا. نضيف تلك معا، لدينا 55٪. الآن لا يوجد سوى اثنين من الأشجار في الغابة. ونحن نفعل ذلك مرة واحدة نهائية، ونأمل رياضيا جميع الترددات تضيف ما يصل لأن ينبغي أن تحسب لهم لأننا من الحصول أولا بأول لتضيف ما يصل الى 100٪. والآن لدينا شجرة واحدة. لذلك هذا هو الترميز شجرة هوفمان. انها نوع من استغرق بعض الوقت للوصول إلى هناك لفظيا، ولكن الواقع هو مع حلقة For أو مع وظيفة العودية، هل يمكن بناء هذا الشيء حتى سريع جدا. حتى الآن لدينا عقدة واحدة جديدة، كما تم malloc'd كل هذه العقد الداخلية، يفترض، على طول الطريق. حتى الآن في الجزء العلوي من هذه الشجرة لدينا 100٪، ولكن لاحظت الآن لدينا مسار من هذا جديدة الحفدة الجد كبيرة لجميع الأحفاد، رائعة رائعة رائعة على طول الطريق في الأسفل، لجميع الأوراق. ما نحن بصدد القيام به الآن هو أنه من أجل اقتراح لتمثيل E الرسالة، سوف نستخدم ببساطة الرقم 1. لماذا؟ لأننا إذا اجتياز هذه الشجرة من جذورها وصولا الى النهائي ورقة المعروفة باسم E، نحن فقط اتبع حافة واحدة، الحافة اليمنى، والتي وصفت بالطبع في 1 أعلى يمين. لذلك كان المعنى الضمني هنا لترميز هوفمان أن E في ثنائي يكون فقط 1. وهذا هو لعنة جميلة كفاءة. لا يمكن الحصول على أي أصغر حقا من ذلك. على النقيض من ذلك، A ستكون ممثلة، إذا كنت تتبع منطق، بما نمط بت بدلا من ذلك؟ 01. وذلك للحصول على A، ونحن نبدأ في جذور ونذهب لليسار واليمين ثم نذهب، وهو ما يعني أننا اتباع 0 ثم 1 (أ). على هذا النحو أننا نمثل هذه الرسالة مع نمط A 0 و 1. والآن لدينا بالفعل لاحظت خاصية decodability الفوري أن لم يكن لدينا في مورس. على الرغم من كل هذه الأنماط هي قصيرة جدا - E هو 1 بت، A هو 2 بت - لاحظت أنه لا يجب الخلط واحدة أو أخرى، لأنه إذا كنت ترى (أ) 1 انها حصلت على أن يكون E، إذا كنت ترى (أ) 1 0 ثم حصل الواضح أن يكون A. وبالمثل، ما هو D؟ 001. ما هو C؟ 0001. وما هو B؟ 0000. ومرة أخرى، لأن جميع من الرسائل نهتم هي في الأوراق وأيا منها هي نوع من الوسطاء في المسار من الجذر إلى ورقة، لا يوجد أي خطر من الخلط بين ترميزات 2 رسائل "مختلفة لأن كل من هذه الأنماط هي بت القطعية. وسوف يكون دائما B. 0000 ليس هناك عقدة في مكان ما بين التي قد تخلط بين حرف واحد للآخر. إذن ما هو ضمنا هنا؟ وقد حصلت أقصر الترميز، - الرسالة الأكثر شعبية - في هذه الحالة E وقد حصلت على الترميز أقصر المقبل، وB و C، والتي كنا نعرف بالفعل من الحصول أولا بأول نوع كان من الأقل شعبية على التردد 10٪ لكل منهما، أنها قد حصلت على أطول الترميز. وذلك ما يعني الآن هو أنه إذا كنت تريد إرسال رسالة هذا ما مضغوط عبر الإنترنت أو في رسالة بريد إلكتروني أو ما شابه ذلك، بدلا من استخدام ASCII القياسية، يمكنك إرسال رسالة مشفرة هوفمان حيث إذا كنت تريد إرسال رسالة E، كنت مجرد ارسال بت واحد. إذا كنت ترغب في إرسال A، تقوم بإرسال 2 بت، 01، بدلا من إرسال 8 بت يليه آخر 8 بت يليه آخر 8 بت وهكذا دواليك. ولكن هناك مسكتك هنا. انها ليست كافية لبناء هذه الشجرة فقط ومن ثم البدء في إرسال من أليس لبوب نمط أقصر قليلا، سلسلة من ASCII، أليس لأن لديه أيضا أن أبلغ بوب ما إذا بوب ستكون قادرا على قراءة رسالتها مضغوط؟ [رد الطالب غير مسموع] >> ما هذا؟ [رد الطالب غير مسموع] >> من ما هو الشجرة. أو حتى على نحو أكثر تحديدا، ما هي تلك ترميزات، خصوصا خلال هذه القصة التي قطعناها على أنفسنا في حكم مكالمة نقطة واحدة. تذكر أن لدينا لاختيار تعسفي بين العقد المختلفة 2 20٪؟ حتى انها ليست قضية أن بوب، المتلقي، يمكن إعادة بناء شجرة فقط من تلقاء نفسه ربما لانه سوف يخلق الشجرة حتى من أي وقت مضى بشكل مختلف قليلا من أليس. وعلاوة على ذلك، بوب لا يعرف حتى ما هو الرسالة الأصلية لأن الشيء الوحيد أليس هو جلبه، بطبيعة الحال، هي الرسالة مضغوط. وبالتالي فإن الصيد مع ضغط مثل هذا هو أنه، نعم، يمكن أليس حفظ مجموعة كبيرة من البتات عن طريق إرسال E 1 لو01 للA وهكذا دواليك، ولكن لديها أيضا أن أبلغ بوب ما هو التعيين بين الحروف وبت لأنها يمكن أن لا تعتمد بشكل واضح على ASCII فقط بعد الآن إذا نحن لسنا باستخدام ASCII. حتى تستطيع أن ترسل له الشجرة إما بطريقة ما - تدونها، واحفظها كبيانات ثنائية أو شيء من هذا القبيل - أو مجرد ارسال له ورقة الغش قليلا، في ملف إكسل، التي تظهر تعيينات. وبالتالي فإن فعالية ضغط يفترض حقا أن الرسائل التي كنت ترسل هي كبيرة جدا، على الأقل متوسطة الحجم، لأنه إذا كنت تقوم بإرسال رسالة قصيرة السوبر، إذا كنت ترغب فقط لإرسال الرسالة BAD، الذي صادف أن يكون كلمة واحدة يمكننا توضيح هنا، B-A-D، وأنت تسير على الارجح الى استخدام عدد أقل من البتات، لكن الصيد هو إذا كان لديك أيضا أن أبلغ بوب ما هو الشجرة أو ما هي تلك ترميزات، وأنت تسير لتفوق ربما كل من وفورات وجود الأشياء مضغوط لتبدأ. لذلك يمكن أن يكون في الواقع حالة أنه إذا حاولت ضغط حتى مع شيء من هذا القبيل تنسيقات الملف والرمز البريدي أو قد يكون على دراية - ملفات صغيرة جدا، وملفات فارغة حتى - في بعض الأحيان قد تكبر تلك الملفات وليس أصغر. ولكن واقعيا، أن يحدث فقط من أجل أحجام الملفات الصغيرة، حتى انها ليست الذهاب الى جعل ملف GIGABYTE يكون 2 غيغا بايت؛ فنحن نتحدث بايت أو مجرد كيلو بايت زوجين. بعض البرامج مثل الرمز البريدي أذكياء بما يكفي لتحقيق ذلك، "أنت ذاهب لقضاء أكثر من بت ضغط هذا." "واسمحوا لي أن لا يكلف نفسه عناء ضغط عليه بالنسبة لك على الإطلاق." لذلك هذا هو طريقة واحدة فقط ثم ضغط من تنسيق النص. يمكن أن ننفذ شيئا من هذا القبيل في C. على سبيل المثال، وهنا كيف يمكننا تمثل عقدة في هذه الشجرة حيث لدينا شار للرمز، قيمة عائمة لتردد، وكما رأينا مع هياكلنا غيرها من البيانات، 2 المؤشرات، 1 إلى الطفل اليسار، 1 على اليمين، أي من الذي يمكن أن يكون NULL، ولكن إذا لم يكن كذلك، فإنه يشير إلى اليسار طفل وطفل الحق. لذلك هذا هو ثم ترميز هوفمان، وانها واحدة الطريقة التي يمكنك الذهاب عن ضغط المعلومات، وانها بالتأكيد واحدة من أكثر سهولة لتنفيذ في سياق، ويقول، وهياكل البيانات الأسبوع الماضي، على الرغم من خوارزميات متطورة وجود أكثر يمكن أن تفعل الطفرات حتى أكثر تطورا من البيانات الخاصة بك. ثم أي أسئلة على الأشجار، والأشجار الثنائية، أو ضغط من النص؟ [طالب] هل هناك بعض الغموض، مثل الانقسام إذا [غير مسموع] في 01، ثم سوف تكون غامضة 011، أليس كذلك؟ [غير مسموع] >> سؤال جيد. الغموض. اسمحوا لي أن ألخص من خلال الإشارة إلى هذه الصورة هنا. لأن الحروف التي يتم ضغط، وتمثيل، من تعريف هذه الخوارزمية تبقى دائما الأوراق، عليك أبدا استخدام نفس النمط بطريق الخطأ من بت لإدخال البادئة للرسائل متعددة. لذلك وبعبارة أخرى، كنت قلقا بشأن، هذا يبدو وكأنه، وهو الغموض الناشئة حيث قد تكون بداية 001 من B أو C بداية أو شيء من هذا القبيل. ولكن يمكن أن لا يكون الأمر كذلك لأن لاحظ أن كل من الحروف الأبجدية نحن ترميز هي في الأوراق. يمكن الغموض تنشأ فقط، كما هو الحال في حالة مورس، إذا، على سبيل المثال، كان C في مكان ما على طول المسار من الجذر إلى B. [طالب] الحق. حتى في هذه الحالة، ويقول يوجد 2 الأوراق. قل له >> A - قل ذلك مرة أخرى. [طالب] قل A يوجد 2 الأوراق، F G و، ثم G - >> حسنا. لكنها لا تستطيع. A يمكن أن يترك نفسه لم يكن لديك F G ولأن تلك الرسائل F G و ويترك في مكان ما تكون نفسها على يسار B أو حق E. وذلك بحكم التعريف، يجب أن تكون الأوراق. خلاف ذلك، أنت على حق تماما، لقد لم تحل المشكلة التي تواجه مورس. جيدة السؤال. أسئلة أخرى؟ حسنا. هذه الفكرة من البتات، اتضح لدينا القوة على طول بعد أن قمنا في الواقع لا تستخدم عندما يتعلق الأمر بالتلاعب هذه 0S و1S. سألنا عن هذا على واحد من مجموعات أقرب المشكلة: وهي، كيف يمكنك أن تذهب نحو تحويل الأحرف الكبيرة إلى صغيرة أو العكس بالعكس؟ أو، على نحو أكثر تحديدا، طلب واحدة من تلك psets 1 كم بت هل لديك فعلا على الوجه من أجل تغيير A إلى أحرف صغيرة أو العكس بالعكس؟ وهنا تذكير سريع للما 65 و 97 تبدو في ثنائي. وحتى لو كان هذا السؤال قد تلاشى في نوع من الذاكرة الخاصة بك، تستطيع أن ترى مرة أخرى هنا أن عدد البتات يلزم انقلبت لتغيير رأس المال لA إلى أحرف صغيرة؟ واحد فقط. أنها تختلف فقط في مكان واحد، بت الثالث من اليسار. في حين أن لديه 010، قليلا لديه 011. بطريقة ما ذلك، نحن بحاجة إلى أن يكون مجرد قادرة على الوجه الذي بت، ويمكننا الاستفادة ثم أو أحرف صغيرة. لقد فعلنا ذلك في الماضي باستخدام الواقع إذا كانت الظروف وفحص إذا كان الحرف A هو بين رأس المال ورأس المال Z، ثم المخرجات مثل أ - + 26 أو شيء من هذا القبيل. ربما كنت فعلت لتغير الحساب إلى الحروف الأبجدية. ولكن ماذا لو استطعنا فقط أن الوجه بت واحد؟ كيف يمكن أن تذهب عن اتخاذ بقيمة بايت واحد لبت، لذلك 8 بت مثل 01000001 01100001 و؟ إذا كان لديك تلك الأنماط من البتات، كيف نذهب حول تغيير واحد فقط منهم؟ ماذا لو نقدم هنا في هذا النمط الأصفر أخرى من معاهدات الاستثمار الثنائية؟ إذا قمت بعمل كل 0S سلسلة الأصفر باستثناء بعض الشيء الوحيد الذي أريد تغيير وبعد ذلك إدخال المشغل الجديد المعروف باسم مشغل أحادي المعامل - أحادي المعامل بمعنى أنه يعمل على بت الفردية، ليس على كامل بايت أو البايت الأربعة في كل مرة. هذا الشريط العمودي هناك باللون الأصفر يشير إلى أن ما إذا أخذنا تمثيل العاصمة A وأحادي المعامل OR مع تسلسل من البتات الصفراء؟ وبعبارة أخرى، والتفكير مرة أخرى إلى مناقشتنا لالتعبيرات المنطقية في سكراتش ثم في C. القيام منطقية أو وسيلة أن هذا صحيح، إما أول شيء يجب أن يكون صحيحا أو الأمر الثاني أن يكون صحيحا أو كلاهما يجب أن يكون صحيحا، ومن ثم إخراج الناتج هو في حد ذاته صحيحا. في هذه الحالة هنا، ماذا نحصل إذا ما أخذنا 0 "أو" اد مع 0؟ كاذبة أو خاطئة؟ انها لا تزال كاذبة، وبالتالي فإن صغيرة ليبقى كما هو متوقع. ماذا لو بدلا نفعل 1 أو 0؟ هذا يبقى الآن 1، ولكن لاحظت ما هو على وشك الحدوث هنا. إذا بدأنا برأس مال ألف ونواصل "أو" بت الفردية كما نقوم به هنا، 0 أو واحد أصفر يعطي لنا ما إلى هنا؟ هذا يعطينا 1. في الواقع، لنفترض أننا لم نعرف ما هي النسخة الكبيرة من كان في الواقع قليلا. دعونا نذهب قيام بذلك. اسمحوا لي أن نقل هذا إلى أكثر من هنا. دعونا نفعل ذلك مرة أخرى. 0 أو 0 يعطيني 0. 1 أو 0 يعطيني 1. 0 أو 1 يعطيني 1. 0 أو 0 يعطيني 0. المرحلة التالية هي 0، واحد القادم هو 0، واحد القادم هو 0. 1 أو 0 يعطيني 1. وذلك حتى لو لم نكن نعرف مسبقا ما كان لأحرف صغيرة، ببساطة عن طريق "أو" جي A مع هذا النمط من البتات التي لدينا هنا في المقدمة الصفراء، يمكنك صغيرة عاصمة A عن طريق التقليب التي بت. استخدمنا هذا التعبير أسابيع مضت: التقليب قليلا. كيف يمكنك أن تفعل في الواقع أن برمجيا؟ استخدام ما يسمى عموما قناع، سلسلة من البتات، أنه في هذه الحالة يحدث ذلك فقط لتبدو وكأنها هذا الرقم هنا، ثم أنت "أو" معا باستخدام هذا المشغل C الجديدة، لا | |، يمكنك استخدام واحد | وكنت في الواقع الحصول على هذه الإجابة هنا لماذا؟ هذا هو المكان 1S، 2S المكان، 16S 4S، 8S،، 32S. لذلك تبين أنه إذا كنت تأخذ حرف A وأحادي المعامل OR مع ال 32 صحيحا، لأن ال 32 صحيحا، عندما تنظر إليه على أنه بت، يبدو مثل هذا، وهذا يعني انك يمكن أن الوجه بت الذي تريده فعلا. وبالمثل - وسوف نبحث في التعليمات البرمجية في لحظة فقط - لنفترض أننا نريد أن يذهب الاتجاه الآخر. كيف يمكنك أن تذهب من رأس المال صغيرة إلى A؟ التي بت يحتاج إلى تغيير؟ انها نفس واحدة. نريد تغيير ذلك قليلا الثالث من 1 إلى 0. وكيف يمكن أن نذهب عن القيام بذلك؟ كيف يمكننا إيقاف قليلا؟ مع ما يمكن أن نمط البتات نحن إيقاف قليلا؟ ماذا لو أننا نوع من عكس القناع؟ في حين قبل، قدمنا ​​كل 0S قناع الصفراء باستثناء بت واحد أردنا لتشغيل، ما إذا كان هذا الوقت، يمكننا أن نجعل من 1S قناع كله باستثناء بعض الشيء الذي نريده لإيقاف ثم استخدم ما مشغل؟ ماذا لو أننا "و" الأشياء؟ دعونا نلقي نظرة. إذا كان لنا أن نقف الآن لهذا، افترض أن أقوم بإنشاء مرة أخرى هذا كل قناع 1S باستثناء بعض الشيء الوحيد الذي أريد أن إيقاف ثم بدلا من "أو" الأرقام البيضاء فوق أعلى مع الأرقام الصفراء أسفل هنا، ماذا لو كنت بدلا من ذلك "و" معا؟ انه دعا لأحادي المعامل و. منطقيا، انها نفس الشيء وقيمة منطقية. هذا يعطيني 0 & 1 هو 0. وحتى كاذبة الحقيقي هو زائف. صحيح وصحيح هو الصحيح. وهنا سحر: الصواب والخطأ الآن كاذبة، لذلك قمنا بت إيقاف ذلك. والآن بقية القصة واضحة إلى حد ما. لأن بقية القناع هو 1S، لا يهم ما هي الأرقام باللون الأبيض. عند "و" شيء مع صحيح، كنت لن يغير قيمته. إذا كان صحيحا، فإنه يظل وفيا. إذا كانت مزيفة، وسوف تبقى كاذبة. لكن السحر يحدث عندما تأخذ شيئا كان صحيحا وأنت ثم "و" مع كاذبة. هذا له تأثير إيقاف ذلك قليلا. لذلك خفي قليلا هناك. دعونا ننظر في الواقع في بعض التعليمات البرمجية، والتي قد تبدو في الواقع أكثر خفي، ولكن دعونا نلقي نظرة هنا في tolower. إذا كنت تبحث في tolower، والذهاب من العاصمة A إلى أحرف صغيرة و، دعونا نرى كيف يمكننا تنفيذ هذا البرنامج. هنا الرئيسي، وانها لا تأخذ أية وسائط سطر الأوامر. أنا اعلان ج الحرف للحرف أن المستخدم هو الذهاب الى اكتب فيها I ثم استخدام دو مألوفة في حين أن حلقة فقط للتأكد من أن المستخدم يعطي بالتأكيد لي مال A أو B أو C. .. Z، لذلك فإنها تعطي لي شيئا بين ألف وZ. والآن ماذا أفعل هنا؟ أنا "أو" جي هذا مع 0x20، ولكن هذا في الواقع نفس - وسوف نعود إلى هذا في لحظة - 32. ذلك مرة أخرى، 32 هو هذا النمط من هنا بت. لماذا نحن نعرف ذلك؟ مجرد التفكير مرة أخرى إلى الأسبوع 0. هذا هو المكان 1S، 2S المكان، 4S، 8S، 16S، 32S مكان. حتى هذا الرقم الأصفر يحدث أن تكون 32. يمكن لي أن أعتبر ثم رسالة مثل شار هنا، أحادي المعامل "أو" مع عدد حرفيا 32، وماذا أعود؟ النسخة الصغيرة من أن شار. قبل لحظة، رغم ذلك، أعربت عن ذلك في تدوين قاعدة مختلفة. ماذا تمثل هذه؟ >> [طالب] سداسي عشري. [مالان] وهذا يحدث لتمثيل عشري. نحن لم نتحدث عن كل ذلك بكثير الست عشرية، ولكنها في الواقع مريحة في مثل هذه الحالات. على الرغم من أنها تبدو أكثر تعقيدا وعلى الرغم من أنه يبدو وكأنه لا 20 و 32، تبين أن ست عشري هو في الواقع تدوين مريحة السوبر لأنه في كل عشري أرقام بعد 0x - وهذا لا يعني شيئا؛ هذا هو مجرد اتفاقية الإنسان أن يقول هنا يأتي رقم سداسي عشري - كل من هذه الأرقام، و2 ثم 0 ويمكن أن تمثل نفسها مع 4 بت بالضبط. حتى إذا فعلنا ذلك، اسمحوا لي أن فتح محرر النص هنا - غريب الإكمال التلقائي - اذا لم نفعل محرر النص قليلا هنا، وعدد 0x20 يعني هنا هو 4 بت، وهنا آخر 4 بت. دعونا نجري بعض 4 بت أقصى اليمين الأولى. 0 عندما مثلت مع 4 بت ما هو؟ السوبر سهلة. فقط كل 0S. حتى 4 بت كما 0S. كيف تمثل 2؟ انها كانت فترة من الوقت منذ أن فعل ذلك، ولكن من 0100. لذلك هذا هو المكان 1S، وهذا هو المكان 2S، وبعد ذلك لا يهم ما هي الأماكن الأخرى. وبعبارة أخرى، في ست عشري قد يقول 0x20، ولكن إذا كنت تعتقد ثم حول ما هو (2) وكيف يتم تمثيل في ثنائي، ما هو 0 و كيف يتم تمثيل في ثنائي، الأجوبة على هذه الأسئلة هي هذا وهذا، على التوالي. حتى 0x20 يحدث لتمثيل هذا النمط من 8 بت، الذي هو على وجه التحديد القناع التي كنا نريد. لذلك هذا هو لحظة مجرد ممارسة فكرية، ولكن الحقيقة هي انها في التعليمات البرمجية عادة أكثر شيوعا لكتابة مثل هذا الثوابت بالنظام الست عشري لأن ثم مبرمج يمكن بسهولة نسبيا، حتى لو كان يتطلب بعض ورقة وقلم رصاص، ومعرفة ما هذا النمط من البتات هو لأنه لا يمكنك التعبير عن مجرد عادة و 0s 1s في التعليمات البرمجية. لا يمكنك الذهاب 00010 وهكذا دواليك. لديك لاختيار الرموز العشرية أو الست عشرية أو ثماني أو غيرها. معظم الناس يميلون إلى اختيار ست عشرية ذلك ببساطة أن كل رقم يمثل 4 بت ويمكنك القيام بذلك الرياضيات السريع. وأنا يدي على موجة toupper، وهو تقريبا نفس، بل تبدو متطابقة تقريبا. Toupper يحدث لاستخدام المشغل أو لا بل هذا الرجل ومدافع. ماذا تمثل DF؟ DF؟ أي شخص؟ >> [طالب] 255. 255؟ لا 255. من شأنها أن تكون FF. سوف نترك هذا واحد كممارسة قليلا. ولكن إذا كنت تذهب من 0، 1، 2، 3، 4، 5، 6، 7، 8، 9 ثم ما يأتي بعد 9؟ نحن نوع من الخروج من الأرقام العشرية، ولكن في ست عشري ما يأتي بعد 9؟ [طالب] أ. لذا >> أ، ب، ج، د. يمكنك معرفة من هناك نمط ما يمثل في الواقع بت د. وإذا كان لنا أن تفعل الرياضيات، وسنرى أن قناع كنت في نهاية المطاف العودة مطابق لهذا. و هذا هو، كل 1S، وهذا هو د. ذلك أن مدافع يمثل القناع. حسنا. وأخيرا، وليس لجعل الامور سوبر سليم، سوبر التقنية، ولكن لنفترض أننا أردنا أن كتابة البرنامج الذي يقوم بهذا. اسمحوا لي أن تمضي قدما وجعل ثنائي، وهو برنامج في ملف يسمى binary.c. واسمحوا لي الآن تشغيل ثنائي وتعطيني عدد صحيح غير سالب. لنبدأ من السهل ونوع في 0. هذا هو الآن برنامج بطباعة عدد صحيح في تمثيل ثنائي لها. حتى لو كنت تلعب هذه اللعبة مرة أخرى واكتب في 1 فقط، يجب أن تحصل على تمثيل 32 بت من 1. إذا كنت تفعل هذا مرة أخرى مع 2، يجب أن أحصل على ذلك. إذا كنت تفعل 7، يجب أن أحصل على 1S قليلة في النهاية وهكذا دواليك. اتضح لي أن أذكر هذا لأنه مع عمليات أحادي المعامل يمكنك القيام به في الواقع شيء واحد أخرى أيضا. يمكنك إنشاء هذه الأقنعة بشكل حيوي. نلقي نظرة على هذا مثال واحد النهائي التي تنطوي على عمليات أحادي المعامل. هنا الجزء الأول من التعليمات البرمجية، مطالبة المستخدم لعدد، وتصر على ان تقدم لي عدد صحيح غير سالب. ولهذا النوع من الاشياء المدرسة القديمة. ولكن هنا شيء وهذا النوع من اهتمام. كيف أذهب حول طباعة عدد في ثنائي؟ I تكرار الأول من ما لماذا؟ ما هو حجم وكثافة العمليات عادة، على الأقل في الأجهزة؟ >> [طالب] (4). انها 4. SO 4 * 8 هو 32 - 1 هو 31. إذا كان الأمر كذلك أنا بدأت العد من 31، التي تمثل، كما تبين، المفهوم فقط، بت 31 بت أو أعلى النظام، الذي هو هذا الرجل أكثر من هنا، في حين أن هذا هو الذهاب الى تكون 0 بت. لذلك هذا هو بت 01 ... بت 31. فما هو هذا رمز تفعل؟ لاحظت هذا حلقة، على الرغم من أنها تبدو خفي، وبالتكرار فقط في الفترة من 31 الى 0. هذا هو. لذلك يجب أن تكون جزءا مثيرة للاهتمام الآن في هذه الأسطر 5 هنا. تلاحظ أن في هذا الخط أنا اعلان متغير يسمى قناع أن تكون متسقة مع قصتنا من هذه الأرقام الصفراء. ثم ما هو هذا العمل؟ هذا هو مشغل آخر أحادي المعامل لم نشهد من قبل، على الأرجح. انها المشغل SHIFT الأيسر. هذا المشغل يقوم بهذا. هنا هو الرقم 1، وإذا كنت تفعل غادرت التحول، تحول اليسار، ماذا كنت تعتقد أن لديها تأثير ذلك على الأفراد أن 1؟ تحويل حرفيا أكثر من ذلك. إذا كان الأمر كذلك الرقم 1 هو ما لديك على اليسار وعليك أن تبدأ من الأول إلى تهيئة 31، ما الذي سيفعل؟ انها سوف تأخذ هذا الرقم (1) وتحول ذلك أكثر من 31 مكانا هنا. ولأن هناك أرقام أخرى لا الواضح وراء ذلك، وبشكل افتراضي يتم استبدال تلك 0S. لذلك عليك أن تبدأ مع الرقم 1، والتي بالطبع يبدو مثل هذا - واسمحوا لي أن استدراجه هنا في المركز. ثم تحول الأشياء كما كنت إلى اليسار، هذا الرجل يذهب أساسا بهذه الطريقة. ولكن بمجرد أن تفعل ذلك، يحصل شغل A 0 فيه. إذا كنت تحول ذلك للمرة الثانية، وغني بهذه الطريقة ويحصل شغل فيها آخر 0 كنت التحول مرة أخرى ثم يحصل شغل فيها آخر 0 حتى إذا كنت تفعل هذا الشي من 1 << ط 31 مكانا، كنت في نهاية المطاف الحصول على قناع هذا هو 32 حرفا، واحد من أقصى اليسار وهو 1، جميع ما تبقى منها 0. وكما تبين، بوصفها جانبا، وتحويل عدد إلى اليسار مثل هذا من قبيل الصدفة أيضا، ومريح في بعض الأحيان، له تأثير على القيام بما لهذا العدد؟ >> [طالب] مضاعفة ذلك. مضاعفة لأن كل من الأعمدة - المقام 1S، 2S المكان، المكان 4S، 8S المكان، المكان 16S - they're جميع مضاعفة كما تذهب إلى اليسار. أو بالأحرى، عند تحويل 1S وأنت تسير في نهاية المطاف مضاعفة قيمة الرقم. يمكنك في نهاية المطاف القيام التحولات مثيرة للاهتمام من الأرقام عن طريق تحويل كل شيء على بهذه الطريقة من قبل قوى 2. فكيف يعمل هذا؟ هذا ثم يعطي لي قناع هذا كل ما عدا 0S 1 في المكان على وجه التحديد أريد ذلك، ثم هذا التعبير، الذي سرق من toupper.c، يقول ببساطة اتخاذ عدد ن أن المستخدم بكتابتها في، "و" مع هذا القناع، وماذا أنت ذاهب للحصول على؟ وأنت تسير في الحصول على 1 إذا كان هناك 1 في ذلك الموقع ملثمين، أو وأنت تسير في الحصول على 0 إذا ليس هناك. وهكذا كل هذا البرنامج لا هي بالفعل لها حلقة، ويخلق قناع مع 1 أكثر من هنا، ثم (أ) 1 أكثر من هنا، ثم (أ) 1 أكثر من هنا، ويستخدم هذا أحادي المعامل والخديعة أن أقول هل هناك بت 1 في إدخال المستخدم هنا؟ هل هناك بت 1 في إدخال المستخدم هنا؟ وإذا كان الأمر كذلك، طباعة حرفيا 1، طباعة آخر 0. نحن نفعل هذا مع رجات لمجرد هذا السبب نقوم به 32 بت بدلا من 8، ولكن ما لدينا هو هذا ثم عرض أحادي المعامل AND، OR أحادي المعامل هذا، وهذا المشغل تحول اليسار، التي ليست في كثير من الأحيان مفيدة بشكل رهيب، ولكن تبين أنها يمكن أن تكون. في الواقع، إذا كنت لشيء من هذا القبيل تمثل مجموعة من القيم المنطقية فقط لتمثيل صحيحة أو خاطئة، لنفترض أنك تريد أن تتبع أم لا غرفة كاملة من 300 طالب موجود، هل يمكن أن تعلن مجموعة من حجم 300 من نوع BOOL حتى يتسنى لك على 300 bools، ويمكنك تعيين كل إلى True إذا كان شخص ما هنا وإلا كاذبة. لماذا هو أن التمثيل في هذا بنية بيانات غير فعالة؟ ما هو سيئ عن تصميم هذا الهيكل البيانات، مجموعة من 300 bools؟ ما هو منطقي، في الواقع، تحت غطاء محرك السيارة؟ هذا، أيضا، هو الشيء الذي قد لا يكون على دراية. كما تبين عدم وجود BOOL. نتذكر اننا خلق نوع من أنه مع ملف cs50.h، الذي يشمل نفسها BOOL القياسية. C هو نوع من البكم، رغم ذلك، عندما يتعلق الأمر منطقي. ويستخدم 8 بت لتمثيل كل BOOL، وهو الإسراف تماما لأنه من الواضح، وكم بت لا تحتاج لتمثيل BOOL؟ فقط 1. لذلك تبين أنه إذا كان لديك الآن القدرة أحادي المعامل مع مشغلي لمعالجة البتات الفردية حتى في شار، حتى في بايت واحد، تبين لك يمكن أن تقلل من الذاكرة المطلوبة لتمثيل شيء غبي مثل تلك البيانات بنية الحضور نصب بعامل 8. بدلا من استخدام ثمانية بتات لتمثيل صحيحة أو خاطئة، يمكنك استخدام حرفيا واحدة باستخدام بايت واحد لكل ثمانية طلاب في الصف وتبديل 0-1 بت الفردية باستخدام هذه الأنواع من الحيل على مستوى منخفض. التي وضعت حقا وضع حد للطاقة. هل هناك أي أسئلة حول عمليات أحادي المعامل؟ نعم. >> [طالب] هل هناك مشغل خاص أو؟ نعم. هناك عامل خاص أو التي تبدو مثل هذا، ^، رمز الجزرة، وهو ما يعني فقط أول شيء أو الشيء الثاني يمكن أن يكون 1 لإخراج لتكون 1. هناك أيضا لا، ~، والتي سوف تسمح لك قلب ل0 إلى 1 أو العكس بالعكس أيضا. وهناك أيضا عامل تحول الحق، >>، وهو ضد واحد من رأينا. حسنا. دعونا نأخذ الأمور الآن إلى مستوى أعلى. بدأنا بالحديث عن النص وضغط بعد ذلك ويمثل النص مع عدد أقل من عدد البتات؛ تحدثنا قليلا عن الطريقة التي يمكن أن تبدأ الآن التلاعب الأمور على مستوى أحادي المعامل. دعونا الآن تكبير احتياطي 10،000 قدم إلى التمثيل من الأشياء أكثر تعقيدا مثل الرسومات. هنا لدينا علم ألمانيا، وهنا لدينا واحدة من فرنسا. قد تكون ممثلة في هذه تنسيقات الملفات هل يمكن أن نعرف - صور GIF، على سبيل المثال. إذا كنت قد رأيت من أي وقت مضى صورة على شبكة الانترنت التي تنتهي في. GIF، هذا هو تنسيق تبادل الرسومات. هذه العلامات اثنين هنا نوع من تصلح لضغط لماذا واضحة ربما السبب؟ >> [استجابة الطالب غير مسموع] هناك الكثير من التكرار، أليس كذلك؟ من أجل إرسال إشارة ألمانيا، فكر في هذا بأنها صورة على الشاشة نسخة في الأيام خدش الخاص بك. قد تذكرون أن هناك بكسل الفردية أو نقاط يؤلف صورة. هناك صف كامل من النقاط السوداء وكلها صف آخر من النقاط السوداء. هناك مجموعة من الصفوف من النقاط السوداء التي يمكن أن نرى إذا كنا حقا في أسرع، يشبه إلى حد كبير عندما كنا في التكبير على وجهه روب في فوتوشوب. بمجرد وصلنا أعمق وأعمق وأعمق في الصورة، التي كنت أرى البيكسيلاشن، كل من المربعات التي تتألف عينه في هذه الحالة. نفس الصفقة هنا. إذا كنا أسرع قليلا جدا في، وكنت أرى النقاط الفردية. حسنا، هذا هو نوع من مضيعة للبت. اذا كان ثلث العلم باللون الأسود وثلث العلم الأصفر وهكذا دواليك، لماذا لا يمكننا بطريقة ما ضغط هذا العلم؟ ويمكن أن يتم ضغطها حتى العلم الفرنسي على الرغم من أن النمط هو مختلفة قليلا. اتضح تنسيق الملف GIF هي صيغة ضغط بلا خسائر، مما يعني أنه يمكنك التقاط صورة مثل العلم الألماني هنا، يمكنك رمي بعيدا الكثير من البتات من دون التضحية بالجودة. هذا هو على النقيض من شيء من هذا القبيل ملفات JPEG، التي معظمنا ربما أكثر دراية. الفيسبوك فليكر الصور والصور وما شابه ذلك هي دائما تقريبا وحفظ ملفات JPEG عندما كنت تحميلها، ولكن هو الضياع صور JPEG - تنسيق حيث كنت رمي ​​بعيدا بت - الضياع ولكنك أيضا رمي بعيدا الجودة. وحتى إذا كنت ضغط الصور مع فوتوشوب أو تحميلها على الفيسبوك أو يأخذهم على الهاتف كربي حقا، هل تعلم أن يبدأ الصورة للحصول على مبقع جدا ومنقطة، وهذا لأنه يتم ضغطها من قبل جهاز الكمبيوتر أو الهاتف عن طريق رمي حرفيا بعيدا المعلومات. ولكن المدهش في GIF أنه يمكن استخدام عدد أقل من البتات مما قد افتراضيا دون أن تفقد أي من المعلومات. وذلك هو الحال بالضرورة على النحو التالي. بدلا من تخزينها في ملف مثل BMP يساعد على ذلك عمل الثلاثي RGB للأسود، أسود، أسود، أسود، أسود، أسود، أسود، أسود، أسود، أسود، أسود، أسود وهكذا دواليك، بدلا من ذلك، تنسيق GIF هو الذهاب الى القول "الأسود" وبعد ذلك، "كرر هذه الأوقات 100،" أو شيء من هذا القبيل. "بلاك، كرر هذه الأوقات 100، أسود، كرر هذا مرات 100 ..." "صفراء، كرر هذا مرات 100." ويتذكر ذلك، أساسا، إلى أقصى اليسار بكسل وبطريقة ما ثم بترميز فكرة تكرار بكسل مرارا وتكرارا. لذلك يمكن ضغط صور GIF ثم أنفسهم دون أن تفقد أي من المعلومات. ولكن إذا كان لديك لتخمين، إذا كان هذا هو الخوارزمية التي توقف استخدامها، أي من هذه العلامات، على الرغم من أنها تبدو متطابقة في الحجم، سيكون أصغر عند حفظها على القرص ك GIF؟ >> [طالب] ألمانيا. ألمانيا ستكون أصغر؟ لماذا؟ [طالب] لأنك تكراره مرات عديدة أفقيا ثم كرر مرة أخرى. بالضبط >>. لأن الشعب الذي اخترع GIF فقط نوع من قرر تعسفا التي سيتم الاستدانة تكرار أفقيا وجانبيا لا. هناك الكثير من التكرار هنا أفقيا في العلم الألماني مما كانت عليه في العلم الفرنسي. إذا كان الأمر كذلك فإننا فعليا حتى فتح مجلد على القرص الصلب الذي يحتوي هذه متحركة، يمكنك ان ترى في الواقع أن العلم الألماني هنا هو 2 كيلو بايت وفرنسية واحدة هي 4 كيلو بايت. يحدث أن يكون من قبيل المصادفة أن واحدا هو ضعف الآخر، ولكن هذا في حقيقة الحال أن العلم الفرنسي هو أكبر من ذلك بكثير. على الرغم من أننا نتحدث هنا عن الرسومات، يمكن أن تنطبق على نفس الأفكار لا أشياء مثل الأعلام ولكن الصور التي هي أكثر تعقيدا قليلا. إذا كنت تأخذ صورة تفاحة، وبالتأكيد هناك الكثير من الازدواجية هناك، لذلك يمكن بطريقة ما أن نتذكر الخلفية الافتراضي هو الأزرق وليس كما في الصورة اليمنى يقترح، يجب أن نتذكر كل لون بكسل واحد في هذه الصورة. حتى نتمكن من رمي بعيدا بت هناك دون أن تفقد المعلومات. التفاح لا تزال تبدو بنفس الطريقة. في هذا المثال هنا، قد ترى ما يحدث في الفيلم. هذه تمثل بكرات الفيلم المدرسة القديمة حيث في الصورة الأعلى لا لديك القيادة RV الماضية منزل وشجرة. وطالما أن يدفع فان الماضية من اليسار إلى اليمين، ما لم تغير واضح؟ هذا البيت ليس أذهب إلى أي مكان، وكانت الشجرة لا أذهب إلى أي مكان. الشيء الوحيد الذي يتحرك هو فان في هذه الحالة. وذلك بدون تغيير الخلفية يوحي، ما يمكن أن تفعله في الأفلام وبالمثل مجرد رمي بعيدا المعلومات التي لا تتغير بين الإطارات. ومن المعروف عموما هذه وضغط INTERFRAME حيث يبدو هذا الإطار إذا مماثلة تقريبا لهذا واحد، دعونا لا يزعج تخزين على القرص أي من معلومات متطابقة على هذه الأطر المتوسطة، دعونا فقط استخدام الأطر الرئيسية مرة واحدة في حين التي تقوم بتخزين هذه المعلومات في الواقع بوفرة مثلما التعقل قليلا الوصول. على النقيض من ذلك، ثمة نهج آخر لضغط الفيديو في هذا المثال الثاني، وانخفاض هنا، حيث بدلا من تخزين 30 لقطة، لماذا لا تقوم بتخزين فقط 15 لقطة في الثانية بدلا من ذلك؟ بدلا من ذلك النوع من الأفلام التي تتدفق بشكل جميل، تماما، قد تبدو انها متعثرة قليلا، ومدرسة قديمة بعض الشيء، ولكن سوف يكون الأثر الصافي لاستخدام بت أقل بكثير مما قد يكون خلاف ذلك ضروريا. فأين هذا لا يترك لنا بعد ذلك؟ كان ذلك نوعا من جانبا على مكان آخر يمكنك الذهاب مع الضغط. لمعرفة المزيد عن ذلك، اتخاذ الطبقة مثل CS175 هنا. وهنا مثال آخر داخل الفيديو. إذا كان النحل هو الشيء الوحيد تتحرك، يمكنك رمي بعيدا حقا في تلك المعلومات إطارات الأوسط لأن الزهور والسماء وأوراق لا تتغير. ولكن دعونا ننظر الآن شيء واحد آخر. في الدقائق ال 5 التالية نترك وراء C إلى الأبد في محاضرة؟ نعم. ليس في psets، وإن كان. قصة عن مشاركة C ومن ثم نصل الى الاشياء مثير جدا وتشمل HTML ويب ووو هوو. حسنا. هنا نذهب. هذا هو الدافع. تبين كل هذا الوقت عندما كنا نركض كتابة برامج ضجيج. وضجيج، قلنا منذ الأسبوع الأول الى حد كبير، ويأخذ شفرة المصدر وتحولها إلى رمز الكائن. يستغرق C وتحولها إلى 0S و1S. لقد تم نوع من يكذب عليك لبضعة أسابيع لأنها ليست تماما بهذه البساطة. هناك الكثير مما يحدث تحت غطاء محرك السيارة عند تشغيل برنامج مثل ضجيج. في الواقع، يمكن حقا عملية تجميع برنامج تلخيصها، كما قد نتذكر من الفيديو على روب جامعي، في هذه الخطوات 4: ما قبل المعالجة، وتجميع نفسها، وتجميع، وربط. ولكننا في الصف ومعظم الناس في العالم عادة تلخيص كل هذه الخطوات تماما كما "تجميع". ولكن إذا بدأنا مع رمز مصدر مثل هذا، نذكر لعل هذا هو أبسط برنامج C لقد كتبنا حتى الآن، أذكر أنه عندما جمعت ينتهي يبحث حتى مثل هذا. ولكن هناك في الواقع خطوة وسيطة، وتلك الخطوات هي كما يلي. أولا هناك هذا الشيء في أعلى جدا من هذا ومعظم برامجنا، # تشمل ماذا تتضمن # لا بالنسبة لنا؟ انها الى حد كبير ونسخ لصق محتويات stdio.h في ملفي حتى لماذا؟ لماذا يهمني محتويات stdio.h؟ هناك ما هو في مصلحة من؟ Printf في الإعلان، النموذج الأولي، وبحيث يعرف المترجم ثم ما أعنيه عندما أذكر هذه الوظيفة printf. الخطوة 1 في ذلك هو تجميع قبل معالجة، حيث برنامج مثل ضجيج أو بعض البرامج المساعد أن يقرأ ضجيج يأتي مع أعلى إلى أسفل التعليمات البرمجية، من اليسار إلى اليمين، وأي وقت تراه رمزا # تليها كلمة رئيسية مثل تضمين، ينفذ هذه العملية والنسخ واللصق في هذا stdio.h في ملف القضية. هذا الخطوة 1. ثم لديك ملف C أكبر بكثير بسبب نسخة ضخمة، وفرص العمل لصق ما حدث للتو. 2 الخطوة الآن على تجميع. ولكن تبين تجميع يأخذ شفرة المصدر التي تبدو مثل هذا وتحويله إلى شيء يشبه هذا، بالنسبة لمن هم يعرفون الذي يسمى؟ >> [طالب] الجمعية. الجمعية >> اللغة. هذا هو في الواقع شيء إذا كنت تأخذ CS61 سوف يغوص في مزيد من التفاصيل. هذا هو فقط عن أقرب ما يمكنك الحصول على الكتابة و 0s 1s نفسك لكن الأمور في كتابة مثل هذه الطريقة التي لا يزال يجعل على الأقل قليلا من معنى. هذه هي تعليمات الجهاز، وإذا كنا بالتمرير لأسفل إلى المهمة الرئيسية هنا، لاحظت أن هناك دفعة هذه التعليمات، نقل التعليمات، وطرح التعليمات، استدعاء التعليمات، وهكذا دواليك. عندما تسمع أن الكمبيوتر يحتوي إنتل في الداخل، لديك CPU Intel في جهاز Mac أو PC، ماذا يعني ذلك؟ ويأتي بنيت من قبل شركات مثل CPU انتل فهم تعليمات معينة. ليست لديهم فكرة عما هي وظائف مثل مبادلة أو الرئيسية هي في حد ذاتها، لكنهم يعرفون ما على مستوى منخفض جدا تعليمات مثل الجمع والطرح، ودفع، نقل، والدعوة، وهكذا دواليك هي. لذلك عندما قمت ترجمة رمز C في لغة التجميع، يتم تحويل الخاص بك سهلة الاستعمال جدا ذات مظهر رمز إلى شيء يشبه هذا، التي تتحرك حرفيا بايت أو 4 بايت حولها في وحدات صغيرة مثل الدخول والخروج من وحدة المعالجة المركزية. ولكن في النهاية، عندما ضجيج مستعدة لاتخاذ هذا التمثيل من برنامجك في 0S و1S، يحدث الخطوة تجميع ثم دعا، وهذا كله مرة أخرى يحدث في طرفة عين عند تشغيل ضجيج. نبدأ هنا، فإنه يخرج مثل هذا الملف، وبعد ذلك يحول إلى هذه 0S و1S. وإذا كنت ترغب في العودة في مرحلة ما نرى في الواقع وهذا في العمل، إذا ذهبت إلى هذا hello1.c--هو واحد من البرامج الأولى في نظرنا - عادة فإننا تجميع هذه hello1.c مع ضجيج وهذا من شأنه أن يعطينا a.out. إذا كنت تعطي في المقابل بدلا من ذلك على S-العلم، ما ستحصل عليه هو hello1.s وسترى في الواقع لغة التجميع. أنني أفعل هذا من أجل برنامج قصير جدا، ولكن إذا كنت أعود للالتدافع أو استرداد أو أي برنامج كنت قد كتبت و، للفضول فقط نريد أن نرى ما يبدو فعلا مثل ما يجري في الواقع تغذي CPU، يمكنك استخدام هذا العلم-S مع ضجيج. ولكن بعد ذلك وأخيرا، هناك لا تزال واحدة مسكتك. وهنا هي و 0s 1s التي تمثل تنفيذ بلدي العالم، مرحبا. ولكن كنت وظيفة لشخص آخر في برنامجي. حتى على الرغم من أن العملية كانت لي أن hello.c، يحصل عليه في تجميع رمز التجميع، ومن ثم يحصل في تجميعها و 0s 1s، فقط و 0s 1s التي أنتج في هذه المرحلة من الوقت هي تلك التي تنتج عن قانون بلدي. ولكن الشخص الذي كتب printf، فإنها ترجمة التعليمات البرمجية الخاصة بهم قبل 20 عاما وكان مثبتا الآن في مكان ما على الجهاز، لذلك لدينا إلى حد ما إلى دمج له أو لها و 0s 1s مع 0S بلدي و1S، وهذا يقودنا إلى الخطوة 4 والأخير من تجميع، والمعروفة باسم الارتباط. حتى على الجانب الأيسر لدينا بالضبط نفس الصورة كما كانت من قبل: hello.c يصبح رمز الجمعية و 0s 1s يصبح. ولكن أذكر أنني استخدمت معيار I / O في مكتبة قانون بلدي، وهذا يعني في مكان ما على الكمبيوتر هناك ملف يسمى stdio.c أو على الأقل النسخة المترجمة منه لشخص ما قبل بضع سنوات جمعت stdio.c إلى رمز التجميع ثم في مجمله مجموعة من 0S و1S. هذا هو ما يعرف باسم ثابت أو مكتبة ديناميكية. انها بعض الملفات يجلس في مكان ما في الجهاز. لكن أخيرا، لا بد لي من اتخاذ 0S بلدي و1S وهذا الشخص و 0s 1s وربط بعضهم البعض بطريقة أو بأخرى، والجمع بين تلك حرفيا و 0s 1s في ملف واحد يسمى a.out أو hello1 أو أيا كان دعوت برنامجي بحيث النتيجة النهائية لديها كل من 1s و 0s أن يؤلف برنامجي. لذلك كل هذا الوقت في هذا الفصل الدراسي عندما كنت تستخدم ضجيج وحتى الآونة الأخيرة جعل تشغيل لتشغيل ضجيج، وكانت كل من هذه الخطوات يحدث نوع من الفور ولكن عمدا جدا. وحتى إذا كنت لا تزال على في علم الحاسوب، وهي CS61، هذه هي الطبقة التي سوف تستمر في التراجع قشر هناك نتحدث عن الكفاءة، والآثار الأمنية، ومثل هذه التفاصيل أقل مستوى. لكن مع ذلك، نحن على وشك مغادرة وراء C. دعونا نمضي قدما واتخاذ لدينا 5 دقائق استراحة الآن، وعندما نعود: الإنترنت. حسنا. لقد عدنا. الآن نبدأ دينا نظرة ليس فقط في HTML لأنه، كما سترون، HTML نفسه هو في الواقع بسيط جدا ولكن في الحقيقة في برمجة الويب بشكل عام، والتواصل بشكل عام، وكيف كل هذه التقنيات معا ليسمح لنا لإنشاء برامج أكثر تطورا على قمة الإنترنت حتى الآن من استطعنا إليها في هذه النوافذ بالأسود والأبيض. في الواقع، في هذه المرحلة في الفصل الدراسي وعلى الرغم من أننا نقضي وقتا أقل نسبيا على PHP، HTML، CSS، وجافا سكريبت، SQL وأكثر، معظم الطلاب القيام به في نهاية المطاف المشاريع النهائية التي هي على شبكة الإنترنت لأنه كما سترى، الخلفية لديك الآن في C إلى حد كبير ينطبق على اللغات ذات مستوى أعلى. وكما كنت بدء التفكير في المشروع النهائي الخاص بك، التي، مثلها مثل مشكلة تعيين 0، حيث تم تشجيع لك للقيام بمعظم أي شيء من مصلحة لكم في سكراتش، المشروع النهائي هي فرصتك لاتخاذ علمك المكتشف حديثا والدهاء مع C أو PHP أو جافا سكريبت أو ما شابه ذلك من لتدور وخلق قطعة الخاصة جدا من البرمجيات لللعالم أن يرى. والبذور لك الأفكار، تعلم أنه يمكنك التوجه هنا، projects.cs50.net. كل عام، ونحن ننشد الأفكار من أعضاء هيئة التدريس والموظفين والجماعات الطلابية في الحرم الجامعي فقط لتقديم أفكارهم لأشياء مثيرة للاهتمام التي يمكن حلها باستخدام أجهزة الكمبيوتر، استخدام المواقع، وذلك باستخدام البرمجيات. إذا كان الأمر كذلك كنت تناضل من أجل التوصل إلى فكرة خاصة بك، بكل الوسائل من خلال تمرير الأفكار هناك من هذا العام والماضي. أنها على ما يرام تماما للتصدي لمشروع تم معالجتها من قبل. وقد شهدنا العديد من تطبيقات لرؤية حالة من الغسيل في الحرم الجامعي، تطبيقات كثيرة لتبحر القائمة قاعة الطعام، العديد من التطبيقات للملاحة في كتالوج بالطبع وما شابه ذلك. وبالفعل، في محاضرة المستقبل والندوات في المستقبل، سوف نقدم لك بعض واجهات برمجة التطبيقات متاحة للجمهور، وكلاهما متاح تجاريا وكذلك هنا المتاحة من CS50 في الحرم الجامعي بحيث يكون لديك الوصول إلى البيانات ويمكن بعد ذلك القيام أشياء مثيرة للاهتمام بها. أكثر من ذلك على المشاريع النهائية في غضون أيام قليلة عندما كنا الافراج عن مواصفات، لكن في الوقت الراهن، تعلم أنه يمكنك العمل منفردا أو مع واحد أو اثنين من أصدقائه على أي مشروع أكثر من رغباتك. شبكة الإنترنت. ان تمضي قدما وسحب جهاز الكمبيوتر المحمول، تذهب إلى facebook.com للمرة الأولى، لا بعد تسجيل الدخول في الآونة الأخيرة، وهاهنا. ماذا يحدث بالضبط؟ عندما ضرب أدخل على جهاز الكمبيوتر الخاص بك، في مجمله مجموعة من الخطوات بدء نوع من يحدث بطريقة سحرية. لذلك أنت هنا على الملقم، اليسار على شبكة الإنترنت مثل الفيسبوك وهنا على اليمين، وعلى نحو ما كنت تستخدم هذه اللغة تسمى HTTP، بروتوكول نقل النص التشعبي. HTTP ليست لغة برمجة. انها أكثر من البروتوكول. وهي عبارة عن مجموعة من الاتفاقيات التي متصفحات الويب وخوادم الويب استخدامها عند intercommunicating. وما يعنيه هذا هو على النحو التالي. يشبه إلى حد كبير في العالم الحقيقي، لدينا هذه الاتفاقيات حيث إذا كنت تلبية بعض الإنسان للمرة الأولى، إذا كنت لا تمانع في مسايرة لي هنا، قد جئت متروك لكم، ويقول: "مرحبا، اسمي ديفيد". مرحبا >>، ديفيد. اسمي سامي. "مرحبا، ديفيد. اسمي سامي". حتى الآن دخلنا فقط في هذا النوع من بروتوكول الإنسان سخيفة حيث كنت قد شرعت في البروتوكول، وردت سامي، لقد اهتزت نحن اليدين، واكتمال الصفقة. HTTP هي مشابهة جدا في الروح. عندما يطلب متصفح الويب الخاص بك www.facebook.com، ما المتصفح يقوم به حقا هو توسيع يدها، إذا جاز التعبير، إلى الخادم وانها إرساله رسالة. وهذه الرسالة هي عادة الحصول على شيء من هذا القبيل - ماذا كنت ترغب في الحصول؟ - يحصل لي في الصفحة الرئيسية، والتي تدل عادة على شريحة واحدة في نهاية URL. وعادل حتى تعرف ما أنا أتحدث اللغة، وأنا ذاهب للمتصفح أن أقول لكم أن أتحدث HTTP الإصدار 1.1، وأيضا لحسن التدبير، وانا ذاهب لاقول لكم ان المضيف الذي أريد الصفحة الرئيسية ل هو facebook.com. عادة، متصفح الإنترنت، دون علم لكم، والإنسان، يرسل هذه الرسالة عبر الإنترنت عند كتابة ببساطة www.facebook.com، أدخل، في المستعرض. وماذا الفيسبوك الاستجابة مع؟ فإنه يستجيب مع بعض التفاصيل ذات مظهر مماثل خفي ولكن أيضا أكثر من ذلك بكثير. اسمحوا لي أن المضي قدما إلى الصفحة الرئيسية الفيسبوك هنا. هذا هو الشاشة التي معظمنا ربما لم نرى ما اذا كان يمكنك البقاء متصل في كل الوقت، ولكن هذا هو الواقع وطنهم الصفحة. إذا فعلنا هذا في كروم، لاحظ أنه يمكنك سحب ما يصل هذه القوائم السياق قليلا. باستخدام الكروم، سواء على ماك OS، ويندوز، لينوكس، أو ما شابه ذلك، إذا كنت انقر فوق التحكم أو اضغط اليسار، يمكنك سحب عادة ما يصل إلى القائمة التي تبدو مثل هذا، حيث ينتظر عدد قليل من الخيارات، واحدة منها هي عرض مصدر الصفحة. يمكنك أيضا الحصول على هذه الأشياء عادة من خلال الذهاب إلى قائمة عرض وبدس حولها. على سبيل المثال، هنا تحت عرض، المطور هو نفس الشيء. انا ذاهب الى المضي قدما والنظر في مصدر الصفحة عرض. ما سوف نراه هو أن مارك HTML وقد كتب لتمثيل facebook.com. انها فوضى كاملة هنا، ولكن سنرى أن هذا الأمر يبدو معقولا تماما أكثر من ذلك بقليل قبل فترة طويلة. ولكن هناك بعض أنماط هنا. اسمحوا لي أن انتقل لأسفل إلى مثل هذه الاشياء. هذا من الصعب لبشر أن يقرأ، ولكن لاحظت أن هناك هذا النمط من الأقواس الزاوية مع كلمات رئيسية مثل الخيار، كلمات رئيسية مثل القيمة، ونقلت بعض السلاسل. هذا هو المكان، عند الاشتراك لأول مرة للغاية، أي عام المحددة ميلادك هو. يتم ترميز بطريقة ما أن القائمة المنسدلة السنين الميلاد هنا في هذه اللغة تسمى HTML، لغة توصيف النص التشعبي. وبعبارة أخرى، عندما يطلب المتصفح صفحة ويب، أنها تتحدث هذه الاتفاقية تسمى HTTP. ولكن ماذا facebook.com الاستجابة لهذا الطلب مع؟ فإنه يستجيب مع بعض من هذه الرسائل خفي، كما سنرى في لحظة. ولكن معظم ردها في شكل HTML، لغة توصيف النص التشعبي. هذا هو لغة الفعلي الذي هو مكتوب في صفحة ويب. وما هو المتصفح هو حقا لا ثم، عند استلام ما يشبه هذا، يقرأ الأعلى إلى الأسفل، من اليسار إلى اليمين، وأي وقت تراه واحد من هذه الأقواس الزاوية تليها كلمة رئيسية مثل الخيار، فإنه يعرض تلك اللغة الترميزية في الطريقة المناسبة. في هذه الحالة، فإنه عرض قائمة منسدلة من السنين. ولكن مرة أخرى، وهذا هو فوضى كاملة للنظر في. هذا ليس لأن مطوري الفيسبوك تظهر 0 لل5 لنمط، على سبيل المثال. لأن معظم التعليمات البرمجية التي يكتبون هذا، في الواقع، وكتب بشكل جميل، وعلق أيضا، بادئة لطيف، وما شابه ذلك، ولكن بالطبع من الآلات وأجهزة الكمبيوتر والمتصفحات حقا لا تعطي بالا التعليمات البرمجية ما إذا كان على ما يرام، على غرار. في واقع الأمر، فإنه من الإسراف تماما لتصل إلى المفتاح TAB جميع تلك الأوقات ووضع تعليقات جميع أنحاء التعليمات البرمجية واختيار أسماء المتغيرات وصفية حقا لأنه إذا كان المتصفح لا يهمه، كل ما نقوم به في نهاية اليوم يهدر بايت. لذلك تبين ما فعله هو معظم المواقع على الرغم من أن مصدر التعليمات البرمجية ل facebook.com، لcs50.net وجميع هذه المواقع الأخرى على شبكة الإنترنت وعادة ما تكون مكتوبة بشكل جيد وعلق بشكل جيد ومتقن بادئة وما شابه ذلك، قبل عادة يتم وضع موقع على شبكة الإنترنت، ورمز مصغر، وبموجبه HTML CSS ل- شيء آخر سنرى قريبا - يتم ضغط شفرة جافا سكريبت سنرى قريبا، حيث أصبحت أسماء المتغيرات طويلة X و Y و Z، ويتم طرح جميع كل ذلك أن يجعل كل شيء بيضاء تبدو قابلة للقراءة حتى بعيدا، لأنه إذا كنت تفكر في ذلك بهذه الطريقة، الفيسبوك يحصل على مليار صفحة يضرب في اليوم - مجنون من هذا القبيل شيء - حتى ما إذا مبرمج لمجرد أن يكون الشرج ضرب الفضاء بار وقت واحد إضافي فقط لمسافة بادئة بعض سطر من التعليمات البرمجية من أي وقت مضى أكثر من ذلك بكثير؟ ما هي الآثار المترتبة إذا الفيسبوك يحافظ التي بيضاء في كل من وحدات البايت يرسلون إلى الناس على شبكة الإنترنت؟ ضرب شريط الفضاء مرة واحدة يعطي لك بايت إضافية في الملف الخاص بك. وإذا كان من مليار شخص ثم المضي قدما لتحميل الصفحة الرئيسية في ذلك اليوم، وكم من البيانات التي قمت بثها على الانترنت؟ A جيجابايت من دون سبب جيد. وتمنح، للكثير من المواقع هذه ليست مثل قضية قابلة للتطوير، ولكن لالفيسبوك، لجوجل، لبعض من أكثر المواقع شعبية هناك حافزا كبيرا ماليا لجعل التعليمات البرمجية تبدو وكأنها حالة من الفوضى بحيث كنت تستخدم وحدات البايت أقل عدد ممكن، بالإضافة إلى ضغط بعد ذلك باستخدام الرمز شيء من هذا القبيل، ودعا خوارزمية GZIP، أن المتصفح لا للكم تلقائيا. ولكن هذا هو فظيعة. سنقوم أبدا تعلم أي شيء عن المواقع الآخرين وكيفية تصميم صفحات الويب إذا علينا أن ننظر إليها من هذا القبيل. لحسن الحظ كان الأمر كذلك، متصفحات مثل Chrome و Firefox و IE هذه الأيام عادة ما تأتي مع أدوات المطورين المضمنة. في الواقع، إذا ذهبت إلى هنا لفحص العنصر أو إذا ذهبت إلى عرض، المطور، وتذهب إلى أدوات المطور صراحة، هذه النافذة في الجزء السفلي من الشاشة بلدي الملوثات العضوية الثابتة حتى الآن. انها قليلا ترهيب في البداية لأن هناك الكثير من علامات التبويب غير مألوفة هنا، ولكن إذا كنت أنقر على عناصر على طول الطريق في أسفل اليسار، ومن الواضح الكروم ذكية جدا. فهو يعرف كيفية تفسير كل من هذه التعليمات البرمجية. وهكذا ما يفعله هو أنه كروم ينظف جميع HTML الفيسبوك ل. على الرغم من أن هناك لا يوجد بيضاء، ليس هناك المسافة البادئة هناك، تلاحظ الآن أن أتمكن من البدء في التنقل في هذه الصفحة على شبكة الإنترنت مما يزيد من هرمي. وتبين أن كل صفحة الويب المكتوبة بلغة HTML5 دعا ينبغي أن تبدأ مع هذا، هذا الإعلان DOCTYPE، إذا جاز التعبير: انها نوع من الضوء واللون الرمادي هناك، ولكن هذا هو السطر الأول جدا من التعليمات البرمجية في هذا الملف، وتخبر المتصفح فقط، "يا، وهنا يأتي بعض HTML5. هنا يأتي صفحة ويب". الشريحة الأولى مفتوحة بعد ذلك يحدث أن يكون هذا الشيء، مفتوح علامة HTML قوس، ثم إذا كنت الغوص في أعمق - هذه الأسهم لا معنى لها تماما؛ أنها ليست سوى لأجل العرض التقديمي، فهي ليست في الواقع في ملف - تلاحظ أن داخل علامة HTML في الفيسبوك، أي شيء يبدأ مع قوس مفتوح ومن ثم قد يسمى كلمة علامة. حتى داخل علامة HTML على ما يبدو علامة الرأس وعلامة الجسم. داخل العلامة رئيس الآن فوضى عارمة لالفيسبوك لأن لديهم الكثير من الفوقية وأشياء أخرى للتسويق والإعلان. ولكن إذا كنا بالتمرير لأسفل، أسفل، أسفل، أسفل، دعونا نرى أين هو. ومن هنا. هذا هو واحد على الأقل على دراية إلى حد ما. عنوان الصفحة الرئيسية في الفيسبوك، وإذا نظرت من أي وقت مضى في علامة التبويب في شريط العنوان الخاص بك، هو مرحبا بكم في الفيسبوك - في سجل، إشترك أو معرفة المزيد. هذا ما كنت انظر في شريط العنوان في متصفح Chrome، وهذه هي الطريقة التي تعبر عن ذلك في التعليمات البرمجية. إذا تجاهلنا كل شيء آخر في الرأس، أكثر من الشجاعة لصفحة ويب في الجسم، وتبين أن رمز الفيسبوك هو الذهاب الى نظرة أكثر تعقيدا من معظم الأشياء سوف نكتب في البداية لمجرد انه تم بناؤه على مر السنين، ولكن هناك الكثير من العلامات النصي، وجافا سكريبت رمز، الذي يجعل موقع تفاعلي جدا: رؤية تحديثات الحالة على الفور باستخدام لغات مثل جافا سكريبت. هناك شيء يسمى شعبة، وهو تقسيم الصفحة. ولكن قبل أن نصل إلى تلك التفاصيل، دعونا نحاول للتصغير وننظر في صيغة أبسط من 1.0 الفيسبوك، إذا جاز التعبير. هنا هو مرحبا، العالم من صفحات الويب. لديها هذا الإعلان DOCTYPE في أعلى جدا التي هي مختلفة قليلا من كل شيء آخر. أي شيء آخر نكتب في صفحة ويب سوف تبدأ مع جريئة. مرة أخرى، قصة واحدة: مرحبا، فاصلة، بدء إجراء هذا جريئة، ثم يحصل المطبوعة في العالم جريئة، وهذا يعني إيقاف الطباعة في هذه جريئة. اسمحوا لي أن تمضي قدما وحفظ الملف الخاص بي، والعودة إلى Chrome، أنا فقط تكبير حتى يمكننا أن نرى على نحو أفضل، وإعادة تحميل، وسوف ترى أن العالم الآن في جريئة. ويب هو كل شيء عن الارتباطات التشعبية، لذلك دعونا نمضي قدما ونفعل ذلك: موقعي المفضل هو، دعنا نقول، youtube.com. حفظ، إعادة تحميل. حسنا. هناك مشاكل الزوجين إلى جانب بشاعة الآن للموقع. 1، وأنا متأكد من أنني هاهنا هنا. وهذا ما فعلته. I ليس فقط ضرب أدخل، وأنا أيضا بادئة، وممارسة ما كنا عن أسلوب الوعظ، ولكن بلدي هو بجوار العالم. فلماذا هذا؟ المتصفحات تفعل إلا ما كنت اقول لهم القيام به. أنا لم أبلغ المتصفح، "خطوط استراحة هنا. إدراج الفقرة كسر هنا." وبالتالي فإن المتصفح، فإنه لا يهم إذا أنا ضربت العودة 30 مرة، فإنها ما تزال مستمرة لوضع حقي بجوار العالم. ما قلته حقا أن أفعله هنا هو أن تقول شيئا مثل
، إدراج فاصل أسطر. وفعلا، فاصل أسطر هو نوع من شيء غريب لأنك حقا لا يمكن بدء تشغيل خط آخر لنقل، ثم القيام شيء، ووقف ثم الانتقال إلى سطر جديد. انها نوع من عملية الذرية. إما أن تفعل ذلك أو لم تقم. ضرب لكم أدخل أو لم تقم. ذلك هو ر قليلا من علامة مختلفة، وذلك ولست بحاجة لفرز كل من فتح وإغلاقه في كل مرة. بناء الجملة من أجل أن هو هذا. من الناحية الفنية، هل يمكن أن تفعل شيئا من هذا القبيل في بعض الإصدارات من HTML، ولكن هذا هو مجرد غبي لأنه لا يوجد أي سبب لبدء ووقف شيئا إذا يمكنك القيام بدلا من ذلك في كل مرة. ندرك أن HTML5 لا تتطلب هذه القطع بدقة، لذلك سوف نرى الكتب المدرسية والموارد على الانترنت ان لم يكن لديك، ولكن لحسن التدبير دعونا ممارسة التماثل التي شهدناها حتى الآن. وهذا يعني أن قيمة البطاقة هي كل تفتح وتغلق. لذلك اسمحوا لي الآن حفظ الملف الخاص بي، والعودة هنا. حسنا، لذلك فمن بدأت تبدو أفضل، ما عدا ويب أعرفه هو نوع من نقر، وبعد يوتيوب هنا لا يبدو أن تؤدي إلى أي شيء. ذلك لأن على الرغم من أنه يبدو وكأنه رابط، والمتصفح لا يعرف أن في حد ذاتها، لذلك يجب أن تخبر المتصفح أن هذا هو الرابط. وطريقة للقيام بذلك هو استخدام علامة ارتساء: <أ href كمرجع فرط، وهي طريقة للقول المدرسة القديمة وصلة، = "http://www.youtube.com"> واسمحوا لي أن نقل هذا إلى سطر جديد فقط حتى انها قليلا أكثر قابلية للقراءة، وسوف يتقلص حجم الخط. أنا فعلت حتى الآن؟ هناك رقم سيكون هذا الانقسام. هذه العلامة، علامة مرساة، وبالفعل يأخذ سمة، الذي يعدل سلوكه، وقيمة هذه السمة على ما يبدو URL لموقع YouTube. ولكن لاحظت الانقسام هو أنه لمجرد أن هذا هو URL وأنت تسير ل، هذا لا يعني أن يجب أن يكون الكلمة التي كنت تحتها، وجعل وجود صلة. بدلا من ذلك، يمكن أن يكون شيئا مثل هذا. لذلك أود أن أقول هذه الكلمة التوقف عن ارتباط تشعبي باستخدام علامة ارتساء إغلاق. لاحظت أنا لا أفعل هذا. 1، وهذا سيكون مجرد مضيعة للوقت الجميع وانها ليست ضرورية. لإغلاق علامة، أذكر لكم فقط اسم العلامة مرة أخرى. كنت لا تذكر أي من الصفات. لذلك دعونا حفظ هذه، والعودة. حسنا، فويلا، والآن حان الأزرق وتشعبيا. إذا كنت فوق ذلك، وأنا فعلا الذهاب الى يوتيوب. ذلك على الرغم من صفحات الويب الخاصة بي ليست على شبكة الإنترنت، الا انه على الاقل HTML، وإذا تركنا الإنترنت اللحاق بالركب، فإننا فعلا في نهاية المطاف هنا على موقع youtube.com. ويمكن أن أعود وهنا صفحتي على شبكة الإنترنت. ولكن تلاحظ هذا. إذا كنت قد حصلت من أي وقت مضى البريد المزعج أو هجوم التصيد، الآن لديك القدرة بعد خمس دقائق فقط لتفعل الشيء نفسه. يمكننا أن نذهب هنا وتفعل شيئا مثل www.badguy.com أو أيا كان الموقع هو سطحية، وبعد ذلك يمكنك القول تحقق من حسابك باي بال. [ضحك] والآن هذا هو الذهاب الى الذهاب الى badguy.com، والتي أنا لا أذهب إلى الضغط على لأنني ليس لدي أي فكرة حيث أن يؤدي. [ضحك] ولكن لدينا الآن القدرة على فعلا في نهاية المطاف هناك. لذلك نحن حقا مجرد بداية لنقطة الصفر السطح. نحن لا البرمجة في حد ذاتها، ونحن نكتب لغة توصيف النص. ولكن بمجرد أن جولة خارج قاموسنا في HTML، سوف نقدم PHP، لغة البرمجة الفعلية وسوف تسمح لنا لتوليد HTML تلقائيا، توليد CSS تلقائيا، بحيث يمكننا أن نبدأ يوم الاربعاء لتنفيذ، ويقول، لدينا محرك البحث الخاصة بها وأكثر من ذلك. ولكن أكثر على ذلك في بضعة أيام. سنرى لك الحين. [CS50.TV]