1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [6 सप्ताह जारी रहेगा] 2 00:00:02,520 --> 00:00:04,160 [डेविड जे Malan] [हार्वर्ड विश्वविद्यालय] 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, हार्वर्ड 1 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 यह, उदाहरण के लिए, समस्या 0 सेट के लिए अग्रणी walkthrough Zamyla है. 15 00:00:50,040 --> 00:00:54,230 पर edx.org में प्रवेश, एक CS50x छात्र चीजों की तरह देखता है 16 00:00:54,230 --> 00:00:57,170 आप के लिए एक पाठ्यक्रम में देखने की उम्मीद करेंगे: सोमवार के लिए व्याख्यान 17 00:00:57,170 --> 00:01:01,650 बुधवार, विभिन्न शॉर्ट्स, समस्या सेट, walkthroughs, PDFs के लिए व्याख्यान. 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 के रूप में हम उन्हें बाहर रोल प्रोग्राम उपयोग एक एपीआई कहलाती, 22 00:01:15,840 --> 00:01:18,360 गूगल से या एप्लीकेशन प्रोग्रामिंग इंटरफेस, 23 00:01:18,360 --> 00:01:21,360 कि हमें इन अन्य भाषाओं के लिए अंग्रेजी कन्वर्ट करने के लिए अनुमति देता है. 24 00:01:21,360 --> 00:01:24,100 लेकिन कुछ सौ से अधिक स्वयंसेवकों की अद्भुत भावना के लिए धन्यवाद, 25 00:01:24,100 --> 00:01:26,940 इंटरनेट पर यादृच्छिक लोगों को जो कृपया शामिल करने के लिए पेशकश की है 26 00:01:26,940 --> 00:01:30,180 इस परियोजना में, हम धीरे - धीरे उन अनुवादों की गुणवत्ता में सुधार हो जाएगा 27 00:01:30,180 --> 00:01:35,790 मनुष्य गलतियों कि हमारे कंप्यूटर बना दिया है सही होने से. 28 00:01:35,790 --> 00:01:42,330 >> तो यह मुड़ता बाहर हम कुछ अधिक छात्रों ने सोमवार को था पता चलता है की तुलना में हम शुरू में उम्मीद थी. 29 00:01:42,330 --> 00:01:48,980 वास्तव में, अब CS50x 100.000 लोगों को घर पर साथ निम्नलिखित है. 30 00:01:48,980 --> 00:01:54,430 एहसास तो आप कंप्यूटर विज्ञान के क्षेत्र में इस पाठ्यक्रम बनाने के इस उद्घाटन वर्ग के सभी भाग 31 00:01:54,430 --> 00:01:57,370 आम तौर पर और अधिक शिक्षा, अधिक मोटे तौर पर, सुलभ. 32 00:01:57,370 --> 00:02:00,130 और वास्तविकता अब इन बड़े पैमाने पर ऑनलाइन पाठ्यक्रम में से कुछ के साथ है, 33 00:02:00,130 --> 00:02:04,070 वे सब ये बहुत उच्च संख्या के साथ शुरू करते हैं, के रूप में हम यहाँ किया है लगता है. 34 00:02:04,070 --> 00:02:08,759 लेकिन लक्ष्य, अंततः, CS50x के लिए सच है संभव के रूप में खत्म लाइन के रूप में कई लोगों के लिए. 35 00:02:08,759 --> 00:02:12,000 डिजाइन करके, CS50x यह पिछले सोमवार से की पेशकश की होने जा रहा है 36 00:02:12,000 --> 00:02:17,430 15 अप्रैल, 2013 के माध्यम से सभी तरह, तो यह है कि लोगों को जो स्कूल प्रतिबद्धताओं कहीं और है, 37 00:02:17,430 --> 00:02:20,990 काम, परिवार, अन्य संघर्ष और इस तरह, थोड़ा और अधिक लचीलापन है 38 00:02:20,990 --> 00:02:23,640 जो के साथ इस पाठ्यक्रम में गोता लगाने के लिए है, जो यह कहने के लिए पर्याप्त है, 39 00:02:23,640 --> 00:02:30,540 काफी ambitiously केवल अगर सिर्फ एक सामान्य सेमेस्टर के दौरान तीन महीने के पाठ्यक्रम से अधिक किया. 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 खत्म लाइन के लिए और उन्हें कंप्यूटर विज्ञान के इस newfound समझ दे 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 या तो उनके अंतिम या उनमें से परियोजना वीडियो की एक screencast हैलो लहराते 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 चर्चा, चर्चा की CS50 EDX संस्करण पर विशेष रूप में शामिल होने, 67 00:04:07,450 --> 00:04:10,140 जो आप में से कई के परिसर में उपयोग किया गया है, ऑनलाइन बुलेटिन बोर्ड, 68 00:04:10,140 --> 00:04:13,040 कि यूआरएल के लिए सिर करना, हमें पता है कि आप कौन हैं, 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 यदि आप एक डिजाइनर रहे हैं, टी शर्ट और sweatshirts के लिए डिजाइन प्रस्तुत 84 00:05:02,330 --> 00:05:06,100 और कुत्तों के लिए और छतरियों थोड़ा bandanas अब हम और पसंद है. 85 00:05:06,100 --> 00:05:09,370 और सब कुछ है तो प्रत्येक वर्ष के विजेताओं का प्रदर्शन कर रहे हैं तो 86 00:05:09,370 --> 00:05:12,700 store.cs50.net पर पाठ्यक्रम वेबसाइट पर. 87 00:05:12,700 --> 00:05:15,790 सब कुछ वहाँ कीमत पर बेचा जाता है, लेकिन वेबसाइट सिर्फ खुद रन 88 00:05:15,790 --> 00:05:18,330 और लोगों को रंगों और डिजाइनों है कि वे पसंद चुनने के लिए अनुमति देता है. 89 00:05:18,330 --> 00:05:20,420 तो मैंने सोचा कि हम पिछले साल के डिजाइन का कुछ हिस्सा था 90 00:05:20,420 --> 00:05:25,130 कि यह यहाँ एक के अलावा वेबसाइट पर थे, जो एक वार्षिक परंपरा है. 91 00:05:25,130 --> 00:05:29,410 प्रस्तुतियाँ के "हर दिन मैं Faultn Seg रहा हूँ" पिछले वर्ष की थी, 92 00:05:29,410 --> 00:05:32,290 जो अभी भी पूर्व छात्रों के लिए उपलब्ध है. 93 00:05:32,290 --> 00:05:35,820 हम इस एक था, "CS50, 1989 में स्थापना की." 94 00:05:35,820 --> 00:05:39,010 हमारे Bowdens में से एक, रोब, बहुत लोकप्रिय पिछले वर्ष की थी. 95 00:05:39,010 --> 00:05:43,480 "टीम Bowden जन्म हुआ था, इस डिजाइन, शीर्ष विक्रेताओं के बीच पेश किया गया था. 96 00:05:43,480 --> 00:05:49,040 के रूप में इस यहाँ एक था. कई लोगों को बिक्री लॉग के अनुसार "Bowden बुखार" था. 97 00:05:49,040 --> 00:05:52,650 एहसास है कि कि अब वहाँ अपने डिजाइन हो सकता है, इंटरनेट पर. 98 00:05:52,650 --> 00:05:57,510 इस पर अगले समस्या के बारे में अधिक जानकारी के लिए आने सेट है. 99 00:05:57,510 --> 00:06:00,330 >> एक और उपकरण: आप कुछ जोखिम लिया है और अब उम्मीद है कि 100 00:06:00,330 --> 00:06:02,350 GDB के साथ कुछ अनुभव हाथ पर, 101 00:06:02,350 --> 00:06:04,570 जो कोर्स की है, एक debugger और आप में हेरफेर करने की अनुमति देता है 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 हाँ? मुझे कुछ दे. [छात्र जवाब, unintelligible] 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 देना नहीं है आप करते हैं? हाँ? [छात्र जवाब, unintelligible] 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 [छात्र जवाब, unintelligible] 115 00:06:49,170 --> 00:06:52,080 बिल्कुल सही. आप breakpoints सेट कर सकते हैं, आप को तोड़ने के निष्पादन कह सकते हैं 116 00:06:52,080 --> 00:06:54,020 मुख्य समारोह या foo समारोह में. 117 00:06:54,020 --> 00:06:56,800 आप 123 लाइन पर तोड़ निष्पादन कह सकते हैं. 118 00:06:56,800 --> 00:06:58,950 और breakpoints एक बहुत शक्तिशाली तकनीक 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 कि अपने कोड थोड़ा और अधिक की तुलना में आप सफाई stylize करने की कोशिश करता है, मानव, किया हो सकता है. 128 00:07:27,500 --> 00:07:29,530 लेकिन यह है कि, भी, वास्तव में सिर्फ एक सौंदर्य बात है. 129 00:07:29,530 --> 00:07:34,110 लेकिन यह निकलता है वहाँ यह अन्य वेलग्रिंड नामक उपकरण है कि एक छोटे से अधिक उपयोग करने के लिए रहस्यमय है. 130 00:07:34,110 --> 00:07:36,860 इसका उत्पादन atrociously पहली नज़र में गुप्त है. 131 00:07:36,860 --> 00:07:39,420 लेकिन यह शानदार उपयोगी है, विशेष रूप से अब है कि हम कार्यकाल के भाग में हो 132 00:07:39,420 --> 00:07:43,080 जहां आप malloc और गतिशील स्मृति आवंटन का उपयोग शुरू कर रहे हैं. 133 00:07:43,080 --> 00:07:45,420 हालात वास्तव में, वास्तव में गलत जल्दी से जा सकते हैं. 134 00:07:45,420 --> 00:07:49,320 क्योंकि अगर आप अपनी स्मृति को मुक्त करने के लिए भूल जाते हैं, या आप कुछ NULL संकेतक भिन्नता, 135 00:07:49,320 --> 00:07:55,770 या आप कुछ कचरा संकेतक भिन्नता है, जो आम तौर पर परिणाम है कि लक्षण है? 136 00:07:55,770 --> 00:07:59,470 फॉल्ट. और तुम किलोबाइट्स या मेगाबाइट्स की कुछ संख्या के इस कोर फाइल 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 तो वेलग्रिंड आप इस तरह से चीजों को खोजने में मदद करता है. 142 00:08:14,100 --> 00:08:17,720 यह एक उपकरण है कि आप चलाने, GDB तरह, के बाद आप अपने कार्यक्रम को संकलित किया है, 143 00:08:17,720 --> 00:08:20,330 लेकिन बजाय सीधे अपने कार्यक्रम चलाने के लिए, आप चलाने के वेलग्रिंड 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 थोड़ी देर तो स्क्रीन के ऊपर सही वहाँ आप वेलग्रिंड-V देखेंगे. 147 00:08:30,410 --> 00:08:35,350 "V" लगभग सार्वभौमिक वाचाल मतलब है कि जब आप एक Linux कंप्यूटर पर कार्यक्रमों का उपयोग कर रहे हैं. 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 Int * x: कि क्या करना है? 169 00:10:02,410 --> 00:10:04,940 ठीक है. यह एक सूचक की घोषणा है, और अब हम और भी अधिक तकनीकी हो. 170 00:10:04,940 --> 00:10:10,230 यह क्या करता है, बहुत concretely मतलब है, के लिए एक सूचक की घोषणा? किसी और ने? 171 00:10:10,230 --> 00:10:15,050 हाँ? [छात्र जवाब, unintelligible] बहुत दूर है. 172 00:10:15,050 --> 00:10:17,060 तो आप बराबर के चिह्न के दाएँ हाथ की ओर करने के लिए पढ़ रहे हैं. 173 00:10:17,060 --> 00:10:20,290 बस बाईं तरफ चलो int * x बस पर ध्यान केंद्रित है. 174 00:10:20,290 --> 00:10:24,700 यह एक सूचक "घोषित", लेकिन अब हम कि परिभाषा को गहरा गोता. 175 00:10:24,700 --> 00:10:28,330 कि concretely तकनीकी, क्या मतलब है? हाँ? 176 00:10:28,330 --> 00:10:31,940 [छात्र जवाब, unintelligible] 177 00:10:31,940 --> 00:10:35,090 ठीक है. यह स्मृति में एक पते को बचाने की तैयारी है. 178 00:10:35,090 --> 00:10:40,680 अच्छा है. और यह एक कदम आगे ले, यह एक चर, x, कि 32 बिट की घोषणा है. 179 00:10:40,680 --> 00:10:44,440 और मुझे पता है कि यह क्योंकि 32 बिट है? 180 00:10:44,440 --> 00:10:47,390 ऐसा नहीं है क्योंकि यह एक int है, क्योंकि यह इस मामले में एक सूचक है. 181 00:10:47,390 --> 00:10:49,650 संयोग है कि यह एक और एक int के साथ एक ही है, 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-bit संकेत हो सकता है, 185 00:11:01,850 --> 00:11:04,160 लेकिन उपकरण में, इन बातों को 32 बिट कर रहे हैं. 186 00:11:04,160 --> 00:11:08,380 तो हम उस पर मानकीकरण करेंगे. अधिक concretely, कहानी इस प्रकार के रूप में चला जाता है: 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 हम एक चर बुलाया एक्स है कि 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 यह ठीक है आगे बढ़ने के लिए दुनिया सरल और बस का कहना है एक एक्स नामक सूचक की घोषणा. 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 * (int) sizeof)," हाँ? 198 00:11:48,160 --> 00:11:52,350 [छात्र जवाब, unintelligible] 199 00:11:52,350 --> 00:11:58,250 अच्छा है. और मैं यह वहाँ ले जाऊँगा. यह दस integers के लिए स्मृति का एक हिस्सा आवंटित है. 200 00:11:58,250 --> 00:12:02,190 और अब चलो थोड़ा गहरा गोता, यह दस integers के लिए स्मृति का एक हिस्सा आवंटित है. 201 00:12:02,190 --> 00:12:05,390 Malloc क्या फिर लौट रहा है? 202 00:12:05,390 --> 00:12:10,390 कि हिस्सा के पते, या, अधिक concretely, उस हिस्सा की पहली बाइट के पते. 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 का उपयोग करते हैं? [छात्र जवाब, unintelligible] अच्छा है. 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 चरित्र, एक स्ट्रिंग के अंत में नुल,. 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 है कि दस integers स्टोर कर सकते हैं, और यह पहली बाइट के पते भंडार 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 जहां हम इस तरह कुछ करना होगा: पता एक्स ले लो, पर 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 तो यह एक्स में 10 स्थान पर 0 भंडारण है. 231 00:14:02,410 --> 00:14:06,120 यह क्यों बुरा है? हाँ? 232 00:14:06,120 --> 00:14:17,370 [छात्र जवाब, unintelligible] बिल्कुल सही. 233 00:14:17,370 --> 00:14:21,100 हम केवल दस ints आवंटित है, लेकिन हम 0 से गिनती जब सी में प्रोग्रामिंग, 234 00:14:21,100 --> 00:14:25,690 तो आप 0 1 2 3 4 5 6 7 8 9, लेकिन नहीं 10 के लिए उपयोग किया है. 235 00:14:25,690 --> 00:14:30,270 तो या तो कार्यक्रम seg गलती के लिए जा रहा है या यह नहीं है. 236 00:14:30,270 --> 00:14:32,900 लेकिन हम वास्तव में नहीं पता नहीं है, यह एक nondeterministic व्यवहार की तरह है. 237 00:14:32,900 --> 00:14:35,600 यह सच है कि हम भाग्यशाली मिल पर निर्भर करता है. 238 00:14:35,600 --> 00:14:40,650 अगर यह पता चला है कि ऑपरेटिंग सिस्टम का मन नहीं करता है अगर मैं उस अतिरिक्त बाइट का उपयोग करें, 239 00:14:40,650 --> 00:14:43,360 हालांकि यह मेरे लिए नहीं दिया है, मेरे कार्यक्रम दुर्घटना नहीं हो सकता है. 240 00:14:43,360 --> 00:14:46,780 यह कच्चा है, यह छोटी गाड़ी है, लेकिन आपको लगता है कि लक्षण नहीं देख सकता है, 241 00:14:46,780 --> 00:14:48,960 या आप इसे एक समय में केवल एक बार देख सकते हैं. 242 00:14:48,960 --> 00:14:51,230 लेकिन वास्तविकता यह है कि बग वास्तव में है, वहाँ. 243 00:14:51,230 --> 00:14:54,320 और यह वास्तव में समस्याग्रस्त है अगर आप एक प्रोग्राम है कि आप सही होना चाहता हूँ लिखा है, 244 00:14:54,320 --> 00:14:58,840 कि आप इस कार्यक्रम को बेच दिया है कि लोगों का उपयोग कर रहे हैं कि हर बार एक समय में दुर्घटनाओं 245 00:14:58,840 --> 00:15:02,450 क्योंकि, ज़ाहिर है, यह अच्छा नहीं है. वास्तव में, यदि आप एक Android फोन या एक iPhone है 246 00:15:02,450 --> 00:15:05,550 और आप इन दिनों क्षुधा डाउनलोड, अगर तुम कभी एक app बस छोड़ दिया, 247 00:15:05,550 --> 00:15:10,040 अचानक वह गायब हो जाता है, कि लगभग हमेशा स्मृति से संबंधित कुछ मुद्दे का परिणाम है, 248 00:15:10,040 --> 00:15:12,830 जिससे प्रोग्रामर बँधा हुआ है और dereferenced एक सूचक 249 00:15:12,830 --> 00:15:18,670 कि वह या वह नहीं होना चाहिए, और IOS या Android के परिणाम सिर्फ कार्यक्रम पूरी तरह मार रहा है 250 00:15:18,670 --> 00:15:23,080 बजाय जोखिम अपरिभाषित व्यवहार या सुरक्षा समझौते के कुछ तरह से. 251 00:15:23,080 --> 00:15:25,950 >> इस एक के अलावा इस कार्यक्रम में एक अन्य बग है. 252 00:15:25,950 --> 00:15:30,180 और क्या मैं इस कार्यक्रम में बँधा हुआ है? 253 00:15:30,180 --> 00:15:32,740 मैं अभ्यास नहीं है कि मैं क्या उपदेश है. हाँ? 254 00:15:32,740 --> 00:15:34,760 [छात्र जवाब, unintelligible] अच्छा है. 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 और यह भी मुश्किल है, और यही कारण है कि वेलग्रिंड तरह एक उपकरण मौजूद है. 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 >> तो चलो वेलग्रिंड-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 प्रिय भगवान. यह अपने उत्पादन है, और यह है कि मैं क्या पहले के लिए alluded. 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 मैं किसी तरह की एक सारांश, "प्रयोग में बाहर निकलने पर: 1 ब्लॉक में 40 बाइट्स" 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 [छात्र जवाब, unintelligible] परफेक्ट. हाँ, बिल्कुल. 293 00:17:59,520 --> 00:18:03,540 वहाँ दस integers थे, और उन में से प्रत्येक 4, या 32 बिट के आकार है, 294 00:18:03,540 --> 00:18:08,300 तो मैं ठीक 40 बाइट्स खो दिया है क्योंकि, जैसा कि आप का प्रस्ताव, मैं मुक्त नहीं बुलाया है. 295 00:18:08,300 --> 00:18:13,460 यह एक बग है, और अब चलो थोड़ा आगे लग रही है और यह अगले देख, 296 00:18:13,460 --> 00:18:16,900 "अवैध 4 आकार के लिखने के लिए." अब यह क्या है? 297 00:18:16,900 --> 00:18:21,150 इस पते का क्या आधार संकेतन व्यक्त किया है, जाहिरा तौर पर? 298 00:18:21,150 --> 00:18:23,640 यह षोडश आधारी है, और किसी भी समय आप एक संख्या 0x से शुरू, 299 00:18:23,640 --> 00:18:29,410 यह षोडश आधारी का मतलब है, जो हम मुझे लगता है, सवालों के pset 0 अनुभाग में जिस तरह से वापस किया था, 300 00:18:29,410 --> 00:18:34,090 जो सिर्फ एक warmup व्यायाम करने के लिए किया गया, द्विआधारी हेक्स दशमलव बदलने और इतना आगे. 301 00:18:34,090 --> 00:18:39,220 हेक्साडेसिमल, मानव सम्मेलन द्वारा, आम तौर पर करने के लिए संकेत का प्रतिनिधित्व करने के लिए इस्तेमाल किया जाता है 302 00:18:39,220 --> 00:18:41,570 या, और अधिक सामान्यतः पते,. यह सिर्फ एक सम्मेलन है, 303 00:18:41,570 --> 00:18:45,340 क्योंकि यह थोड़ा आसान है पढ़ने के लिए, यह एक छोटे से अधिक दशमलव की तरह कुछ की तुलना में कॉम्पैक्ट है, 304 00:18:45,340 --> 00:18:47,720 और बाइनरी बेकार है लिए सबसे मनुष्य का उपयोग करने के लिए. 305 00:18:47,720 --> 00:18:50,840 तो अब इसका क्या मतलब है? खैर, यह लगता है कि वहाँ एक अवैध लिखने 306 00:18:50,840 --> 00:18:54,480 memory.c के 21 लाइन पर 4 आकार के. 307 00:18:54,480 --> 00:18:59,180 तो चलो 21 लाइन के लिए वापस जाना है, और वास्तव में, यहाँ कि अवैध लिखना. 308 00:18:59,180 --> 00:19:02,640 तो वेलग्रिंड के लिए पूरी तरह से अपने हाथ पकड़ और मुझे बताओ कि ठीक है क्या नहीं जा रहा है, 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 के रूप में आप ने कहा, मैं [9] [10] के बजाय कर रहा हूँ ज़्यादा से ज़्यादा 312 00:19:13,960 --> 00:19:16,660 या [0] या बीच में कुछ. 313 00:19:16,660 --> 00:19:19,690 वेलग्रिंड के साथ, किसी भी समय आप अब एक कार्यक्रम लिख रहे हैं का एहसास 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 लेकिन बहुत आसानी से कॉपी और चिपकाया वेलग्रिंड की कमान 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 तो एहसास है कि अपने Toolkit में एक नया उपकरण है. 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 हाँ? [छात्र जवाब, unintelligible] अच्छा है. 327 00:20:04,590 --> 00:20:06,530 Arrays स्मृति नहीं हो सकता है उन से कहा. 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 [छात्र जवाब, unintelligible] यह एक लंबा समय लग सकता है. 338 00:20:44,060 --> 00:20:49,260 वास्तव में, किसी भी समय आप malloc या realloc या calloc है, जो अभी तक एक और एक है बुला रहे हैं, 339 00:20:49,260 --> 00:20:52,470 किसी भी समय आप, कार्यक्रम, ऑपरेटिंग सिस्टम के लिए बात कर रहे हैं, 340 00:20:52,470 --> 00:20:54,310 आप कार्यक्रम धीमी गति से नीचे होते हैं. 341 00:20:54,310 --> 00:20:57,470 और अगर आप loops में बातें की इन प्रकार के कर रहे हैं, तो आप वास्तव में बातें धीमा कर रहे हैं नीचे. 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 तो यहाँ में pluses और minuses है. 349 00:21:24,130 --> 00:21:26,730 Pluses के एक अब है कि हम गतिशीलता है. 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 हाँ? [छात्र जवाब, unintelligible] अच्छा है. 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 कि केवल integers, जो 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 लेकिन फिर, यह कंप्यूटर विज्ञान के क्षेत्र में एक निरंतर tradeoff 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 [छात्र जवाब, unintelligible] 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 कंप्यूटर ही जानता है कि इस लिंक सूची 1 बुलाया पते पर शुरू होता है. 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 बंद की ओर इशारा करते हुए मंच कहीं, हम इसे हाथ होने के लिए बनाना चाहते हैं, अशक्त, 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 क्या होगा अगर हम तो 55 नंबर, इसके लिए एक नोड के लिए malloc अंतरिक्ष के लिए चाहता था, 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 और ओह एहसास, यह रिक्त है. तो क्या सूचक हेरफेर करने के लिए किया जाना चाहिए? 392 00:23:34,480 --> 00:23:37,980 व्यक्ति जो अंत पर था, 34 नंबर की जरूरत है उसके बाएं हाथ उठाया 393 00:23:37,980 --> 00:23:46,220 55 में बात करने के लिए, 55 को उनके बाएँ हाथ नीचे की ओर इशारा करते हुए नए रिक्त टर्मिनेटर की जरूरत है. हो गया. 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 मैं जीएडिट खोलने के लिए, हूँ और मुझे दो फ़ाइलों 1 खोल. 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 एक नोड दोनों एक n बुलाया int और एक सूचक है कि बस अंक अगले सूची में अगले बात करने के लिए बुलाया है. 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 आप हेडर फाइल में 'कार्यों implementations मत डालो. 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 और नोटिस कि मेरे लिंक सूची अनिवार्य रूप से एक ही सूचक है कि शुरू में नल है के रूप में घोषित किया जाता है. 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 लेकिन मैं एक को नष्ट समारोह, एक समारोह मिल, एक डालने समारोह और एक traverse समारोह लिखा था. 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 उस मामले में, हम एक int आवंटन रहे थे, इस समय हम एक नोड का आवंटन कर रहे हैं. 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 और क्यों मैं 120 लाइन में नल के लिए जाँच कर रहा हूँ? 460 00:27:33,340 --> 00:27:37,530 119 पंक्ति में क्या गलत हो सकता है? हाँ? 461 00:27:37,530 --> 00:27:40,530 [छात्र जवाब, unintelligible] 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 तो यह नल के लौटने से के रूप में ज्यादा संकेत है, और अगर मैं उस के लिए जाँच नहीं 465 00:27:50,640 --> 00:27:54,710 और मैं बस आँख बंद करके पते लौटे उपयोग करने के लिए आगे बढ़ना है, यह शून्य हो सकता है. 466 00:27:54,710 --> 00:27:58,400 यह कुछ अज्ञात मूल्य हो सकता है, एक अच्छी बात नहीं है, जब तक मैं - 467 00:27:58,400 --> 00:28:00,590 वास्तव में एक अज्ञात मूल्य नहीं होगा. यह शून्य हो सकता है तो, मैं नहीं चाहता 468 00:28:00,590 --> 00:28:02,550 को यह दुरुपयोग करने और इसे dereferencing जोखिम. 469 00:28:02,550 --> 00:28:07,410 अगर ऐसा होता है, मैं तो बस लौटने और हम जैसे मैं कोई स्मृति नहीं मिला सब पर नाटक करेंगे. 470 00:28:07,410 --> 00:28:12,270 >> अन्यथा, मैं बता उपयोगकर्ता मुझे सम्मिलित करने के लिए एक नंबर दे, मैं अपने पुराने दोस्त GetInt कहते हैं, 471 00:28:12,270 --> 00:28:15,530 और फिर इस नए सिंटैक्स हम सोमवार को पेश किया गया था. 472 00:28:15,530 --> 00:28:20,320 'Newptr n> पते का अर्थ है कि आप malloc द्वारा दिए गए थे 473 00:28:20,320 --> 00:28:23,490 जो एक नया नोड वस्तु की पहली बाइट का प्रतिनिधित्व करता है, 474 00:28:23,490 --> 00:28:26,860 और फिर n क्षेत्र कहा जाता है. 475 00:28:26,860 --> 00:28:35,270 एक छोटी मामूली बातों प्रश्न: यह क्या गुप्त कोड के अधिक लाइन के बराबर है? 476 00:28:35,270 --> 00:28:38,110 और मैं यह कैसे लिखा जा सकता है? एक चाकू ले जाना चाहते हैं? 477 00:28:38,110 --> 00:28:41,480 [छात्र जवाब, unintelligible] 478 00:28:41,480 --> 00:28:44,870 अच्छा है. N का उपयोग करना है, लेकिन यह काफी के रूप में इस रूप में आसान नहीं है. 479 00:28:44,870 --> 00:28:47,090 क्या मैं पहले की जरूरत के लिए करते हो? [छात्र जवाब, unintelligible] 480 00:28:47,090 --> 00:28:52,730 अच्छा है. मैं * newptr.n करना की जरूरत है. 481 00:28:52,730 --> 00:28:55,610 तो यह कह रहा है नया सूचक स्पष्ट रूप से पता है. क्यों? 482 00:28:55,610 --> 00:28:59,520 क्योंकि यह malloc से लौट रहा था. * Newptr कह "वहाँ जाना है," 483 00:28:59,520 --> 00:29:02,970 और फिर एक बार तुम वहाँ हो, तो आप अधिक परिचित n का उपयोग कर सकते हैं, 484 00:29:02,970 --> 00:29:05,730 लेकिन यह सिर्फ एक छोटे बदसूरत लग रहा है, खासकर अगर हम इंसानों के लिए जा रहे हैं 485 00:29:05,730 --> 00:29:10,360 तीर के साथ हर समय संकेत आकर्षित, दुनिया इस तीर अंकन पर मानकीकृत है, 486 00:29:10,360 --> 00:29:12,320 जो वास्तव में एक ही बात करता है. 487 00:29:12,320 --> 00:29:16,070 अंकन> जब बाईं तरफ बात एक सूचक है - तो तुम ही उपयोग करें. 488 00:29:16,070 --> 00:29:18,790 अन्यथा, अगर यह एक वास्तविक struct है, n. का उपयोग करें. 489 00:29:18,790 --> 00:29:25,800 और फिर इस: मैं क्यों इनिशियलाइज़ newptr> अगले अशक्त करने के लिए? 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 संभवतः इस नोड में हो सकता है, इसलिए हम बेहतर यकीन है कि यह रिक्त है. 493 00:29:34,980 --> 00:29:38,460 और, सामान्य रूप में, अपने चर या अपने डेटा के सदस्यों और structs आरंभ 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 कि वैश्विक चर नल है, इसका मतलब है कि वहाँ कोई लिंक सूची है. 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 तो यह था जब Anita अभी तक था यहाँ अकेले खड़े, नाटक 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 मौजूदा 1 नोड में 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 यदि हम यहाँ एक सूचक 1 कहा जाता है के साथ हमारी कहानी शुरू, 514 00:30:56,010 --> 00:30:59,870 और शुरू में यह रिक्त है, और हम 9 नंबर डालने, 515 00:30:59,870 --> 00:31:02,510 9 संख्या स्पष्ट रूप से सूची के शुरू में है. 516 00:31:02,510 --> 00:31:07,400 तो चलो बहाना हम सिर्फ पता या संख्या 9 malloced और इसे यहाँ रखा है. 517 00:31:07,400 --> 00:31:13,170 यदि 1 9 डिफ़ॉल्ट रूप से है, हम पर चर्चा की 1 परिदृश्य बस चलो बिंदु इस आदमी को यहाँ का मतलब है, 518 00:31:13,170 --> 00:31:15,790 इस के रूप में रिक्त छोड़, अब हम संख्या 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 के लिए एक नोड आवंटित है, यह डिफ़ॉल्ट रूप से रिक्त है. 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 1 इस सूचक को अद्यतन करने के बजाय, सिर्फ इस एक के बजाय अद्यतन करें. 536 00:32:14,720 --> 00:32:17,720 तो हम कोड की एक पंक्ति है कि इस अशक्त चरित्र बारी करने के लिए जा रहा है की जरूरत है 537 00:32:17,720 --> 00:32:22,020 में एक वास्तविक सूचक है कि 9 नोड पर इशारा कर रहा है, 538 00:32:22,020 --> 00:32:27,970 और फिर हम सुरक्षित रूप से 1 को बदलने के लिए इस आदमी को यहाँ बात कर सकते हैं. 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> अगले कहते हैं, इसका मतलब है कि struct करने के लिए जाना 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 मूल्य है कि पहली बार में था, मूल्य 1 में क्या था? 551 00:33:17,280 --> 00:33:21,930 पहले इस नोड पर इशारा कर रहा था, तो इसका मतलब है कि यह अब इस नोड पर बात करनी चाहिए. 552 00:33:21,930 --> 00:33:25,660 दूसरे शब्दों में, क्या हालांकि मेरी लिखावट के साथ एक हास्यास्पद गड़बड़ लग रहा है, 553 00:33:25,660 --> 00:33:28,620 बस के चारों ओर इन तीर हिल के एक साधारण विचार क्या है 554 00:33:28,620 --> 00:33:31,560 सिर्फ इस एक लाइनर के साथ कोड के लिए अनुवाद. 555 00:33:31,560 --> 00:33:38,110 स्टोर क्या अगले क्षेत्र में पहली बार में है और फिर अद्यतन 1 वास्तव में क्या है. 556 00:33:38,110 --> 00:33:40,900 चलो इस में से कुछ के माध्यम से आगे और तेजी से आगे जाना है, 557 00:33:40,900 --> 00:33:44,220 और इस पूंछ प्रविष्टि पर केवल अब के लिए देखो. 558 00:33:44,220 --> 00:33:51,210 मान लीजिए कि मैं इस मुद्दे पर जहां मुझे लगता है कि कुछ नोड के अगले क्षेत्र रिक्त है करने के लिए. 559 00:33:51,210 --> 00:33:53,410 और कहानी, एक विस्तार में इस बिंदु पर है कि मैं खत्म glossing रहा हूँ 560 00:33:53,410 --> 00:33:58,170 यह है कि मैं एक और सूचक को पेश किया है 142 लाइन, पूर्ववर्ती सूचक में यहाँ. 561 00:33:58,170 --> 00:34:01,320 मूलतः, कहानी में इस बिंदु पर, एक बार सूची लंबी हो जाता है, 562 00:34:01,320 --> 00:34:04,800 मैं एक तरह से यह दो उंगलियों के साथ चलने की जरूरत है, क्योंकि अगर मैं बहुत दूर जाना है 563 00:34:04,800 --> 00:34:08,219 एक एकल लंबाई सूची में याद है, तो आप पीछे की ओर नहीं जा सकते. 564 00:34:08,219 --> 00:34:13,659 तो predptr के इस विचार मेरे बाएँ उंगली है, और newptr - newptr नहीं. 565 00:34:13,659 --> 00:34:17,199 एक और सूचक है कि यहाँ मेरी अन्य उंगली है, और मैं बस सूची चलने की तरह कर रहा हूँ. 566 00:34:17,199 --> 00:34:22,179 यही कारण है कि मौजूद है. लेकिन केवल एक सरल मामलों की विचार. 567 00:34:22,179 --> 00:34:26,620 यदि कि सूचक अगले क्षेत्र रिक्त है, तार्किक निहितार्थ क्या है? 568 00:34:26,620 --> 00:34:30,840 यदि आप इस सूची traversing कर रहे हैं और आप एक रिक्त सूचक मारा? 569 00:34:30,840 --> 00:34:35,780 आप सूची के अंत में कर रहे हैं, और इसलिए कोड तो यह एक अतिरिक्त तत्व संलग्न करने के लिए 570 00:34:35,780 --> 00:34:41,230 सहज ज्ञान युक्त की तरह कि नोड अगले जिसका सूचक रिक्त है ले जाएगा, 571 00:34:41,230 --> 00:34:46,120 तो यह वर्तमान में रिक्त है, और इसे बदलने के लिए, हालांकि, नए नोड के पते. 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 लेकिन बस intuitively, क्या होने की जरूरत है अगर आप यह पता लगाने चाहते हैं 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 तो आप 22 के लिए नए नोड 20 बिंदु की तरह कुछ करने की जरूरत है, 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 कि पाशन है, पाशन पाशन पाशन, और जैसे ही तोड़ने के रूप में आप नल सूचक मारा, 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 बड़ा हे और Ω और समय चल रहा है, समस्याओं को और अधिक तेजी से हल करने की कोशिश कर रहा है, 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 कि एक अन्य struct हम बुलाया छात्र पहले देखा है परिचय है, 621 00:37:34,640 --> 00:37:40,330 तो और क्या यह वास्तव में लिंक्ड सूची में भंडार एक छात्र की संरचना करने के लिए एक सूचक है 622 00:37:40,330 --> 00:37:44,520 बजाय एक साधारण सा पूर्णांक, n. 623 00:37:44,520 --> 00:37:46,900 तो पता है वहाँ वहाँ कोड है कि वास्तविक तार शामिल है, 624 00:37:46,900 --> 00:37:49,940 लेकिन अगर वास्तव में अब हाथ में लक्ष्य दक्षता समस्या का समाधान है, 625 00:37:49,940 --> 00:37:53,380 यह अच्छा नहीं होगा अगर हम एक ऐलिस वस्तु बुलाया दिया हो, 626 00:37:53,380 --> 00:37:56,020 हम उसे एक डेटा संरचना में सही स्थान में डाल करना चाहते हैं, 627 00:37:56,020 --> 00:37:58,860 ऐसा लगता है जैसे यह वास्तव में अच्छा हो सकता है सिर्फ ऐलिस रखा था, 628 00:37:58,860 --> 00:38:01,180 जिसका नाम पहले स्थान में एक साथ शुरू होता है. 629 00:38:01,180 --> 00:38:05,270 और बॉब, जिसका नाम बी के साथ दूसरे स्थान में शुरू होता है. 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 - ए रखा है? 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] चरित्र है, 0 संख्या में वापसी. 641 00:38:55,660 --> 00:39:01,130 अगर यह बी है, लौटने के 1. अगर यह सी, 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 हम कहाँ अनीता रखा है? उसका नाम, भी, एक पत्र के साथ शुरू होता है, 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 [छात्र जवाब, unintelligible] ठीक है, तो हम एक और आयाम हो सकता है. 652 00:39:37,410 --> 00:39:42,320 यह अच्छा है. तो हम चीजों को बनाने के बाहर 3 डी में कर सकते हैं जैसे हम के बारे में सोमवार को मौखिक रूप से बात की थी. 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 [छात्र जवाब, unintelligible] अच्छा है. तो हम हर किसी के नीचे स्थानांतरित कर सकता है, 658 00:39:58,610 --> 00:40:03,040 बॉब और ऐलिस, नीचे चार्ली nudges और फिर जैसे हम अनीता डाल दिया, जहां वह वास्तव में होना चाहता है. 659 00:40:03,040 --> 00:40:05,660 >> जाहिर है, अब, इस बात का एक पक्ष प्रभाव है. 660 00:40:05,660 --> 00:40:09,000 इस डेटा संरचना शायद उपयोगी नहीं है क्योंकि हम के लिए लोगों को डालने के एक बार करना चाहते हैं 661 00:40:09,000 --> 00:40:11,250 लेकिन क्योंकि हम जाँच करने के लिए यदि वे बाद में वहाँ हो चाहते हैं 662 00:40:11,250 --> 00:40:13,600 अगर हम सभी डेटा संरचना में नाम मुद्रित करना चाहते हैं. 663 00:40:13,600 --> 00:40:15,850 हम अंततः इस डेटा के साथ कुछ करने जा रहे हैं. 664 00:40:15,850 --> 00:40:20,810 तो अब हम की तरह ऐलिस, जो अब नहीं है, जहां वह होना चाहिए पर दबाव डाला है. 665 00:40:20,810 --> 00:40:23,880 न ही बॉब है, और न ही चार्ली है. 666 00:40:23,880 --> 00:40:26,060 तो शायद इस तरह एक अच्छा विचार नहीं है. 667 00:40:26,060 --> 00:40:28,830 लेकिन वास्तव में, यह एक विकल्प है. हम सभी को शिफ्ट करने के लिए नीचे कर सकता है, 668 00:40:28,830 --> 00:40:32,240 या बिल्ली, अनीता खेल के लिए देर से आया, क्यों हम सिर्फ अनीता नहीं डाल कर 669 00:40:32,240 --> 00:40:35,870 यहाँ नहीं, यहाँ नहीं, यहाँ नहीं, बस उसे सूची में एक छोटे से कम डाल. 670 00:40:35,870 --> 00:40:38,680 लेकिन फिर इस समस्या को फिर से उतरना शुरू होता है. 671 00:40:38,680 --> 00:40:41,630 आप ऐलिस खोजने के लिए सक्षम तुरन्त उसका पहला नाम के आधार पर हो सकता है,. 672 00:40:41,630 --> 00:40:44,320 और तुरन्त बॉब, और चार्ली. लेकिन फिर आप अनीता के लिए देखो, 673 00:40:44,320 --> 00:40:46,360 और आप देखते हैं, हम्म, ऐलिस के रास्ते में है. 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 यह हे (एन), है ना? 679 00:41:03,280 --> 00:41:06,280 क्योंकि सबसे ज्यादा मामले में, वहाँ ऐलिस, बॉब, चार्ली है. . . 680 00:41:06,280 --> 00:41:10,150 "वाई" नाम किसी के लिए सभी तरह से नीचे है, तो वहाँ केवल एक ही जगह है छोड़ दिया है. 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 कि आप इनमें से प्रकार collisions मिल जाएगा? दूसरे शब्दों में, 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 यह समान रूप से जेड के माध्यम से एक पर वितरित 700 00:42:12,380 --> 00:42:15,220 >> शायद हम सिर्फ भाग्यशाली हो और हम दो एक या दो बी के लिए नहीं जा रहे हैं 701 00:42:15,220 --> 00:42:17,640 बहुत अधिक संभावना के साथ के रूप में, लेकिन किसी ने कहा, 702 00:42:17,640 --> 00:42:20,730 अगर हम सामान्यीकृत इस समस्या नहीं है और 0 से 25 703 00:42:20,730 --> 00:42:26,060 लेकिन, कहते हैं, के माध्यम से 0 364 या 65, अक्सर एक ठेठ वर्ष में दिनों की संख्या, 704 00:42:26,060 --> 00:42:31,170 , और सवाल पूछा, "संभावना है कि इस कमरे में हम दोनों एक ही जन्मदिन है क्या है?" 705 00:42:31,170 --> 00:42:34,600 यह दूसरा रास्ता रखो, क्या संभावना है कि हम दोनों के एक साथ शुरू नाम है? 706 00:42:34,600 --> 00:42:37,190 सवाल की तरह ही है, लेकिन यह पता स्थान 707 00:42:37,190 --> 00:42:39,940 इस खोज को अंतरिक्ष, जन्मदिन के मामले में बड़ा है, 708 00:42:39,940 --> 00:42:42,820 क्योंकि हम इतने सारे वर्णमाला के अक्षरों से अधिक वर्ष में दिनों है. 709 00:42:42,820 --> 00:42:44,910 एक टक्कर की संभावना क्या है? 710 00:42:44,910 --> 00:42:48,410 खैर, हम इस के बाहर गणित विपरीत रास्ता ढूँढ़ बारे में सोच सकते हैं. 711 00:42:48,410 --> 00:42:50,580 क्या कोई टकराव की संभावना है? 712 00:42:50,580 --> 00:42:53,970 खैर, यह अभिव्यक्ति का कहना है कि क्या संभावना है 713 00:42:53,970 --> 00:42:58,770 अगर वहाँ सिर्फ इस कमरे में एक व्यक्ति, कि वे एक अद्वितीय जन्मदिन है? 714 00:42:58,770 --> 00:43:01,190 यह 100% है. क्योंकि अगर कमरे में केवल एक ही व्यक्ति है, 715 00:43:01,190 --> 00:43:03,940 उसके या उसके जन्मदिन के 365 दिनों के किसी भी वर्ष के बाहर हो सकता है. 716 00:43:03,940 --> 00:43:08,650 तो 365/365 विकल्प मुझे 1 के एक मूल्य देता है. 717 00:43:08,650 --> 00:43:11,250 तो पल में प्रश्न में संभावना सिर्फ 1 है. 718 00:43:11,250 --> 00:43:13,270 लेकिन अगर वहाँ कमरे में एक दूसरे व्यक्ति है, 719 00:43:13,270 --> 00:43:16,490 संभावना है कि उनके जन्मदिन अलग है क्या है? 720 00:43:16,490 --> 00:43:20,680 364 केवल संभव दिनों, अनदेखा कर रहा है छलांग साल है, 721 00:43:20,680 --> 00:43:23,580 उनके जन्मदिन के लिए टकराने के लिए अन्य लोगों के साथ नहीं है. 722 00:43:23,580 --> 00:43:31,920 तो 364/365. यदि एक तीसरे व्यक्ति में आता है, यह 363/365 है, और बहुत आगे है. 723 00:43:31,920 --> 00:43:35,790 तो हम एक साथ इन fractions गुणा रखना है, जो छोटे और छोटे हो रहे हैं, 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 और यहाँ इस ग्राफिक एक्स अक्ष पर जन्मदिन की संख्या है, 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 आप collisions है करने के लिए जा रहे हैं. Hashing की इस धारणा तो, के रूप में यह कहा जाता है, 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 तो हम कैसे उन collisions संभाल कर सकते हैं? 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) में devolves. 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 हम प्रारंभिक indexes के लिए arrays का उपयोग 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-dimensional कर सकता है, 779 00:46:52,450 --> 00:46:57,190 लेकिन यह है कि एक भयानक स्थिति हो अगर जा रहा है एक 2 आयामी सरणी में पंक्तियों की 780 00:46:57,190 --> 00:47:01,280 काफी बड़े अतिरिक्त व्यक्ति जिसका नाम ए के साथ शुरू होता है के लिए नहीं है 781 00:47:01,280 --> 00:47:04,200 भगवान ना करे हम एक विशाल संरचना 2-dimensional reallocate 782 00:47:04,200 --> 00:47:06,600 सिर्फ इसलिए कि वहाँ इतने सारे नाम पर लोगों को है, 783 00:47:06,600 --> 00:47:09,480 खासकर जब वहाँ बहुत कुछ लोगों Z कुछ नाम है. 784 00:47:09,480 --> 00:47:12,170 यह सिर्फ एक बहुत विरल डेटा संरचना होने जा रहा है. 785 00:47:12,170 --> 00:47:15,400 तो यह किसी भी तरह से सही नहीं है, लेकिन अब हम कम से कम करने की क्षमता है 786 00:47:15,400 --> 00:47:19,090 तुरन्त जहां ऐलिस या अनीता अंतर्गत आता है, 787 00:47:19,090 --> 00:47:21,090 ऊर्ध्वाधर अक्ष के मामले में कम से कम, 788 00:47:21,090 --> 00:47:25,850 और फिर हम सिर्फ तय करना है जहाँ अनीता या ऐलिस इस लिंक की गई सूची में डाल करने के लिए है. 789 00:47:25,850 --> 00:47:32,480 अगर हम बातें छँटाई के बारे में परवाह नहीं है, कैसे जल्दी से हम इस तरह एक संरचना में ऐलिस डालने के सकता है? 790 00:47:32,480 --> 00:47:35,370 यह लगातार समय है. हम [0] में सूचकांक, और अगर वहाँ कोई नहीं है, 791 00:47:35,370 --> 00:47:37,550 ऐलिस कि लिंक की गई सूची के शुरू में चला जाता है. 792 00:47:37,550 --> 00:47:40,000 लेकिन यह है कि एक बड़ा सौदा नहीं है. क्योंकि अगर अनीता फिर साथ आता है 793 00:47:40,000 --> 00:47:42,160 कदम से कुछ नंबर बाद में, जहां अनीता हैं करता है? 794 00:47:42,160 --> 00:47:45,140 खैर, [0]. OOP. ऐलिस कि लिंक सूची में पहले से ही है. 795 00:47:45,140 --> 00:47:47,760 >> लेकिन अगर हम इन नामों छँटाई के बारे में परवाह नहीं है, 796 00:47:47,760 --> 00:47:53,580 हम सिर्फ ऐलिस से अधिक है, डालने अनीता स्थानांतरित कर सकते हैं, लेकिन यह भी है कि लगातार समय है. 797 00:47:53,580 --> 00:47:57,010 यहां तक ​​कि अगर वहाँ एलिस और एडम और इन सभी अन्य नामों एक है, 798 00:47:57,010 --> 00:47:59,410 यह वास्तव में उन्हें शारीरिक रूप से नहीं जा रहा है. क्यों? 799 00:47:59,410 --> 00:48:04,090 क्योंकि हम सिर्फ लिंक सूची है, कौन जानता है यहाँ इन नोड्स वैसे भी कर रहे थे? 800 00:48:04,090 --> 00:48:06,550 सब तुम्हें क्या करना है है रोटी के टुकड़ों चाल. 801 00:48:06,550 --> 00:48:10,930 चारों ओर तीर ले जाते हैं, आप शारीरिक रूप से किसी भी डेटा चारों ओर ले जाने के लिए नहीं है. 802 00:48:10,930 --> 00:48:14,610 तो हम अनीता सम्मिलित करते हैं, तो उस मामले में तुरन्त. लगातार समय. 803 00:48:14,610 --> 00:48:20,250 तो हम लगातार समय देखने, और अनीता की तरह किसी की लगातार समय प्रविष्टि है. 804 00:48:20,250 --> 00:48:22,740 लेकिन दुनिया oversimplifying की तरह. 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 [छात्र जवाब, unintelligible] 809 00:48:37,850 --> 00:48:40,950 बिल्कुल सही. ऐलिस पहले लिंक की गई सूची में लोगों की संख्या. 810 00:48:40,950 --> 00:48:45,420 तो यह काफी सही नहीं है, क्योंकि हमारे डेटा संरचना, फिर से, इस ऊर्ध्वाधर पहुँच गया है 811 00:48:45,420 --> 00:48:50,240 और फिर इसे जुड़े इन फांसी सूची है - वास्तव में, यह एक सरणी एक आकर्षित नहीं करते हैं. 812 00:48:50,240 --> 00:48:56,020 यह इन लिंक सूचियों में से एक है से लटका है कि इस तरह एक छोटे से कुछ दिखता है. 813 00:48:56,020 --> 00:48:59,110 लेकिन समस्या यह है अगर एलिस और एडम और इन सभी अन्य एक नामों 814 00:48:59,110 --> 00:49:01,720 वहाँ ऊपर और अधिक से अधिक समाप्त करने के लिए, 815 00:49:01,720 --> 00:49:04,810 लग रहा है किसी को अंत कदम का एक गुच्छा ले जा सकता है, 816 00:49:04,810 --> 00:49:06,670 bcause आप लिंक सूची पार है, 817 00:49:06,670 --> 00:49:08,090 जो एक रेखीय ऑपरेशन है. 818 00:49:08,090 --> 00:49:14,270 तो सच में, तो, प्रविष्टि समय अंततः हे (एन), जहाँ n सूची में तत्वों की संख्या है. 819 00:49:14,270 --> 00:49:21,780 द्वारा विभाजित, मनमाने ढंग से यह मीटर है, जहां लिंक सूचियों की संख्या है फोन 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 और हम कुल लोगों को, और मीटर के कुल जंजीरों n है 825 00:49:37,350 --> 00:49:40,630 हमारे पास उपलब्ध है, तो इन जंजीरों में से प्रत्येक की लंबाई 826 00:49:40,630 --> 00:49:44,380 काफी बस कुल n चेन की संख्या से विभाजित होने जा रहा है. 827 00:49:44,380 --> 00:49:48,900 तो n / मीटर. लेकिन यहाँ है जहाँ हम सब गणितीय चालाक हो सकता है. 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 बहुत ज्यादा हे (एन) है. 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 हम कह रहा हूँ हे (एन ²). हे (एन), 2 x n ², n, 2 से विभाजित. . . ech. 837 00:50:20,640 --> 00:50:23,580 यह सिर्फ n ² है. लेकिन अब, सेमेस्टर के इस भाग में, 838 00:50:23,580 --> 00:50:25,560 हम वास्तविक दुनिया के बारे में फिर से बात शुरू कर सकते हैं. 839 00:50:25,560 --> 00:50:31,520 और n / मीटर पूरी तरह से सिर्फ अकेले 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 asymptotically और गणितीय, यह अभी भी सिर्फ रेखीय, 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 और knobs के एक सेमेस्टर में इस बिंदु पर बदल शुरू कर देंगे 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 यहां तक ​​कि अगर उन जंजीरों शुरू रिक्त हैं. 865 00:51:48,800 --> 00:51:54,860 क्या मैं डाल करना चाहते हैं कि अगर मैं स्टोर करने के लिए करना चाहते हैं "," बॉब "चार्ली" "एलिस,"? 866 00:51:54,860 --> 00:51:57,010 खैर, हम एक संरचना में उन चीजों को समाहित करने की आवश्यकता है 867 00:51:57,010 --> 00:52:00,530 क्योंकि हम ऐलिस बॉब के लिए बात करने के लिए चार्ली को इंगित करने के लिए, और बहुत आगे है. 868 00:52:00,530 --> 00:52:04,940 हम सिर्फ नाम अकेले नहीं हो सकता है, तो मैं एक नया नोड यहाँ बुलाया संरचना बना सकते हैं. 869 00:52:04,940 --> 00:52:08,310 >> एक वास्तविक नोड क्या है? इस नए लिंक की गई सूची में एक नोड क्या है? 870 00:52:08,310 --> 00:52:11,840 पहली बात, शब्द कहा जाता है, व्यक्ति के नाम के लिए है. 871 00:52:11,840 --> 00:52:14,340 लंबाई, शायद, एक मानव के नाम की अधिकतम लंबाई से संबंधित है, 872 00:52:14,340 --> 00:52:18,210 जो कुछ भी है, 20, 30, पागल कोने मामलों में 40 अक्षर 873 00:52:18,210 --> 00:52:22,680 और एक के लिए क्या है? यह सिर्फ अतिरिक्त रिक्त चरित्र, \ 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 रिक्त हो सकता है लेकिन करता है के लिए होना जरूरी नहीं है. 878 00:52:36,700 --> 00:52:40,110 इन हैश तालिका पर कोई सवाल? हाँ? 879 00:52:40,110 --> 00:52:46,190 [छात्र सवाल पूछ रही है, unintelligible] एक सरणी - अच्छा सवाल है. 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 जहां कुछ जड़ें, कुछ matriarch या कुलपति है, 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 आप एक सी में घोषित नोड है, और हो सकता है कि नोड के अंदर कम से कम दो तत्व हो सकता है. 912 00:54:35,290 --> 00:54:39,470 एक नंबर पर आप स्टोर करने के लिए करना चाहते हैं, और अन्य है - ठीक है, हम एक और अधिक की आवश्यकता है. 913 00:54:39,470 --> 00:54:41,540 अन्य अपने बच्चों को है. 914 00:54:41,540 --> 00:54:45,150 तो यहाँ एक और आंकड़ा संरचना है. इस समय, एक नोड एक संख्या के संचय के रूप में परिभाषित किया गया है n 915 00:54:45,150 --> 00:54:49,060 और फिर दो संकेत, बाईं बच्चे और सही बच्चे. 916 00:54:49,060 --> 00:54:52,100 और वे मनमाने ढंग से नहीं कर रहे हैं. इस पेड़ के बारे में दिलचस्प बात क्या है? 917 00:54:52,100 --> 00:55:00,550 >> हम कैसे करते हैं यह रखी है बाहर या कैसे पैट्रिक उसके वीडियो में बाहर रखी पैटर्न क्या है? 918 00:55:00,550 --> 00:55:02,790 यह किस तरह का है स्पष्ट है कि वहाँ कुछ छँटाई यहाँ पर जा रहा है, 919 00:55:02,790 --> 00:55:04,460 लेकिन सरल नियम क्या है? हाँ? 920 00:55:04,460 --> 00:55:08,350 [छात्र जवाब, unintelligible] 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 तो फिर, मैं आधे में पेड़ pruning हूँ. 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 और वास्तव में, इस तरह एक संरचना traversing - वूप्स. 941 00:56:19,420 --> 00:56:22,870 इस तरह एक संरचना Traversing, जहां यह केवल "इस तरह से जाना या उस रास्ते पर चलना है," 942 00:56:22,870 --> 00:56:26,870 कि सभी कोड का मतलब है कि पहली बार में तुला अपने मन जब यह अनुभाग में लागू 943 00:56:26,870 --> 00:56:31,270 या के माध्यम से इसे घर पर चलने, द्विआधारी खोज के लिए, या चलना recursion का उपयोग, 944 00:56:31,270 --> 00:56:35,060 यह गर्दन में दर्द है. बीच तत्व का पता लगाएं, तो अपने गोलाई या नीचे. 945 00:56:35,060 --> 00:56:39,230 >> वहाँ इस के लिए एक सौंदर्य है क्योंकि अब हम recursion फिर से उपयोग कर सकते हैं, 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 यह पूरी तरह से recursion के लिए अनुकूल है. 951 00:56:56,710 --> 00:57:00,920 तो भले ही अतीत में हम काफी कुछ मनमाना उदाहरण recursion शामिल किया है 952 00:57:00,920 --> 00:57:03,430 कि पुनरावर्ती डेटा stuctures साथ जरूरत नहीं थी, 953 00:57:03,430 --> 00:57:07,820 विशेष रूप से पेड़, यह एक समस्या लेने के इस विचार का एक आदर्श आवेदन है, 954 00:57:07,820 --> 00:57:12,920 यह सिकुड़ते, और तब के एक ही प्रकार है, लेकिन छोटे कार्यक्रम, को हल. 955 00:57:12,920 --> 00:57:14,590 >> तो वहाँ एक डेटा संरचना है कि हम लागू कर सकते हैं. 956 00:57:14,590 --> 00:57:18,760 यह एक पहले गुप्त देखना नज़र में बनाया गया है, लेकिन यह एक आश्चर्यजनक है. 957 00:57:18,760 --> 00:57:25,090 तो यह एक डेटा संरचना एक trie, trie, जो शब्द पुनर्प्राप्ति से विरासत में मिली है बुलाया है, 958 00:57:25,090 --> 00:57:30,210 जो फिर से कोशिश वैल स्पष्ट नहीं है, लेकिन है कि दुनिया क्या इन बातों को कहते हैं. कोशिश करता है. T-r-i-ए. 959 00:57:30,210 --> 00:57:35,190 यह किसी प्रकार की एक वृक्ष संरचना है, लेकिन एक trie में नोड्स के प्रत्येक 960 00:57:35,190 --> 00:57:41,280 क्या होना प्रतीत होता है? और यह एक भ्रामक सा है क्योंकि यह संक्षिप्त की तरह है. 961 00:57:41,280 --> 00:57:45,960 लेकिन ऐसा लगता है इस trie में प्रत्येक नोड वास्तव में एक सरणी है. 962 00:57:45,960 --> 00:57:48,840 और भले ही इस चित्र के लेखक यह नहीं दिखाया गया है, 963 00:57:48,840 --> 00:57:54,130 इस मामले में, इस trie एक डेटा संरचना है जिसका उद्देश्य जीवन में करने के लिए शब्दों की दुकान है 964 00:57:54,130 --> 00:57:57,330 A-L-i-c - ए या बी ओ ख की तरह. 965 00:57:57,330 --> 00:58:02,480 और जिस तरह इस डेटा स्टोर एलिस और बॉब और चार्ली और अनीता और इतना आगे 966 00:58:02,480 --> 00:58:06,970 यह एक सरणी का उपयोग करता है जिससे एक trie में ऐलिस स्टोर, 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 वे केवल एम और पी टी से पता चला है, लेकिन इस मामले में, 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-x-डब्ल्यू ई - एल एल? 974 00:58:29,570 --> 00:58:36,990 वह या वह रूट नोड में शुरू कर दिया है, और चला गया [एम], तो लगभग 13, सरणी में 13 वें स्थान. 975 00:58:36,990 --> 00:58:40,750 वहाँ से फिर, वहाँ एक सूचक है. 976 00:58:40,750 --> 00:58:42,760 सूचक एक सरणी के लिए अग्रणी. 977 00:58:42,760 --> 00:58:47,880 वहाँ से लेखक एक स्थान पर उस सरणी में अनुक्रमित, के रूप में ऊपर छोड़ दिया पर वहाँ दर्शाया, 978 00:58:47,880 --> 00:58:52,250 और फिर वह या वह एक सरणी कि सूचक के बाद, 979 00:58:52,250 --> 00:58:55,460 और स्थान एक्स में सूचक के लिए चला गया 980 00:58:55,460 --> 00:58:59,840 फिर अगले सरणी स्थान डब्ल्यू, ई, एल, एल, और बहुत आगे है, 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 एक trie में एक नोड अधिक नोड्स के लिए संकेत की एक सरणी शामिल हैं. 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 आप एम. नहीं लिख आप एक्स नहीं लिख रहे हैं कर रहे हैं 989 00:59:27,480 --> 00:59:30,240 आप सब कर रहे हैं संकेत के बाद है. 990 00:59:30,240 --> 00:59:33,360 सूचक है कि एम, तो सूचक है कि एक का प्रतिनिधित्व करता है का प्रतिनिधित्व करता है, 991 00:59:33,360 --> 00:59:36,310 तो सूचक है कि एक्स, तो डब्ल्यू, ई, एल, एल का प्रतिनिधित्व करता है, 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 >> तो क्या वास्तव में एक trie साथ भरा है और लेखक का प्रतिनिधित्व करने के लिए चुना 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 लेकिन शब्द foo, उदाहरण के लिए, 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 लेकिन इसके विपरीत, ट्यूरिंग, टी U-r-i-N-जी. फिर, मैं टी या यू या r या मैं या n या जी की दुकान नहीं था. 1003 01:00:22,460 --> 01:00:29,820 लेकिन मैं इस डेटा संरचना में दुकान नीचे इस नोड में यहाँ सही रास्ते से एक मूल्य - पेड़ में 1004 01:00:29,820 --> 01:00:33,030 सच is_word के इस बूलियन मान सेटिंग के द्वारा. 1005 01:00:33,030 --> 01:00:35,740 तो एक trie यह बहुत दिलचस्प मेटा संरचना की तरह है, 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 उन शब्दों की एक और वर्णानुक्रम खोज हे समय (एन) ले सकता है. 1013 01:01:00,250 --> 01:01:04,370 रैखिक समय. लेकिन यहाँ एक trie के मामले में, 1014 01:01:04,370 --> 01:01:09,210 एक शब्द को खोजने का समय चल रहा है क्या है? 1015 01:01:09,210 --> 01:01:17,390 यह पता सुंदरता बदल जाता है यहाँ यह है कि अगर आप पहले से ही इस शब्दकोश में 149,999 शब्द हैं, 1016 01:01:17,390 --> 01:01:20,170 के रूप में इस डेटा संरचना के साथ लागू किया, 1017 01:01:20,170 --> 01:01:25,560 इसे खोजने के लिए या एक और व्यक्ति सम्मिलित कि में ऐलिस एलिस की तरह करने में कितना समय ले करता है? 1018 01:01:25,560 --> 01:01:30,640 खैर, यह केवल 5 है, शायद अनुगामी चरित्र के लिए 6 चरणों में से एक है. 1019 01:01:30,640 --> 01:01:32,880 क्योंकि संरचना में अन्य नामों की उपस्थिति 1020 01:01:32,880 --> 01:01:35,340 ऐलिस डालने के रास्ते में नहीं मिलता है. 1021 01:01:35,340 --> 01:01:39,640 इसके अलावा, ऐलिस खोजने के एक बार वहाँ इस शब्दकोश में 150,000 शब्द हैं 1022 01:01:39,640 --> 01:01:41,960 सब पर मिल ऐलिस ढूँढने के लिए अपने रास्ते में नहीं है, 1023 01:01:41,960 --> 01:01:46,880 क्योंकि ऐलिस है. . . . . यहाँ है, क्योंकि मैं एक बूलियन मान पाया. 1024 01:01:46,880 --> 01:01:50,920 और अगर वहाँ कोई बूलियन सच है, तो ऐलिस है शब्दों के इस डेटा संरचना में नहीं है. 1025 01:01:50,920 --> 01:01:56,220 दूसरे शब्दों में, चीजों को खोजने और इस नए डालने में बातें की समय चल रहा है 1026 01:01:56,220 --> 01:02:01,920 trie का आंकड़ा संरचना की हे - यह n नहीं है. 1027 01:02:01,920 --> 01:02:05,730 क्योंकि 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 तो कश्मीर एक स्थिर है. होली ग्रेल तो हम अब मिल गया है लगता है 1031 01:02:17,940 --> 01:02:26,000 एक trie, आवेषण के लिए लगातार समय के विलोपन के लिए lookups के लिए, है. 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 यहाँ वर्तमान में यह सूचना नहीं है, कि इन बातों है कि arrays की तरह देखो, 1040 01:02:52,400 --> 01:02:55,400 वह पेड़, trie के बाकी के बाकी आकर्षित नहीं किया, 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 इस मामले में, इन व्यापक arrays रहे हैं. तो भले ही वे नहीं picutured रहे हैं, 1046 01:03:14,450 --> 01:03:18,190 इस राम का एक विशाल राशि लेता है. 1047 01:03:18,190 --> 01:03:20,670 जो ठीक हो सकता है, आधुनिक हार्डवेयर में especilly सकता है, 1048 01:03:20,670 --> 01:03:25,650 लेकिन कि tradeoff है. हम और अधिक स्थान खर्च करके कम समय मिलता है. 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 >> मानो या न मानो, रूप में बहुत मज़ा के रूप में सी कुछ समय के लिए किया गया है अब, 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 या अजगर या रूबी या जावा या सी # जैसी भाषाओं में कोड लिखने. 1066 01:04:25,910 --> 01:04:30,360 वास्तव में, जो कुछ भी अपनी पसंद की भाषा है, और HTML गतिशील पैदा. 1067 01:04:30,360 --> 01:04:32,960 सृजन सीएसएस कुछ गतिशील बुलाया. 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 इस सीएसएस यहाँ है. अगर मैं स्क्रॉल नीचे रखने के लिए हम कुछ रंग कोडित सामान मिल जाएगा. 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 लेकिन सभी इस झंझट से निश्चित पैटर्न, और repeatable पैटर्न इस प्रकार है, 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 आप गतिशीलता की एक पूरी गुच्छा दे, Facebook आपको देता है के लिए त्वरित स्थिति अद्यतन दिखाने, 1087 01:05:48,660 --> 01:05:51,430 चहचहाना का उपयोग करने के लिए आप tweets तुरन्त दिखा. 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 वह शांत फायरवॉल की एक दुनिया के लिए आया था, routers uncaring, 1097 01:06:41,330 --> 01:06:45,690 और अभी तक मौत से भी बदतर खतरों. 1098 01:06:45,690 --> 01:06:55,400 वह तेजी से है. वह मजबूत है. वह टीसीपी / आईपी है, और वह अपना पता मिल गया है. 1099 01:06:55,400 --> 01:06:59,250 नेट के योद्धाओं. 1100 01:06:59,250 --> 01:07:05,290 [Malan] अगले हफ्ते, तो. इंटरनेट. वेब प्रोग्रामिंग. यह CS50 है. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]