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, ერთი ჰარვარდის პირველი კურსები ჩართული EDX ინიციატივა 6 00:00:17,970 --> 00:00:20,590 მართლაც დებიუტი გასულ ორშაბათს. 7 00:00:20,590 --> 00:00:23,460 თუ გსურთ მიიღოთ glimpse თუ რა სხვები ინტერნეტში 8 00:00:23,460 --> 00:00:27,180 ახლა შემდეგ ერთად, შეგიძლიათ ხელმძღვანელს x.cs50.net. 9 00:00:27,180 --> 00:00:30,350 ეს ხელს გადამისამართება თქვენ შესაბამისი ადგილი edx.org, 10 00:00:30,350 --> 00:00:34,160 რაც იყო, სადაც ეს და სხვა საგნები MIT და Berkeley ცხოვრობს. 11 00:00:34,160 --> 00:00:38,140 თქვენ უნდა მოაწეროს up for ანგარიშის, თქვენ იპოვით რომ მასალა არის დიდწილად იმავე 12 00:00:38,140 --> 00:00:42,170 როგორც თქვენ მქონდა ამ სემესტრში, თუმცა რამდენიმე კვირის დაგვიანებულია, რადგან ჩვენ ყველაფერი მზად არის. 13 00:00:42,170 --> 00:00:46,930 მაგრამ რა სტუდენტების CS50x ახლა ვხედავთ არის ინტერფეისი საკმაოდ მოსწონს ეს. 14 00:00:46,930 --> 00:00:50,040 ეს, მაგალითად, არის Zamyla წამყვანი walkthrough პრობლემის კომპლექტი 0. 15 00:00:50,040 --> 00:00:54,230 Upon შესასვლელად, რათა 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 და მთელი bunch სხვა ენებზე რომ აუცილებლად არასრულყოფილი 21 00:01:12,810 --> 00:01:15,840 როგორც ჩვენ გააფართოვოს მათ პროგრამულად გამოყენებით რაღაც მოუწოდა API, 22 00:01:15,840 --> 00:01:18,360 ან განაცხადის პროგრამირების ინტერფეისი, საწყისი Google 23 00:01:18,360 --> 00:01:21,360 რომ საშუალებას გვაძლევს კონვერტირება ინგლისური ეს სხვა ენებზე. 24 00:01:21,360 --> 00:01:24,100 მაგრამ წყალობით საოცარი სულისკვეთებით რამდენიმე ასეული-plus მოხალისეები, 25 00:01:24,100 --> 00:01:26,940 შემთხვევითი ადამიანი ინტერნეტში, რომლებმაც kindly შესთავაზა ჩაერთოს 26 00:01:26,940 --> 00:01:30,180 ამ პროექტში, ჩვენ თანდათანობით ხარისხის გაუმჯობესება იმ თარგმანი 27 00:01:30,180 --> 00:01:35,790 by მქონე ადამიანები შეასწოროს შეცდომები, ჩვენი კომპიუტერები გააკეთეს. 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 მართლაც მიიღოს როგორც ბევრი ადამიანი, რათა finish line რაც შეიძლება. 35 00:02:08,759 --> 00:02:12,000 By დიზაინი, 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 არ არის მხოლოდ მიიღოს როგორც ბევრი FOLKS 44 00:02:42,360 --> 00:02:45,720 to finish line და მივცეთ ამ 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 ეს პატარა რთული გავაკეთოთ, რომ პირი, FOLKS შემოსული, 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 სტუდენტები, თუმცა, მოდის საჭიროება კიდევ რამდენიმე CAS. 61 00:03:43,640 --> 00:03:47,590 იმის გათვალისწინებით, რომ თქვენ ბიჭები არიან Blazing ბილიკი აქ და აღების CS50 62 00:03:47,590 --> 00:03:51,630 რამდენიმე კვირით ადრე ეს მასალა გათავისუფლების to FOLKS on EDX, 63 00:03:51,630 --> 00:03:55,330 გააცნობიეროს ჩვენ გვიყვარს ჩართვა, როგორც ბევრი ჩვენი სტუდენტები შეძლებისდაგვარად ამ ინიციატივას, 64 00:03:55,330 --> 00:03:58,720 ორივე დროს სემესტრის ასევე ზამთარში და ამ მოდის გაზაფხულზე. 65 00:03:58,720 --> 00:04:01,620 ასე რომ, თუ გსურთ ჩაერთოს CS50x, 66 00:04:01,620 --> 00:04:07,450 განსაკუთრებით გაწევრიანების წელს CS50x საუბარი, EDX ვერსია CS50 საუბარი, 67 00:04:07,450 --> 00:04:10,140 რაც ბევრ თქვენგანს არ იყენებს შესახებ კამპუსზე, ონლაინ ფორუმი, 68 00:04:10,140 --> 00:04:13,040 გთხოვთ ხელმძღვანელს, რომ URL, მოდით იცის ვინ ხარ შენ, 69 00:04:13,040 --> 00:04:16,450 იმიტომ, რომ ჩვენ გვიყვარს მინდა შექმნას გუნდი სტუდენტები და პერსონალი და ფაკულტეტის alike 70 00:04:16,450 --> 00:04:19,630 on კამპუსში რომლებიც უბრალოდ თამაშობენ ერთად და ეხმარება გარეთ. 71 00:04:19,630 --> 00:04:21,720 და როცა ხედავენ კითხვას რომ ნაცნობი მათ 72 00:04:21,720 --> 00:04:25,320 გესმით სტუდენტი ანგარიშგების ზოგიერთი ხარვეზის სადღაც არსებობს ზოგიერთ ქვეყანაში ინტერნეტი, 73 00:04:25,320 --> 00:04:27,450 და რომ ბეჭდები ზარი რადგან თქვენც ჰქონდა, რომ იგივე საკითხის 74 00:04:27,450 --> 00:04:32,620 თქვენს D-დარბაზში ცოტა ხნის წინ, იმედია მაშინ chime და გაუზიაროთ თქვენი საკუთარი გამოცდილება. 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 გამოყენებით Photoshop, ან რასაც ინსტრუმენტი არჩევანის გსურთ გამოიყენოთ 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 on რა თქმა ნახვა საათზე store.cs50.net. 87 00:05:12,700 --> 00:05:15,790 ყველაფერი გაიყიდა ღირებულება არსებობს, მაგრამ ნახვა მხოლოდ ეშვება თავისთავად 88 00:05:15,790 --> 00:05:18,330 და საშუალებას აძლევს ხალხს აირჩიოს ფერის და დიზაინის, რომ მათ ამის სურვილი აქვთ. 89 00:05:18,330 --> 00:05:20,420 ასე მეგონა ჩვენ უბრალოდ იზიარებს ზოგიერთი გასული წლის დიზაინის 90 00:05:20,420 --> 00:05:25,130 რომ იყვნენ ნახვა გარდა ამისა ერთი აქ, რაც წლიური ტრადიცია. 91 00:05:25,130 --> 00:05:29,410 "ყოველ დღე მე seg Faultn" იყო წარმოდგენილი გასული წლის 92 00:05:29,410 --> 00:05:32,290 რომელიც ჯერ კიდევ არ არის შესაძლებელი იქ კურსდამთავრებულები. 93 00:05:32,290 --> 00:05:35,820 ჩვენ გვქონდა ამ ერთი, "CS50 შექმნილი 1989 წელს." 94 00:05:35,820 --> 00:05:39,010 ერთი ჩვენი Bowdens, რობ, იყო ძალიან პოპულარული შარშან. 95 00:05:39,010 --> 00:05:43,480 "გუნდი Bowden" დაიბადა, ამ დიზაინით იყო წარმოდგენილი, მათ შორის ყველაზე გამყიდველები. 96 00:05:43,480 --> 00:05:49,040 როგორც იყო ამ ერთი აქ. ბევრი ადამიანი ჰქონდა "Bowden ცხელება" მიხედვით გაყიდვების ჟურნალი. 97 00:05:49,040 --> 00:05:52,650 გააცნობიეროს, რომ შეიძლება ახლა იყოს თქვენი დიზაინი, up ინტერნეტში. 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 ჰო? მომეცი რამე. [სტუდენტური პასუხი, გაუგებარია] 105 00:06:15,030 --> 00:06:18,120 კარგი. ნაბიჯი შევიდა ფუნქცია, ასე რომ თქვენ არ უბრალოდ უნდა აკრიფოთ აწარმოებს 106 00:06:18,120 --> 00:06:22,310 და აქვს პროგრამა დარტყმა მეშვეობით მთლიანობაში, დაბეჭდვისას რამ სტანდარტულ გამოსავალზე. 107 00:06:22,310 --> 00:06:25,190 უფრო მეტიც, თქვენ შეგიძლიათ დაიხევს მეშვეობით იგი ხაზს, ან აკრეფით შემდეგი 108 00:06:25,190 --> 00:06:30,300 წასვლა ხაზის მიერ ხაზს ან ნაბიჯი ჩაყვინთვის შევიდა ფუნქცია, როგორც წესი, ერთი, რომ თქვენ წერდა. 109 00:06:30,300 --> 00:06:35,240 რა ამჯამად GDB მოგცემთ გავაკეთოთ? ჰო? [სტუდენტური პასუხი, გაუგებარია] 110 00:06:35,240 --> 00:06:38,100 ამობეჭდვა ცვლადები. ასე რომ, თუ გსურთ პატარა introspection შიგნით თქვენი პროგრამა 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 რა შეგიძლიათ ერთად debugger მოსწონს GDB? 114 00:06:46,710 --> 00:06:49,170 [სტუდენტური პასუხი, გაუგებარია] 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 თქვენი კოდი ცოტა მეტი cleanly ვიდრე თქვენ, ადამიანური, შეიძლება გაკეთდეს. 128 00:07:27,500 --> 00:07:29,530 მაგრამ ეს, ძალიან, მართლაც მხოლოდ ესთეტიკური რამ. 129 00:07:29,530 --> 00:07:34,110 მაგრამ თურმე არსებობს ამ სხვა ინსტრუმენტი მოუწოდა Valgrind რომ არის ცოტა უფრო arcane გამოიყენოს. 130 00:07:34,110 --> 00:07:36,860 მისი გამომუშავება atrociously cryptic ერთი შეხედვით. 131 00:07:36,860 --> 00:07:39,420 მაგრამ შესანიშნავად სასარგებლო, განსაკუთრებით ახლა, რომ ჩვენ დროს ნაწილი ვადა 132 00:07:39,420 --> 00:07:43,080 აქ თქვენ დაწყებული გამოიყენოს malloc და დინამიური მეხსიერების გამოყოფის. 133 00:07:43,080 --> 00:07:45,420 რამ შეიძლება წასვლა ნამდვილად, ნამდვილად არასწორი სწრაფად. 134 00:07:45,420 --> 00:07:49,320 რადგან თუ თქვენ დაგავიწყდებათ გასათავისუფლებლად თქვენი მეხსიერება, ან თქვენ dereference ზოგიერთი NULL მაჩვენებელი, 135 00:07:49,320 --> 00:07:55,770 ან თქვენ dereference ზოგიერთი ნაგვის მაჩვენებელი, რა არის ტიპიურად სიმპტომია, რომ შედეგი? 136 00:07:55,770 --> 00:07:59,470 Seg ბრალია. და თქვენ მიიღებთ ამ ძირითადი ფაილის ზოგიერთი ხმების kilobytes ან მეგაბაიტები 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 to მეხსიერების დაკავშირებული შეცდომა, რომ თქვენ გააკეთა სადღაც. 141 00:08:11,750 --> 00:08:14,100 ამიტომ Valgrind გეხმარებათ მოვძებნოთ რამ მოსწონს ეს. 142 00:08:14,100 --> 00:08:17,720 ეს ინსტრუმენტი, რომ თქვენ აწარმოებს, როგორიცაა GDB, შემდეგ თქვენ შედგენილი თქვენი პროგრამა, 143 00:08:17,720 --> 00:08:20,330 მაგრამ ვიდრე აწარმოებს თქვენი პროგრამის პირდაპირ, თქვენ აწარმოებს Valgrind 144 00:08:20,330 --> 00:08:23,960 და თქვენ გაივლის მას თქვენი პროგრამა, ისევე, როგორც თქვენ არ უკავშირდება GDB. 145 00:08:23,960 --> 00:08:26,220 ახლა გამოყენება, რომ მიიღოს საუკეთესო სახის გამომუშავება, 146 00:08:26,220 --> 00:08:30,410 ცოტა ხანგრძლივი, ამიტომ უფლება არსებობს atop of ეკრანზე დაინახავთ Valgrind-V. 147 00:08:30,410 --> 00:08:35,350 "V" თითქმის საყოველთაოდ ნიშნავს verbose როდესაც თქვენ იყენებთ პროგრამების Linux კომპიუტერზე. 148 00:08:35,350 --> 00:08:38,770 ეს იმას ნიშნავს Spit მეტი მონაცემები, ვიდრე თქვენ შეიძლება იყოს. 149 00:08:38,770 --> 00:08:45,510 "- გაჟონვის-შეამოწმოთ = სრული." ეს მხოლოდ ამბობდა გამშვები ყველა შესაძლო მეხსიერების ტბები, 150 00:08:45,510 --> 00:08:49,430 შეცდომები, მე შეიძლება გააკეთა. ეს, ძალიან, არის საერთო პარადიგმა ერთად Linux პროგრამები. 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 >> სანამ ჩვენ შევხედოთ რა, რომ შესაძლოა ნიშნავს, ნება მომეცით წასვლა მეტი Snippet კოდის მეტი აქ. 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 Okay. ეს გამოცხადების მაჩვენებელი და ახლა მოდით კიდევ უფრო ტექნიკური. 170 00:10:04,940 --> 00:10:10,230 რას ნიშნავს ეს, ძალიან კონკრეტულად, განაცხადოს მაჩვენებელი? ვინმე? 171 00:10:10,230 --> 00:10:15,050 ჰო? [სტუდენტური პასუხი, გაუგებარია] ძალიან შორს. 172 00:10:15,050 --> 00:10:17,060 ასე, რომ თქვენ კითხულობთ რომ მარჯვენა მხარეს თანაბარი ნიშანი. 173 00:10:17,060 --> 00:10:20,290 მოდით ფოკუსირება მხოლოდ მარცხენა, მხოლოდ int * x. 174 00:10:20,290 --> 00:10:24,700 ეს ნიშნავს "განაცხადოს" კურსორი, მაგრამ ახლა მოდით ჩაყვინთვის უფრო ღრმა წელს რომ განსაზღვრება. 175 00:10:24,700 --> 00:10:28,330 რას კონკრეტულად, ტექნიკურად ნიშნავს? ჰო? 176 00:10:28,330 --> 00:10:31,940 [სტუდენტური პასუხი, გაუგებარია] 177 00:10:31,940 --> 00:10:35,090 Okay. ის ემზადებოდა გადარჩენა მისამართი მეხსიერებაში. 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 უფრო თანამედროვე ტექნიკითა მოსწონს უკანასკნელი Macs, უახლესი კომპიუტერით, თქვენ ალბათ 64-bit პოინტერები, 185 00:11:01,850 --> 00:11:04,160 მაგრამ ელექტრო მოწყობილობების, ეს ყველაფერი 32 ბიტი. 186 00:11:04,160 --> 00:11:08,380 ამიტომ ჩვენ standardize რომ. კერძოდ, სიუჟეტი მიდის შემდეგნაირად: 187 00:11:08,380 --> 00:11:10,820 ჩვენ "განაცხადოს" კურსორის; რას ნიშნავს ეს? 188 00:11:10,820 --> 00:11:12,810 ვამზადებთ შესანახად მეხსიერებაში მისამართზე. 189 00:11:12,810 --> 00:11:15,530 რას ნიშნავს ეს? 190 00:11:15,530 --> 00:11:19,810 ჩვენ ვქმნით ცვლადში x რომ იკავებს 32 ბიტს 191 00:11:19,810 --> 00:11:23,810 რომ მალე შესანახად მისამართი რიცხვი. 192 00:11:23,810 --> 00:11:26,470 და ეს ალბათ დაახლოებით როგორც ზუსტი, როგორც ჩვენ შეიძლება მიიღოს. 193 00:11:26,470 --> 00:11:31,810 ეს ჯარიმა წინსვლის გამარტივება მსოფლიოში და უბრალოდ, ვამბობთ განაცხადოს მაჩვენებელი მოუწოდა x. 194 00:11:31,810 --> 00:11:35,380 განაცხადოს მაჩვენებელი, მაგრამ რეალიზება და ესმით, რა რეალურად მიმდინარეობს 195 00:11:35,380 --> 00:11:38,490 თუნდაც მხოლოდ იმ რამდენიმე სიმბოლოს. 196 00:11:38,490 --> 00:11:42,040 >> ახლა, ამ ერთი თითქმის პატარა ადვილია, მიუხედავად იმისა, რომ ეს აღარ გამოხატვის. 197 00:11:42,040 --> 00:11:48,160 ასე რომ რა არის ეს აკეთებს, რომ ხაზგასმით არის: "malloc (10 * sizeof (int));" ჰო? 198 00:11:48,160 --> 00:11:52,350 [სტუდენტური პასუხი, გაუგებარია] 199 00:11:52,350 --> 00:11:58,250 კარგი. მე კი მას იქ. ეს განაწილების ბლოკი მეხსიერება ათი რიცხვებით. 200 00:11:58,250 --> 00:12:02,190 და ახლა მოდით ჩაყვინთვის წელს ოდნავ უფრო ღრმა, ვიდრე გამოყოფის ბლოკი მეხსიერება ათი რიცხვებით. 201 00:12:02,190 --> 00:12:05,390 რა არის malloc შემდეგ ბრუნდებიან? 202 00:12:05,390 --> 00:12:10,390 მისამართი, რომ ბლოკი, ან, უფრო კონკრეტულად, მისამართი პირველი byte რომ ბლოკი. 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 არარის ხარვეზები იყო. თქვენ გაქვთ ყველა byte რომ ბლოკი, 206 00:12:21,240 --> 00:12:26,760 თავში დაბრუნება უკან, მაგრამ როგორ ვიცი, სადაც ბოლომდე ბლოკი მეხსიერება? 207 00:12:26,760 --> 00:12:28,850 როდესაც თქვენ იყენებთ malloc? [სტუდენტური პასუხი, გაუგებარია] კარგი. 208 00:12:28,850 --> 00:12:30,670 თქვენ არ. თქვენ უნდა გვახსოვდეს. 209 00:12:30,670 --> 00:12:35,960 უნდა გვახსოვდეს, რომ მე გამოიყენება ღირებულების 10, და არც კი, როგორც ჩანს, არ გაკეთებულა, რომ აქ. 210 00:12:35,960 --> 00:12:41,000 მაგრამ onus მთლიანად ჩემზე. Strlen, რომელიც ჩვენ გავხდეთ ოდნავ დამოკიდებული სიმებისათვის, 211 00:12:41,000 --> 00:12:45,860 მუშაობს მხოლოდ ამ კონვენციას მქონე \ 0 212 00:12:45,860 --> 00:12:48,840 ან ამ სპეციალური nul ხასიათი, NUL, დასასრულს სიმებიანი. 213 00:12:48,840 --> 00:12:51,740 რომ არ ფლობს მხოლოდ თვითნებური მოცულობით მეხსიერება. 214 00:12:51,740 --> 00:12:58,590 ეს თქვენი გადასაწყვეტია. ამიტომ ხაზი 20, მაშინ, გამოყოფს ბლოკი მეხსიერება 215 00:12:58,590 --> 00:13:02,590 რომ შენახვა შეუძლია ათი რიცხვებით და მას ინახავს მისამართი პირველი byte 216 00:13:02,590 --> 00:13:05,610 ამ ბლოკი მეხსიერება ცვლადში x. 217 00:13:05,610 --> 00:13:11,140 Ergo, რომელიც მაჩვენებელმა. ამიტომ ხაზი 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 რადგან ისინი სინამდვილეში მოკლე მხრივ ნოტაცია ამისთვის მეტი cryptic ორიენტირებული მაჩვენებელი არითმეტიკული. 224 00:13:36,180 --> 00:13:40,320 სადაც ჩვენ ყველაფერს გააკეთებს მსგავსი რამ: ეს მიმართვა x გადატანა 10 წერტილში, 225 00:13:40,320 --> 00:13:44,550 შემდეგ იქ რასაც მისამართი ინახება იმ ადგილას. 226 00:13:44,550 --> 00:13:48,090 მაგრამ გულწრფელად ვამბობ, ეს მხოლოდ ბარბაროსულ წასაკითხად და კიდევ კომფორტულად. 227 00:13:48,090 --> 00:13:52,900 ასე, რომ მსოფლიო ჩვეულებრივ იყენებს კვადრატულ ფრჩხილებში მხოლოდ იმიტომ, რომ ეს ასე უფრო მეტი ადამიანის მეგობრული წაიკითხოს. 228 00:13:52,900 --> 00:13:55,140 მაგრამ ეს არის ის, რაც ნამდვილად მიმდინარეობს ქვეშ hood; 229 00:13:55,140 --> 00:13:58,190 x არის მისამართი, არ მასივი, თავისთავად. 230 00:13:58,190 --> 00:14:02,410 ასე რომ, ეს შენახვის 0 საიდან 10 in x. 231 00:14:02,410 --> 00:14:06,120 რატომ არის ეს ცუდი? ჰო? 232 00:14:06,120 --> 00:14:17,370 [სტუდენტური პასუხი, გაუგებარია] ზუსტად. 233 00:14:17,370 --> 00:14:21,100 ჩვენ მხოლოდ გამოყოფილი ათი ints, მაგრამ ჩვენ ითვლიან საწყისი 0 როდესაც პროგრამების C, 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 თუ აღმოჩნდება, რომ ოპერაციული სისტემა არ იბადება, თუ გამოვიყენო, რომ ზედმეტი byte, 239 00:14:40,650 --> 00:14:43,360 მიუხედავად იმისა, რომ არ მიეცა ის მე, ჩემი პროგრამა შეიძლება არ მისაწოდებლად. 240 00:14:43,360 --> 00:14:46,780 ეს ნედლეული, ეს buggy, მაგრამ თქვენ შეიძლება არ დაინახოს, რომ სიმპტომია, 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 რომ თქვენ გაიყიდა პროგრამა, რომელიც ხალხს იყენებს, რომ ყველა ერთხელ ხოლო Crashes 245 00:14:58,840 --> 00:15:02,450 რადგან, რა თქმა უნდა, ეს არ არის კარგი. რეალურად, თუ თქვენ გაქვთ Android ტელეფონის ან iPhone 246 00:15:02,450 --> 00:15:05,550 და თქვენ ჩამოტვირთოთ apps ამ დღეებში, თუ თქვენ ოდესმე ჰქონდა 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 >> თუმცა ერთი სხვა bug ამ პროგრამის გარდა ამისა ერთი. 252 00:15:25,950 --> 00:15:30,180 რა არ მე ბრალია ამ პროგრამაში? 253 00:15:30,180 --> 00:15:32,740 მე არ გამოცდილები რასაც მე იქადაგა. ჰო? 254 00:15:32,740 --> 00:15:34,760 [სტუდენტური პასუხი, გაუგებარია] კარგი. 255 00:15:34,760 --> 00:15:36,880 მე არ გაათავისუფლა მეხსიერება. ამიტომ უზენაესობის ცერის არის 256 00:15:36,880 --> 00:15:43,150 უნდა იყოს ნებისმიერ დროს რეკავთ malloc, თქვენ უნდა დარეკოთ უფასო როდესაც თქვენ კეთდება გამოყენებით, რომ მეხსიერებაში. 257 00:15:43,150 --> 00:15:45,610 ახლა, როდესაც ამას მინდა გასათავისუფლებლად ამ მეხსიერების? 258 00:15:45,610 --> 00:15:49,780 ალბათ, თუ ვთქვათ ამ პირველი ხაზი იყო ზუსტი, მე მინდა ამის გაკეთება აქ. 259 00:15:49,780 --> 00:15:55,710 იმიტომ, რომ მე ვერ, მაგალითად, ამას ქვემოთ აქ. რატომ? 260 00:15:55,710 --> 00:15:57,860 უბრალოდ გარეთ ფარგლებს. ასე რომ მიუხედავად იმისა, რომ ჩვენ ვსაუბრობთ პოინტერები, 261 00:15:57,860 --> 00:16:04,830 ეს კვირაში 2 ან 3 საკითხი, სადაც x არის მხოლოდ ფარგლებს შიგნით Curly braces სადაც იგი გამოცხადდა. 262 00:16:04,830 --> 00:16:11,000 ასე, რომ თქვენ აუცილებლად ვერ გასათავისუფლებლად ეს იქ. ჩემი ერთადერთი შანსი გასათავისუფლებლად ეს უხეშად შემდეგ ხაზი 21. 263 00:16:11,000 --> 00:16:15,170 ეს არის საკმაოდ მარტივი პროგრამა, რომ ეს იყო საკმაოდ ადვილი ერთხელ თქვენ სახის გახვეული თქვენი გონება 264 00:16:15,170 --> 00:16:17,870 გარშემო რა პროგრამა აკეთებს, სადაც შეცდომები იქნა. 265 00:16:17,870 --> 00:16:20,500 და მაშინაც კი თუ თქვენ არ ჩანს, პირველ რიგში, იმედია ეს პატარა აშკარა არის 266 00:16:20,500 --> 00:16:23,870 რომ ამ შეცდომების საკმაოდ ადვილად მოგვარდება და მარტივად გააკეთა. 267 00:16:23,870 --> 00:16:28,720 მაგრამ როდესაც პროგრამა უმეტეს 12 ხაზების ხანგრძლივი, ეს 50 ხაზების ხანგრძლივი, 100 ხაზების ხანგრძლივი, 268 00:16:28,720 --> 00:16:31,150 გავლით თქვენი კოდი ხაზს, ფიქრი მეშვეობით იგი ლოგიკურად, 269 00:16:31,150 --> 00:16:35,110 შესაძლებელია, მაგრამ არა განსაკუთრებით გართობა გავაკეთოთ, მუდმივად ეძებს შეცდომებს, 270 00:16:35,110 --> 00:16:38,340 და ეს ასევე რთულია, და ამიტომ ინსტრუმენტი, როგორიცაა Valgrind არსებობს. 271 00:16:38,340 --> 00:16:40,900 ნება მომეცით წავიდეთ წინ და ამის გაკეთება: ნება მომეცით გახსნა ჩემი ტერმინალის ფანჯარა, 272 00:16:40,900 --> 00:16:45,400 და ნება მომეცით არა მხოლოდ აწარმოებს მეხსიერება, რადგან მეხსიერების ჩანს ჯარიმა. 273 00:16:45,400 --> 00:16:49,180 მე მიღების გაუმართლა. აპირებს, რომ დამატებითი byte დასასრულს მასივი 274 00:16:49,180 --> 00:16:51,060 არ ჩანს, ძალიან პრობლემატურია. 275 00:16:51,060 --> 00:16:56,370 მაგრამ ნება მიბოძეთ, მიუხედავად ამისა, არ საღი აზრის შემოწმება, რომელიც მხოლოდ იმას ნიშნავს, რომ შეამოწმოთ 276 00:16:56,370 --> 00:16:58,320 თუ არა ეს რეალურად სწორი. 277 00:16:58,320 --> 00:17:04,690 >> ასე რომ მოდით valgrind-V - გაჟონვის-შეამოწმოთ = სრული, 278 00:17:04,690 --> 00:17:07,520 და შემდეგ პროგრამის დასახელება ამ შემთხვევაში არის მეხსიერება, არ a.out. 279 00:17:07,520 --> 00:17:10,760 ნება მომეცით, წავიდეთ წინ და ამის გაკეთება. 'Enter. 280 00:17:10,760 --> 00:17:14,109 ძვირფასო ღმერთი. ეს არის მისი გამომუშავება, და ეს არის ის, რაც მე გააკეთა მინიშნება ადრე. 281 00:17:14,109 --> 00:17:17,550 მაგრამ, თუ თქვენ ვისწავლოთ წაკითხვის საშუალებით ყველა სისულელე აქ, 282 00:17:17,550 --> 00:17:20,760 ყველაზე მეტად ეს მხოლოდ დიაგნოსტიკური გამომავალი რომ არ არის, რომ საინტერესო. 283 00:17:20,760 --> 00:17:24,829 რა თქვენი თვალის ნამდვილად სურს ეძებს რაიმე ნახსენები შეცდომა ან არასწორი. 284 00:17:24,829 --> 00:17:26,800 სიტყვები, ვარაუდობენ პრობლემები. 285 00:17:26,800 --> 00:17:29,340 მართლაც, ვნახოთ რა ხდება არასწორი ქვემოთ აქ. 286 00:17:29,340 --> 00:17:35,230 მაქვს შემაჯამებელი რაიმე სახის ", გამოიყენება საათზე გასასვლელში: 40 bytes in 1 ბლოკები." 287 00:17:35,230 --> 00:17:38,750 მე არ ვარ ნამდვილად დარწმუნებული რა ბლოკი არ არის, მაგრამ 40 ბაიტი 288 00:17:38,750 --> 00:17:41,260 რეალურად იგრძნობა შემეძლო გაერკვნენ, სადაც რომ მოდის. 289 00:17:41,260 --> 00:17:45,030 40 ბაიტი. რატომ 40 ბაიტი გამოიყენება საათზე გასასვლელში? 290 00:17:45,030 --> 00:17:48,780 და უფრო კონკრეტულად, თუ ჩვენ გადახვევა ქვემოთ აქ, 291 00:17:48,780 --> 00:17:54,520 რატომ არ ნამდვილად დაკარგული 40 ბაიტი? ჰო? 292 00:17:54,520 --> 00:17:59,520 [სტუდენტური პასუხი, გაუგებარია] Perfect. ჰო, ზუსტად. 293 00:17:59,520 --> 00:18:03,540 იყო ათი რიცხვებით, და თითოეული იმ არის ზომა 4, ან 32 ბიტი, 294 00:18:03,540 --> 00:18:08,300 მე დავკარგე ზუსტად 40 ბაიტი, რადგან, როგორც თქვენ შესთავაზა, მე არ მოუწოდა უფასო. 295 00:18:08,300 --> 00:18:13,460 სწორედ ერთი bug, და ახლა მოდით წავიკითხოთ ქვემოთ პატარა შემდგომი და ვნახოთ შემდეგი ამ, 296 00:18:13,460 --> 00:18:16,900 "არასწორი წერენ of ზომა 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 exercise, converting ათობითი to hex to ბინარული და სხვ. 301 00:18:34,090 --> 00:18:39,220 თექვსმეტობითი, მხოლოდ ადამიანის კონვენცია, ჩვეულებრივ გამოიყენება წარმოადგენენ პოინტერები 302 00:18:39,220 --> 00:18:41,570 ან, უფრო ზოგადად, მისამართები. უბრალოდ კონვენცია, 303 00:18:41,570 --> 00:18:45,340 იმიტომ რომ პატარა ადვილი წასაკითხი, ეს ცოტა უფრო კომპაქტური ვიდრე რაღაც ათობითი, 304 00:18:45,340 --> 00:18:47,720 და ბინარული აზრი არა უმეტესი ადამიანები გამოიყენოს. 305 00:18:47,720 --> 00:18:50,840 ახლა რას ნიშნავს ეს? ასევე, ის ჰგავს არსებობს არასწორი ჩაწერის 306 00:18:50,840 --> 00:18:54,480 საქართველოს ზომა 4 on line 21 memory.c. 307 00:18:54,480 --> 00:18:59,180 მოდით დავუბრუნდეთ ხაზი 21, და მართლაც, აქ არის ის, რომ არასწორი ჩაწერის. 308 00:18:59,180 --> 00:19:02,640 ამიტომ Valgrind არ აპირებს მთლიანად Hold My Hand და მეუბნებოდა, თუ რა სარემონტო არის, 309 00:19:02,640 --> 00:19:05,520 მაგრამ გამოვლენის, რომ მე ვაკეთებ არასწორი ჩაწერის. 310 00:19:05,520 --> 00:19:08,800 მე ეხება 4 ბაიტი, რომ მე არ უნდა იყოს, და როგორც ჩანს, ეს იმიტომ, რომ, 311 00:19:08,800 --> 00:19:13,960 როგორც თქვენ აღნიშნა, მე ვაკეთებ [10] ნაცვლად [9] მაქსიმალურად 312 00:19:13,960 --> 00:19:16,660 ან [0] ან რაღაც შორის. 313 00:19:16,660 --> 00:19:19,690 With Valgrind, გააცნობიეროს ნებისმიერ დროს თქვენ ახლა პროგრამის წერა 314 00:19:19,690 --> 00:19:24,190 რომელიც იყენებს მაჩვენებლებისა და იყენებს მეხსიერების და malloc უფრო კონკრეტულად, 315 00:19:24,190 --> 00:19:27,080 აუცილებლად მოხვდება ჩვევა გაშვებული ამ ხანგრძლივი 316 00:19:27,080 --> 00:19:30,890 მაგრამ ძალიან ადვილად გადაწერა და pasted ფლობს Valgrind 317 00:19:30,890 --> 00:19:32,650 თუ არსებობს რაღაც შეცდომები არსებობს. 318 00:19:32,650 --> 00:19:34,820 და ეს იქნება აბსოლუტური ყოველ ჯერზე ხედავთ გამომუშავება, 319 00:19:34,820 --> 00:19:39,430 მაგრამ გარჩევის გზით ვიზუალურად ყველა გამომავალი და ვხედავ თუ ხედავთ აღნიშნავს შეცდომები 320 00:19:39,430 --> 00:19:43,190 ან გაფრთხილებისა ან არასწორი ან დაკარგა. 321 00:19:43,190 --> 00:19:46,200 ნებისმიერი სიტყვა რომ ჟღერს როგორც თქვენ ბრალია სადღაც. 322 00:19:46,200 --> 00:19:48,580 ასე რომ მიხვდებიან, რომ ახალი ინსტრუმენტი თქვენს ინსტრუმენტარიუმის. 323 00:19:48,580 --> 00:19:51,270 >> ახლა ორშაბათს, ჩვენ გვქონდა მთელი bunch of FOLKS ამუშავება აქ 324 00:19:51,270 --> 00:19:53,150 და წარმოადგენენ ცნება დაკავშირებულია სიაში. 325 00:19:53,150 --> 00:20:00,970 ჩვენ გააცნო უკავშირდება სიაში როგორც გამოსავალი რა პრობლემა? 326 00:20:00,970 --> 00:20:04,590 ჰო? [სტუდენტური პასუხი, გაუგებარია] კარგი. 327 00:20:04,590 --> 00:20:06,530 კოლექტორები არ შეიძლება მეხსიერების ემატება მათ. 328 00:20:06,530 --> 00:20:09,440 თუ გამოყოფს მასივი ზომა 10, რომ ყველა თქვენ. 329 00:20:09,440 --> 00:20:13,690 შეგიძლიათ დარეკოთ ფუნქცია, როგორიცაა realloc თუ თავდაპირველად მოუწოდა malloc, 330 00:20:13,690 --> 00:20:17,580 და რომ შეიძლება ცდილობენ იზრდება array თუ სივრცის მიმართ ბოლომდე მას 331 00:20:17,580 --> 00:20:21,610 რომ არავინ იყენებს, და თუ არ, ამას მხოლოდ იპოვით თქვენთვის უფრო დიდი ბლოკი სხვაგან. 332 00:20:21,610 --> 00:20:25,040 მაგრამ მაშინ დააკოპირეთ ყველა იმ bytes შევიდა ახალი მასივი. 333 00:20:25,040 --> 00:20:28,310 ეს ჟღერს ძალიან სწორი გადაწყვეტა. 334 00:20:28,310 --> 00:20:34,790 რატომ არის ამ წარმოჩენა, მისთვის ნიშნეული? 335 00:20:34,790 --> 00:20:36,940 ვგულისხმობ მუშაობს, ადამიანები არ მოგვარდება ეს პრობლემა. 336 00:20:36,940 --> 00:20:40,710 რატომ უნდა მოგვარდეს ეს ორშაბათს ერთად უკავშირდება სიები? ჰო? 337 00:20:40,710 --> 00:20:44,060 [სტუდენტური პასუხი, გაუგებარია] ეს შეიძლება გაგრძელდეს დიდი ხანი. 338 00:20:44,060 --> 00:20:49,260 ფაქტობრივად, ნებისმიერ დროს თქვენ მოუწოდებდა malloc ან 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 და თუ თქვენ აკეთებთ ამ სახის რამ მარყუჟების, თქვენ ნამდვილად slowing რამ down. 342 00:20:57,470 --> 00:21:00,740 თქვენ არ აპირებს შეამჩნია ეს უმარტივესი of "Hello World" ტიპის პროგრამების, 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 Plus, უბრალოდ სახის ინტელექტუალურად - ის სრული დროს გაფლანგვა. 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 მე შემიძლია მხოლოდ სახის შექმნა ამ პურის crumbs მეშვეობით პოინტერები 352 00:21:32,070 --> 00:21:34,470 to string მთელი ჩემი უკავშირდება სია ერთად. 353 00:21:34,470 --> 00:21:36,470 მაგრამ გადავიხადო მინიმუმ ერთი ფასი. 354 00:21:36,470 --> 00:21:40,060 >> რა უნდა დათმოს წელს იძენს უკავშირდება სიები? 355 00:21:40,060 --> 00:21:42,470 ჰო? [სტუდენტური პასუხი, გაუგებარია] კარგი. 356 00:21:42,470 --> 00:21:45,650 გჭირდებათ მეტი მეხსიერება. ახლა მჭირდება სივრცეში ამ მითითებას, 357 00:21:45,650 --> 00:21:47,900 და იმ შემთხვევაში, თუ ეს სუპერ მარტივი უკავშირდება სია 358 00:21:47,900 --> 00:21:51,410 რომ მხოლოდ ცდილობს შესანახად რიცხვებით, რომლებიც 4 ბაიტი, ჩვენ შევინარჩუნოთ ამბობდა 359 00:21:51,410 --> 00:21:54,240 ასევე, კურსორი არის 4 ბაიტი, ამიტომ ახლა მე სიტყვასიტყვით გაორმაგდა 360 00:21:54,240 --> 00:21:57,290 თანხის მეხსიერების მჭირდება მხოლოდ შესანახად ამ სიაში. 361 00:21:57,290 --> 00:21:59,680 თუმცა ისევ და ისევ, ეს არის მუდმივი tradeoff კომპიუტერულ მეცნიერებაში 362 00:21:59,680 --> 00:22:03,440 შორის დრო და სივრცე და განვითარება, ძალისხმევა და სხვა რესურსების. 363 00:22:03,440 --> 00:22:06,630 რა არის კიდევ ერთი downside გამოყენების უკავშირდება სიაში? ჰო? 364 00:22:06,630 --> 00:22:10,150 [სტუდენტური პასუხი, გაუგებარია] 365 00:22:10,150 --> 00:22:12,600 კარგი. არა როგორც მარტივი წვდომისათვის. ჩვენ ვეღარ ბერკეტები 366 00:22:12,600 --> 00:22:15,530 კვირაში 0 პრინციპებს, როგორიცაა გათიშე და დაიპყროთ. 367 00:22:15,530 --> 00:22:18,220 და უფრო კონკრეტულად, ორობითი ძებნა. იმის გამო, რომ მიუხედავად იმისა, რომ ჩვენ ადამიანები 368 00:22:18,220 --> 00:22:20,400 ვხედავთ უხეშად სადაც შუა ამ სიაში არის, 369 00:22:20,400 --> 00:22:25,840 კომპიუტერი მხოლოდ იცის, რომ ეს დაკავშირებულია სია იწყება მისამართი მოუწოდა პირველი. 370 00:22:25,840 --> 00:22:28,250 სწორედ 0x123 ან რამე მაგდაგვარს. 371 00:22:28,250 --> 00:22:30,990 და ერთადერთი გზა პროგრამას შეუძლია იპოვოს შუა ელემენტს 372 00:22:30,990 --> 00:22:33,350 არის რეალურად ძებნის მთელი სია. 373 00:22:33,350 --> 00:22:35,500 და მაშინაც, ეს სიტყვასიტყვით უნდა მოძებნოთ მთელი სია, რადგან 374 00:22:35,500 --> 00:22:38,950 კიდევ ერთხელ თქვენ მიაღწიოს შუა ელემენტს შემდეგი პოინტერები, 375 00:22:38,950 --> 00:22:42,380 თქვენ, პროგრამა, არ ვიცი რამდენ ხანს ამ სიაში არის, პოტენციურად, 376 00:22:42,380 --> 00:22:45,250 სანამ არ მოხვდა ბოლოს, და იცით პროგრამულად 377 00:22:45,250 --> 00:22:48,600 რომ თქვენ დასასრულს უკავშირდება სიაში? 378 00:22:48,600 --> 00:22:51,120 არსებობს სპეციალური NULL მაჩვენებელი, ამიტომ ერთხელ, კონვენცია. 379 00:22:51,120 --> 00:22:53,870 იმის ნაცვლად, რომ გამოიყენოს ეს მაჩვენებელი, ჩვენ ნამდვილად არ გვინდა, რომ იყოს ზოგიერთი ნაგვის ღირებულება 380 00:22:53,870 --> 00:22:57,750 მიუთითებს off ეტაპზე სადღაც, ჩვენ გვინდა, რომ იყოს ხელის ქვემოთ, NULL, 381 00:22:57,750 --> 00:23:01,530 ასე, რომ ჩვენ გვაქვს ეს Terminus ამ მონაცემების სტრუქტურას ასე ვიცით, სადაც ეს დამთავრდა. 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 მაგრამ რა, თუ ჩვენ გვსურს რომ Insertion? 385 00:23:07,630 --> 00:23:12,360 ასე რომ ორიგინალური სიაში იყო 9, 17, 20, 22, 29, 34. 386 00:23:12,360 --> 00:23:16,730 რა მოხდება, თუ ჩვენ მაშინ სურდა malloc ფართი ნომერი 55, node მას, 387 00:23:16,730 --> 00:23:20,730 და მაშინ ჩვენ გვინდა ჩადეთ 55 შევიდა სიაში, ისევე როგორც ჩვენ ორშაბათს? 388 00:23:20,730 --> 00:23:23,690 როგორ გავაკეთოთ ეს? ისე, ანიტა გამოვიდა და მან არსებითად დადიოდა სიაში. 389 00:23:23,690 --> 00:23:27,500 მან დაიწყო პირველი ელემენტს, მაშინ მომდევნო, შემდეგი, მომდევნო, შემდეგი, მომდევნო. 390 00:23:27,500 --> 00:23:29,500 საბოლოოდ მოხვდა მარცხენა ყველა გზა ქვემოთ 391 00:23:29,500 --> 00:23:34,480 და მივხვდი, ო, ეს არის NULL. მერე რა მაჩვენებელი მანიპულირება რამ არის გასაკეთებელი? 392 00:23:34,480 --> 00:23:37,980 პირი, რომელიც წლის ბოლომდე, ნომერი 34, საჭიროა მისი მარცხენა ხელის დააყენა 393 00:23:37,980 --> 00:23:46,220 აღვნიშნო ზე 55, 55 საჭიროა მათი მარცხენა მკლავი მიუთითებს ქვემოთ იყოს ახალი null terminator. შესრულებულია. 394 00:23:46,220 --> 00:23:49,540 Pretty მარტივი ჩადეთ 55 შევიდა დახარისხებული სია. 395 00:23:49,540 --> 00:23:51,800 და როგორ შეიძლება ამ გამოიყურებოდეს? 396 00:23:51,800 --> 00:23:55,690 >> ნება მომეცით წავიდეთ წინ და ქმნის ზოგიერთი კოდი მაგალითად აქ. 397 00:23:55,690 --> 00:23:58,120 მე გახსენით gedit და ნება მომეცით გახსენით ორი ფაილი პირველი. 398 00:23:58,120 --> 00:24:02,050 ერთი არის list1.h, და ნება მომეცით მხოლოდ შევახსენო, რომ ეს იყო ბლოკი კოდი 399 00:24:02,050 --> 00:24:04,920 რომ ჩვენ გამოიყენება წარმოადგენენ კვანძში. 400 00:24:04,920 --> 00:24:13,040 კვანძის გააჩნია როგორც int მოუწოდა N და კურსორი მოუწოდა შემდეგი, რომ მხოლოდ მიუთითებს შემდეგი რამ სიაში. 401 00:24:13,040 --> 00:24:15,450 სწორედ ახლა. თ ფაილი. რატომ? 402 00:24:15,450 --> 00:24:19,090 არსებობს ამ კონვენციით, და ჩვენ არ მიუღიათ უპირატესობა ამ უზარმაზარი თანხა თავს, 403 00:24:19,090 --> 00:24:22,220 მაგრამ ადამიანი, რომელიც წერდა printf და სხვა ფუნქციების 404 00:24:22,220 --> 00:24:27,150 მისცა, როგორც საჩუქარი მსოფლიოს ყველა იმ ფუნქციების წერა ფაილი სახელად stdio.h. 405 00:24:27,150 --> 00:24:30,950 და შემდეგ იქ string.h და შემდეგ იქ map.h, და იქ ყველა ამ თ ფაილები 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 თქვენ არ დააყენოს ფუნქციები 'შესრულება in header ფაილი. 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 ნება მომეცით წავიდეთ წინ და ნუ სხვა Insertion, ამიტომ მოხვდა მენიუ ვარიანტი 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 ამიტომ დასაწყისი უკავშირდება სია რომ გვქონდა in slide ფორმა მომენტში წინ. 429 00:25:45,850 --> 00:25:48,740 როგორ ხდება ამ Insertion რეალურად ხდება? 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 >> ვნახოთ თუ როგორ წავიდეთ შესახებ ჩასმა new node ამ ბმის სიაში. 437 00:26:11,720 --> 00:26:14,550 სად არის სია გამოაცხადა? კარგად, მოდით გადახვევა ყველა გზა მდე ზედა, 438 00:26:14,550 --> 00:26:19,970 და შენიშნავს, რომ ჩემი უკავშირდება სია არსებითად განაცხადა, როგორც ერთი მაჩვენებელი, რომ თავდაპირველად null. 439 00:26:19,970 --> 00:26:23,180 ამიტომ მე გამოყენებით გლობალური ცვლადი აქ, რომელიც ზოგადად ჩვენ იქადაგა წინააღმდეგ 440 00:26:23,180 --> 00:26:25,280 რადგან ეს ქმნის თქვენს კოდი პატარა ბინძურ შენარჩუნება, 441 00:26:25,280 --> 00:26:29,080 ეს ერთგვარი ზარმაცი, როგორც წესი, მაგრამ ეს არ ეზარება და ეს არ არასწორი და ეს ცუდი არ 442 00:26:29,080 --> 00:26:33,660 თუ თქვენი პროგრამის ერთადერთი მიზანი ცხოვრებაში არის სიმულაცია ერთ დაკავშირებული სიაში. 443 00:26:33,660 --> 00:26:35,460 სწორედ იმას, რასაც ვაკეთებთ. 444 00:26:35,460 --> 00:26:39,100 ასე რომ, ვიდრე განაცხადოს ამ მთავარ და შემდეგ უნდა გაიაროს ეს ყველა ფუნქცია 445 00:26:39,100 --> 00:26:42,640 ჩვენ წერილობით ამ პროგრამაში, ჩვენ ნაცვლად გააცნობიეროს OH, მოდით უბრალოდ რათა ის გლობალური 446 00:26:42,640 --> 00:26:47,060 რადგან მთელი მიზნით ამ პროგრამის დემონსტრირება ერთი და მხოლოდ ერთი უკავშირდება სიაში. 447 00:26:47,060 --> 00:26:50,700 ასე რომ გრძნობს okay. აქ არის ჩემი პროტოტიპები, და ჩვენ არ გავლა ყველა ჩამოთვლილს, 448 00:26:50,700 --> 00:26:55,800 მაგრამ მე დავწერე წაშლა ფუნქცია, იპოვოს ფუნქციის ჩასმა ფუნქცია და ტრავერსზე ფუნქცია. 449 00:26:55,800 --> 00:26:59,080 მაგრამ მოდით ახლა დავუბრუნდეთ ქვემოთ ჩანართით ფუნქცია 450 00:26:59,080 --> 00:27:01,490 და ვნახავთ, როგორ ეს ერთი მუშაობს აქ. 451 00:27:01,490 --> 00:27:09,940 Insert არის ხაზზე - Here We Go. 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 და რატომ ვარ მე შემოწმების for null შეესაბამება 120? 460 00:27:33,340 --> 00:27:37,530 რა შეიძლება გადასვლა არასწორი შეესაბამება 119? ჰო? 461 00:27:37,530 --> 00:27:40,530 [სტუდენტური პასუხი, გაუგებარია] 462 00:27:40,530 --> 00:27:43,440 კარგი. უბრალოდ შეიძლება იყოს საქმე, რომ მე სთხოვა ძალიან ბევრი მეხსიერება 463 00:27:43,440 --> 00:27:47,020 ან რაღაც არასწორი და ოპერაციული სისტემა არ გააჩნია საკმარისი bytes რომ მომეცი, 464 00:27:47,020 --> 00:27:50,640 ასე რომ გვიჩვენებს იმდენი მიერ დაბრუნების NULL, და თუ მე არ ვამოწმებ, რომ 465 00:27:50,640 --> 00:27:54,710 და მე უბრალოდ ბრმად გაგრძელება გამოიყენოს მისამართი დაბრუნდა, შეიძლება იყოს null. 466 00:27:54,710 --> 00:27:58,400 ეს შეიძლება იყოს რაღაც უცნობი ღირებულება; არ კარგია, თუ არ მე - 467 00:27:58,400 --> 00:28:00,590 რეალურად არ იქნება უცნობი ღირებულება. ეს შეიძლება იყოს NULL, ამიტომ მე არ მინდა 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 რომელიც წარმოადგენს პირველ byte ახალი კვანძის ობიექტი, 474 00:28:23,490 --> 00:28:26,860 შემდეგ კი საველე მოუწოდა n. 475 00:28:26,860 --> 00:28:35,270 პატარა trivia კითხვა: ეს არის ეკვივალენტი რა უფრო cryptic ხაზი კოდი? 476 00:28:35,270 --> 00:28:38,110 როგორ შეიძლება სხვას მე არ წერია ეს? სურს stab? 477 00:28:38,110 --> 00:28:41,480 [სტუდენტური პასუხი, გაუგებარია] 478 00:28:41,480 --> 00:28:44,870 კარგი. გამოყენება. N, მაგრამ ეს არ საკმაოდ მარტივია, როგორც ეს. 479 00:28:44,870 --> 00:28:47,090 რა უნდა გავაკეთო? [სტუდენტური პასუხი, გაუგებარია] 480 00:28:47,090 --> 00:28:52,730 კარგი. მე უნდა გავაკეთოთ * newptr.n. 481 00:28:52,730 --> 00:28:55,610 ასე რომ, ეს ამბობს ახალი კურსორი არის აშკარად მისამართზე. რატომ? 482 00:28:55,610 --> 00:28:59,520 რადგან ეს იყო დაბრუნდა მიერ malloc. * Newptr რომ "იქ," 483 00:28:59,520 --> 00:29:02,970 და მაშინ ერთხელ თქვენ იქ, მაშინ შეგიძლიათ გამოიყენოთ მეტი ნაცნობი. N, 484 00:29:02,970 --> 00:29:05,730 მაგრამ ეს მხოლოდ გამოიყურება პატარა მახინჯი, განსაკუთრებით თუ ჩვენ ადამიანები აპირებენ 485 00:29:05,730 --> 00:29:10,360 მიაპყროს პოინტერები ისრებით ყველა დრო; მსოფლიოს სტანდარტიზებული ამ arrow ნოტაცია, 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-> შემდეგი null? 490 00:29:25,800 --> 00:29:28,610 ჩვენ არ გვინდა dangling მარცხენა გამორთვა ბოლომდე ეტაპზე. 491 00:29:28,610 --> 00:29:31,630 ჩვენ გვინდა ეს მიუთითებს სწორი down, რაც იმას ნიშნავს, ბოლომდე ამ ჩამონათვალს 492 00:29:31,630 --> 00:29:34,980 შესაძლოა იყოს ამ კვანძში, ამიტომ ჩვენ უკეთესი დარწმუნდით, რომ იგი null. 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 Just გაქირავების ნაგვის არსებობს და კვლავაც იარსებებს ზოგადად იღებს თქვენ პრობლემები 496 00:29:45,170 --> 00:29:48,650 თუ თქვენ დაგავიწყდებათ, რომ რამე შემდგომში. 497 00:29:48,650 --> 00:29:51,590 >> აი რამდენიმე შემთხვევა. ეს, კიდევ ერთხელ, არის ჩანართით ფუნქცია, 498 00:29:51,590 --> 00:29:54,930 და პირველი, რასაც მე შევამოწმოთ არის თუ ცვლადში პირველი, 499 00:29:54,930 --> 00:29:58,240 რომ გლობალური ცვლადი არის NULL, რაც იმას ნიშნავს, რომ არ არსებობს უკავშირდება სიაში. 500 00:29:58,240 --> 00:30:02,460 ჩვენ არ შეიყვანეს ნებისმიერი ციფრები, ამიტომ ტრივიალური ჩასასმელად ამ მიმდინარე ნომერი 501 00:30:02,460 --> 00:30:05,240 შევიდა სიაში, რადგან ეს უბრალოდ ეკუთვნის დაწყების სიაში. 502 00:30:05,240 --> 00:30:08,100 ასე რომ, ეს იყო, როდესაც ანიტა უბრალოდ იდგა up აქ მარტო, pretending 503 00:30:08,100 --> 00:30:11,390 არავინ იყო აქ სცენაზე სანამ ჩვენ გამოყოფილი კვანძში, 504 00:30:11,390 --> 00:30:13,940 მაშინ მას შეეძლო დააყენებს თავის მხრივ პირველად, 505 00:30:13,940 --> 00:30:17,420 თუ ყველას ჰქონდა ამუშავება სცენაზე შემდეგ მისი ორშაბათს. 506 00:30:17,420 --> 00:30:22,900 ახლა აქ, ეს არის პატარა გამშვები სად უნდა ვთქვა, თუ ახალი კვანძის მისი ღირებულება N 507 00:30:22,900 --> 00:30:27,370 არის <ღირებულება N მიმდინარე პირველი კვანძი, 508 00:30:27,370 --> 00:30:29,930 ეს ნიშნავს, რომ არსებობს დაკავშირებული სიაში რომ დაწყებულია. 509 00:30:29,930 --> 00:30:32,330 არსებობს მინიმუმ ერთი კვანძის სიაში, მაგრამ ეს ახალი გაი 510 00:30:32,330 --> 00:30:37,230 ეკუთვნის სანამ, ამიტომ ჩვენ უნდა გადავიდეს რამ გარშემო. 511 00:30:37,230 --> 00:30:43,450 სხვა სიტყვებით, თუ სიაში დაიწყო უბრალოდ, ასე ვთქვათ, 512 00:30:43,450 --> 00:30:48,100 მხოლოდ ხმების 17, რომ - ფაქტობრივად, ჩვენ შეგვიძლია გავაკეთოთ ეს უფრო ნათლად. 513 00:30:48,100 --> 00:30:56,010 თუ ჩვენ დავიწყებთ ჩვენი ამბავი ერთად კურსორი აქ მოუწოდა პირველი, 514 00:30:56,010 --> 00:30:59,870 და თავდაპირველად ის NULL, და ჩვენ ჩადეთ ნომერი 9, 515 00:30:59,870 --> 00:31:02,510 ნომერი 9 ნათლად ეკუთვნის დაწყების სიაში. 516 00:31:02,510 --> 00:31:07,400 მოდით ვითომ ჩვენ უბრალოდ malloced მისამართი ან ნომერი 9 და განათავსოთ აქ. 517 00:31:07,400 --> 00:31:13,170 თუ პირველი არის 9 ჩვეულებრივ, პირველი სცენარი ჩვენ განვიხილეთ მხოლოდ იმას ნიშნავს, მოდით წერტილი ამ ბიჭს აქ, 518 00:31:13,170 --> 00:31:15,790 დატოვეთ როგორც NULL, ახლა ჩვენ გვაქვს ნომერი 9. 519 00:31:15,790 --> 00:31:18,280 შემდეგი ნომერი გვინდა ჩადეთ არის 17. 520 00:31:18,280 --> 00:31:22,420 17 ეკუთვნის მეტი აქ, ამიტომ ჩვენ ვაპირებთ უნდა გავაკეთოთ გარკვეული ლოგიკური Stepping მეშვეობით. 521 00:31:22,420 --> 00:31:26,060 მოდით ნაცვლად, სანამ ჩვენ გავაკეთებთ, რომ, მოდით, ვიტყვი, რომ გვინდოდა ჩადეთ ნომერი 8. 522 00:31:26,060 --> 00:31:28,650 >> ასე რომ მხოლოდ მოხერხებულობის ის გულისთვის, მე ვაპირებ გავამახვილო აქ. 523 00:31:28,650 --> 00:31:30,760 მაგრამ გახსოვდეთ, malloc შეგიძლიათ განათავსოთ ეს ყველაზე მეტად არსად. 524 00:31:30,760 --> 00:31:33,460 მაგრამ ნახატის გულისთვის, მე ამას აქ. 525 00:31:33,460 --> 00:31:38,440 ასე ვიტყვი მე უბრალოდ გამოყოფილი კვანძის ამისთვის ნომერი 8; ეს NULL იყოს. 526 00:31:38,440 --> 00:31:42,800 რა არის უნდა მოხდეს? რამდენიმე რამ. 527 00:31:42,800 --> 00:31:47,090 ჩვენ მივიღეთ ეს შეცდომა სცენაზე ორშაბათს, სადაც ჩვენ ახლდება მაჩვენებელი მოსწონს, 528 00:31:47,090 --> 00:31:51,890 მაშინ ამ, და შემდეგ ჩვენ აცხადებდა - ჩვენ ობოლი ყველას სცენაზე. 529 00:31:51,890 --> 00:31:54,350 იმიტომ, რომ თქვენ can't - ბრძანებით ოპერაციების აქ მნიშვნელოვანია, 530 00:31:54,350 --> 00:31:58,760 რადგან ახლა ჩვენ დავკარგეთ ამ კვანძის 9 რომ მხოლოდ სახის მცურავი სივრცეში. 531 00:31:58,760 --> 00:32:01,150 ასე რომ, ეს არ იყო სწორი მიდგომა ორშაბათს. 532 00:32:01,150 --> 00:32:03,330 ჩვენ პირველი უნდა გავაკეთოთ რაღაც. 533 00:32:03,330 --> 00:32:06,280 სახელმწიფო მსოფლიოს ასე გამოიყურება. თავდაპირველად, 8 გამოყოფილი. 534 00:32:06,280 --> 00:32:10,550 რა იქნებოდა უკეთესი გზა ჩასმა 8? 535 00:32:10,550 --> 00:32:14,720 იმის ნაცვლად, რომ განახლებას ამ მაჩვენებელმა პირველი, უბრალოდ განაახლოთ ეს ერთი აქ ნაცვლად. 536 00:32:14,720 --> 00:32:17,720 ამიტომ ჩვენ გვჭირდება ხაზი კოდი, რომ აპირებს გახდეს ამ NULL ხასიათი 537 00:32:17,720 --> 00:32:22,020 შევიდა ფაქტობრივი მაჩვენებელი, ის მიუთითებს კვანძის 9, 538 00:32:22,020 --> 00:32:27,970 და მაშინ ჩვენ შეგვიძლია უსაფრთხოდ შეცვლის პირველი აღვნიშნო ამ ბიჭს აქ. 539 00:32:27,970 --> 00:32:31,330 ახლა ჩვენ გვაქვს სია, ბმის სია, ორი ელემენტები. 540 00:32:31,330 --> 00:32:33,580 და რას რეალურად გამოიყურებოდეს აქ? 541 00:32:33,580 --> 00:32:36,900 თუ დავაკვირდებით კოდი შეამჩნევთ, რომ მე ვაკეთებ ზუსტად რომ. 542 00:32:36,900 --> 00:32:41,970 მე განაცხადა newptr, და ამ ამბის, newptr იყო მიუთითებს ამ ბიჭს. 543 00:32:41,970 --> 00:32:45,520 >> ნება მომეცით, შევაჩერო კიდევ ერთი რამ, და მე უნდა წასულიყო ცოტა მეტი ოთახი ამისათვის. 544 00:32:45,520 --> 00:32:48,540 ასე რომ ვაპატიოთ პატარა პატარა ნახაზი. 545 00:32:48,540 --> 00:32:52,140 ამ ბიჭს ჰქვია newptr. 546 00:32:52,140 --> 00:32:57,940 სწორედ ცვლადი განვუცხადეთ რამოდენიმე ხაზს ადრე, ხაზი - მაღლა 25. 547 00:32:57,940 --> 00:33:03,430 და ეს მიუთითებს 8. ამიტომ როდესაც ვამბობ, რომ newptr-> შემდეგი, ეს ნიშნავს, რომ წასვლა struct 548 00:33:03,430 --> 00:33:07,910 რომ მიმდინარეობს მიუთითა მიერ newptr, ამიტომ აქ ვართ, იქ. 549 00:33:07,910 --> 00:33:13,990 მაშინ arrow ამბობს მიიღოს შემდეგი სფეროში და შემდეგ = ამბობს დააყენა რა ღირებულება არსებობს? 550 00:33:13,990 --> 00:33:17,280 ღირებულება, რომელიც იყო პირველი, რა ღირებულების იყო პირველი? 551 00:33:17,280 --> 00:33:21,930 პირველი იყო მიუთითებს ამ კვანძში, ისე, რომ ნიშნავს ეს უნდა აღვნიშნო ამ კვანძში. 552 00:33:21,930 --> 00:33:25,660 სხვა სიტყვებით, თუ რა გამოიყურება თუმცა სასაცილოა mess with ჩემი ხელწერა, 553 00:33:25,660 --> 00:33:28,620 რა მარტივი იდეა მხოლოდ მოძრავი ამ ისრებით გარშემო 554 00:33:28,620 --> 00:33:31,560 ითარგმნება როგორც კოდი და მხოლოდ ამ ერთი ლაინერი. 555 00:33:31,560 --> 00:33:38,110 მაღაზიის რა არის პირველი შემდეგი სფეროში და შემდეგ განაახლოს რა პირველი რეალურად არის. 556 00:33:38,110 --> 00:33:40,900 მოდით წავიდეთ წინ და სწრაფად წინსვლის გზით გარკვეული ამ, 557 00:33:40,900 --> 00:33:44,220 და მოუთმენლად მხოლოდ ამ კუდი Insertion ახლა. 558 00:33:44,220 --> 00:33:51,210 დავუშვათ, რომ მივიღო, რათა წერტილში, სადაც მე რომ შემდეგი სფეროში ზოგიერთი კვანძის არის NULL. 559 00:33:51,210 --> 00:33:53,410 და ამ დროისთვის ამბავი, დეტალურად რომ მე glossing მეტი 560 00:33:53,410 --> 00:33:58,170 ის არის, რომ მე გააცნო კიდევ ერთი მაჩვენებელი აქ შეესაბამება 142, წინამორბედის მაჩვენებელი. 561 00:33:58,170 --> 00:34:01,320 არსებითად, ამ დროისთვის ამბავი, ერთხელ სია იღებს ხანგრძლივი, 562 00:34:01,320 --> 00:34:04,800 I ტიპის უნდა სიარული ეს ორი თითი, რადგან თუ ასე შორს, 563 00:34:04,800 --> 00:34:08,219 მახსოვს ერთ სიგრძე სია, თქვენ ვერ მიდის უკან. 564 00:34:08,219 --> 00:34:13,659 ასე რომ, ეს იდეა predptr არის ჩემი მარცხენა თითი და newptr - არ newptr. 565 00:34:13,659 --> 00:34:17,199 კიდევ ერთი მაჩვენებელი, რომ აქ არის ჩემი სხვა თითი და მე უბრალოდ სახის ფეხით სია. 566 00:34:17,199 --> 00:34:22,179 ამიტომ, რომ არსებობს. მაგრამ მოდით მხოლოდ განიხილოს ერთი მარტივი შემთხვევებში აქ. 567 00:34:22,179 --> 00:34:26,620 თუ ეს მაჩვენებელი მომდევნო ველი NULL, რა ლოგიკური მნიშვნელობა? 568 00:34:26,620 --> 00:34:30,840 თუ თქვენ traversing ამ სიაში და თქვენ მოხვდა NULL მაჩვენებელი? 569 00:34:30,840 --> 00:34:35,780 თქვენ დასასრულს სია და ასე კოდი შემდეგ დამატება ამ ერთ დამატებით ელემენტს 570 00:34:35,780 --> 00:34:41,230 არის ერთგვარი ინტუიციური მიიღებს, რომ კვანძის რომლის შემდეგი კურსორი არის NULL, 571 00:34:41,230 --> 00:34:46,120 ასე რომ, ეს არის გაკეთებული NULL, და შეცვლის, თუმცა, უნდა იყოს მისამართი ახალი კვანძში. 572 00:34:46,120 --> 00:34:52,260 ასე რომ ჩვენ უბრალოდ ნახატის კოდი arrow რომ ჩვენ გაამახვილა სცენაზე მიერ ამაღლების ვინმეს მარცხენა ხელში. 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 ამოწმებს ამისთვის Insertion საათზე სია ახლო. 576 00:35:00,600 --> 00:35:03,220 მაგრამ უბრალოდ ინტუიციურად, თუ რა სჭირდება რომ მოხდეს, თუ გსურთ გაერკვნენ 577 00:35:03,220 --> 00:35:06,600 სადაც ნომერი ეკუთვნის შუა არის თუ თქვენ ჩვენგან აქვს ფეხით იგი 578 00:35:06,600 --> 00:35:09,510 ერთზე მეტი თითი, ერთზე მეტი მაჩვენებელი, 579 00:35:09,510 --> 00:35:12,920 გაერკვნენ, სადაც მას ეკუთვნის მიერ შემოწმების არის ელემენტს <მიმდინარე ერთი, 580 00:35:12,920 --> 00:35:15,450 > მიმდინარე ერთი, და კიდევ თქვენთვის, რომ ადგილი, 581 00:35:15,450 --> 00:35:20,400 მაშინ თქვენ უნდა გავაკეთოთ ამ სახის ჭურვი თამაში, სადაც თქვენ გადატანა პოინტერები გარშემო ძალიან ფრთხილად. 582 00:35:20,400 --> 00:35:23,850 და რომ პასუხი, თუ გსურთ მიზეზი ამ სახლში საკუთარ, 583 00:35:23,850 --> 00:35:28,340 boils ქვემოთ მხოლოდ ამ ორი ხაზი კოდი, მაგრამ იმისათვის იმ ხაზები არის სუპერ მნიშვნელოვანია. 584 00:35:28,340 --> 00:35:31,390 რადგან თუ თქვენ დააგდოთ ვიღაცის ხელი და დასვას სხვისი არასწორი მიზნით, 585 00:35:31,390 --> 00:35:34,580 ერთხელ, თქვენ შეიძლება დასრულდეს up orphaning სიაში. 586 00:35:34,580 --> 00:35:39,500 შეჯამება უფრო კონცეპტუალურად, Insertion საათზე კუდი შედარებით მარტივია. 587 00:35:39,500 --> 00:35:42,940 Insertion სათავეში ასევე შედარებით მარტივია, 588 00:35:42,940 --> 00:35:45,580 მაგრამ თქვენ უნდა განაახლოთ დამატებითი მაჩვენებელი ამ დროს 589 00:35:45,580 --> 00:35:47,930 to squeeze ნომერი 5 შევიდა სიაში აქ, 590 00:35:47,930 --> 00:35:51,560 და შემდეგ Insertion შუა მოიცავს კიდევ უფრო მეტი ძალისხმევა, 591 00:35:51,560 --> 00:35:56,130 ძალიან ფრთხილად ჩადეთ ხმების 20 თავის სწორი მდებარეობის, 592 00:35:56,130 --> 00:35:58,350 რაც შორის 17 და 22. 593 00:35:58,350 --> 00:36:02,700 ასე, რომ თქვენ უნდა გავაკეთოთ მსგავსი რამ აქვს ახალი კვანძის 20 წერტილი 22, 594 00:36:02,700 --> 00:36:08,470 და შემდეგ, რაც node-ს მაჩვენებელი საჭიროებს ახლდება ბოლო? 595 00:36:08,470 --> 00:36:10,630 ეს 17, რეალურად ჩადეთ იგი. 596 00:36:10,630 --> 00:36:14,080 ასე რომ კიდევ ერთხელ, მე defer ფაქტობრივი კოდი კონკრეტულ განხორციელებაში. 597 00:36:14,080 --> 00:36:17,280 >> ერთი შეხედვით, ეს პატარა დიდი, მაგრამ ეს მართლაც მხოლოდ უსასრულო loop 598 00:36:17,280 --> 00:36:21,770 რომ looping, looping, looping, looping და არღვევს როგორც კი მოხვდა NULL მაჩვენებელი, 599 00:36:21,770 --> 00:36:24,590 სადაც წერტილი შეგიძლიათ გააკეთოთ საჭირო Insertion. 600 00:36:24,590 --> 00:36:30,960 ეს, მაშინ, არის წარმომადგენელი უკავშირდება სია Insertion კოდი. 601 00:36:30,960 --> 00:36:34,590 ეს იყო ერთგვარი ბევრი, და ეს იგრძნობა ჩვენ მოგვარდება ერთი პრობლემა, 602 00:36:34,590 --> 00:36:36,940 მაგრამ ჩვენ გააცნო მთელი მეორე. გულწრფელად ვამბობ, ჩვენ მთელი ამ ხნის 603 00:36:36,940 --> 00:36:40,540 დიდ O და Ω და გაშვებული დროს, ცდილობს პრობლემების უფრო სწრაფად, 604 00:36:40,540 --> 00:36:43,270 და აქ ჩვენ აღების დიდი უკან გადადგმული ნაბიჯი, იგი გრძნობს. 605 00:36:43,270 --> 00:36:45,380 და მაინც, თუ მიზანია შესანახად მონაცემები, 606 00:36:45,380 --> 00:36:48,010 ეს იგრძნობა წმიდა გრაალი, როგორც ჩვენ განაცხადა ორშაბათს, რომ რეალურად იქნება 607 00:36:48,010 --> 00:36:50,470 შესანახად რამ მყისიერად. 608 00:36:50,470 --> 00:36:53,930 >> ფაქტობრივად, ვივარაუდოთ, რომ ჩვენ გადადონ უკავშირდება სიაში მომენტში 609 00:36:53,930 --> 00:36:56,000 და ჩვენ ნაცვლად გააცნო ცნება მაგიდასთან. 610 00:36:56,000 --> 00:36:59,110 და მოდით უბრალოდ ვფიქრობ მაგიდა მომენტში, როგორც მასივი. 611 00:36:59,110 --> 00:37:03,790 ეს მასივი და ამ შემთხვევაში აქ რაღაც 26 ელემენტებს, 0 მეშვეობით 25, 612 00:37:03,790 --> 00:37:07,940 და ვარაუდობენ, რომ თქვენ საჭირო ზოგიერთი ბლოკი შენახვისა და სახელები: 613 00:37:07,940 --> 00:37:10,350 Alice და ბობ და ჩარლი და მოსწონს. 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 და თქვენ შეიძლება ფეხით სია ჩასმა Alice ადრე ბობ და ჩარლი შემდეგ ბობ და სხვ. 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 არ იქნება ლამაზი, თუ ჩვენ მოცემული ობიექტი მოუწოდა Alice, 626 00:37:53,380 --> 00:37:56,020 ჩვენ გვინდა დააყენა მისი სწორი მდებარეობის მონაცემები სტრუქტურის, 627 00:37:56,020 --> 00:37:58,860 იგი გრძნობს, როგორც ეს მინდა იყოს მართლაც ლამაზი უბრალოდ დააყენა Alice, 628 00:37:58,860 --> 00:38:01,180 რომლის სახელი იწყება, პირველ ადგილას. 629 00:38:01,180 --> 00:38:05,270 და ბობ, რომლის სახელი იწყება B, მეორე ადგილას. 630 00:38:05,270 --> 00:38:09,580 With მასივი, ან დავიწყოთ უწოდა მაგიდა, hash მაგიდაზე რომ, 631 00:38:09,580 --> 00:38:13,650 ჩვენ შეგვიძლია გავაკეთოთ ზუსტად რომ. თუ ჩვენ მოცემულია სახელი როგორიცაა Alice, 632 00:38:13,650 --> 00:38:16,700 სიმებიანი მოსწონს Alice, სად დააყენა-L-I-C-E? 633 00:38:16,700 --> 00:38:20,540 ჩვენ გვჭირდება hueristic. ჩვენ გვჭირდება ფუნქცია მიიღოს გარკვეული შეყვანის მოსწონს Alice 634 00:38:20,540 --> 00:38:24,610 და დაბრუნების პასუხი, "Put Alice ამ ადგილას." 635 00:38:24,610 --> 00:38:28,720 და ამ ფუნქციას, ამ შავი ყუთი, აპირებს ეწოდოს ქეშირების ფუნქცია. 636 00:38:28,720 --> 00:38:32,330 >> ქეშირების ფუნქცია არის ის, რასაც იღებს შეყვანის, როგორიცაა "Alice", 637 00:38:32,330 --> 00:38:38,080 და დაბრუნდა თქვენ, როგორც წესი, რიცხვითი საიდან ზოგიერთ მონაცემები სტრუქტურა, სადაც Alice ეკუთვნის. 638 00:38:38,080 --> 00:38:40,830 ამ შემთხვევაში, ჩვენი ქეშირების ფუნქცია უნდა იყოს შედარებით მარტივი. 639 00:38:40,830 --> 00:38:47,510 ჩვენი ქეშირების ფუნქცია უნდა ვთქვათ, თუ მოცემულია "Alice", რომელიც ხასიათი უნდა აღელვებს? 640 00:38:47,510 --> 00:38:55,660 პირველი. ასე რომ შევხედოთ [0], და მერე ამბობენ, თუ [0] ხასიათი არის, დაუბრუნოს ნომერი 0. 641 00:38:55,660 --> 00:39:01,130 თუ ეს B, დაბრუნდნენ 1. თუ C, დაბრუნდნენ 2 და სხვ. 642 00:39:01,130 --> 00:39:05,940 ყველა 0 ინდექსი, და რომ ნება მიბოძეთ ჩადეთ Alice და შემდეგ ბობ და შემდეგ ჩარლი და ა.შ. 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 ჩვენ ახლა აქვს დაუყოვნებლივ Insertion, მუდმივი დროის Insertion, შევიდა მონაცემები სტრუქტურა 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 [სტუდენტური პასუხი, გაუგებარია] Okay, ამიტომ ვერ აქვს კიდევ ერთი განზომილება. 652 00:39:37,410 --> 00:39:42,320 ეგ კარგია. ასე რომ ჩვენ შეგვიძლია ავაშენოთ რამ გარეთ 3D როგორც ჩვენ ვისაუბრეთ სიტყვიერი ორშაბათს. 653 00:39:42,320 --> 00:39:46,700 ჩვენ შეგვეძლო დაამატოთ კიდევ ერთი ხელმისაწვდომობის აქ, მაგრამ ვარაუდობენ, რომ არა, ვცდილობ, რომ ეს მარტივია. 654 00:39:46,700 --> 00:39:50,160 მთელი მიზანი აქ არის ჰქონდეს დაუყოვნებლივი მუდმივ დროში ხელმისაწვდომობა, 655 00:39:50,160 --> 00:39:52,170 ასე რომ დასძინა ძალიან ბევრი სირთულის. 656 00:39:52,170 --> 00:39:55,970 რა არის სხვა ვარიანტი, როცა ცდილობს ჩადეთ ანიტა შევიდა ამ მონაცემთა სტრუქტურას? ჰო? 657 00:39:55,970 --> 00:39:58,610 [სტუდენტური პასუხი, გაუგებარია] კარგი. ამიტომ ვერ გადავა ყველას down, 658 00:39:58,610 --> 00:40:03,040 მოსწონს ჩარლი nudges ქვემოთ ბობ და Alice, და შემდეგ ჩვენ დააყენა ანიტა სადაც იგი ნამდვილად სურს იყოს. 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 ახლა ჩვენ სახის ბრალია მეტი Alice, რომელიც აღარ სადაც მან უნდა იყოს. 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 მაგრამ მართლაც, ეს არის ერთი ვარიანტი. ჩვენ შეგვეძლო გადაეტანა ყველას down, 668 00:40:28,830 --> 00:40:32,240 ან heck, ანიტა მოვიდა გვიან თამაში, რატომ არ ვართ, უბრალოდ დააყენა ანიტა 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 თქვენ შეიძლება იპოვოთ Alice მყისიერად, დაფუძნებული მისი სახელი. 672 00:40:41,630 --> 00:40:44,320 და ბობ მყისიერად, და ჩარლი. მაგრამ მაშინ თქვენ მოძებნით ანიტა, 673 00:40:44,320 --> 00:40:46,360 და ხედავთ, hmm, Alice არის გზა. 674 00:40:46,360 --> 00:40:48,770 ისე, ნება მომეცით შეამოწმოთ ქვემოთ Alice. Bob არ არის Anita. 675 00:40:48,770 --> 00:40:51,850 ჩარლი არ არის Anita. ოჰ, არსებობს Anita. 676 00:40:51,850 --> 00:40:54,720 და თუ გააგრძელებთ, რომ მატარებელი ლოგიკით ყველა გზა, 677 00:40:54,720 --> 00:41:00,690 რა უარესი გაშვებული დრო მოძიების ან ჩასმა ანიტა ამ ახალი სტრუქტურის მონაცემები? 678 00:41:00,690 --> 00:41:03,280 ეს O (N), არა? 679 00:41:03,280 --> 00:41:06,280 რადგან უარეს შემთხვევაში, არსებობს Alice, ბობ, ჩარლი. . . 680 00:41:06,280 --> 00:41:10,150 ყველა გზა ქვემოთ ვინმე "Y", ასე რომ, მხოლოდ ერთი ლაქა დატოვა. 681 00:41:10,150 --> 00:41:13,950 საბედნიეროდ, ჩვენ არ გვაქვს ერთი სახელწოდებით "Z", ამიტომ ჩვენ დააყენა ანიტა დროს ძალიან ბოლოში. 682 00:41:13,950 --> 00:41:16,040 >> ჩვენ ნამდვილად არ მოგვარდება, რომ პრობლემა. 683 00:41:16,040 --> 00:41:19,890 იქნებ ჩვენ უნდა გააცნოს ამ მესამე განზომილება. 684 00:41:19,890 --> 00:41:22,230 და თურმე, თუ ჩვენ ამ თანამედროვე მესამე განზომილება, 685 00:41:22,230 --> 00:41:25,240 ჩვენ არ შეგვიძლია ამის გაკეთება კარგად, მაგრამ წმიდა გრაალი იქნება მიღების 686 00:41:25,240 --> 00:41:28,370 მუდმივი დროში Insertion და დინამიური insertions ისე, რომ 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 ყველა უფლება. მე მითითებული ამბავი up საკმაოდ ხელოვნურად არსებობს 691 00:41:46,020 --> 00:41:48,670 არჩევით Alice და შემდეგ ბობ და შემდეგ ჩარლი და შემდეგ ანიტა, 692 00:41:48,670 --> 00:41:51,000 რომლის სახელი იყო აშკარად აპირებს collide ერთად Alice. 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 თუ ჩვენ დავიწყებთ გამოიყენოს ეს tabular სტრუქტურა, რომელიც რეალურად მხოლოდ მასივი, 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 ეს არ არის ხელოვნურად Alice და ბობ და ჩარლი და დავით და სხვ ალფავიტის, 699 00:42:09,620 --> 00:42:12,380 ის ერთნაირად გავრცელებული მეშვეობით ზ 700 00:42:12,380 --> 00:42:15,220 >> იქნებ ჩვენ უბრალოდ გაუმართლა და ჩვენ არ ვაპირებთ, რომ გვქონდეს ორი ან ორი B-ს 701 00:42:15,220 --> 00:42:17,640 ძალიან მაღალი ალბათობით, მაგრამ როგორც ვიღაცამ აღნიშნა, 702 00:42:17,640 --> 00:42:20,730 თუ ჩვენ განზოგადებული ეს პრობლემა და არ გააკეთებს 0 დან 25 703 00:42:20,730 --> 00:42:26,060 მაგრამ, ვთქვათ, 0 მეშვეობით 364 ან 65, ხშირად ხმების დღე ტიპიური წელი, 704 00:42:26,060 --> 00:42:31,170 და კითხვას, "რა არის ალბათობა, რომ ორი ჩვენგანი ამ ოთახში აქვს იგივე დღე?" 705 00:42:31,170 --> 00:42:34,600 ამას სხვა გზა, რა ალბათობა, რომ ორი უნდა გვქონდეს სახელი იწყება? 706 00:42:34,600 --> 00:42:37,190 სახის შეკითხვა იგივეა, მაგრამ ამ მისამართზე სივრცეში, 707 00:42:37,190 --> 00:42:39,940 ამ ძებნის სივრცეში, მეტია იმ შემთხვევაში, დაბადების, 708 00:42:39,940 --> 00:42:42,820 იმიტომ, რომ ჩვენ ამდენი მეტი დღით წელიწადში ვიდრე შრიფტით ანბანი. 709 00:42:42,820 --> 00:42:44,910 რა არის ალბათობა შეჯახება? 710 00:42:44,910 --> 00:42:48,410 ასევე, ჩვენ შეიძლება ვიფიქროთ ამ მიერ მჭიდროდაა გარეთ მათემატიკის საპირისპირო გზა. 711 00:42:48,410 --> 00:42:50,580 რა არის ალბათობა არ collisions? 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 მათი დაბადების დღე არ collide ერთად სხვა პირები. 722 00:43:23,580 --> 00:43:31,920 ასე რომ 364/365. თუ მესამე პირი მოდის, ის 363/365 და ა.შ.. 723 00:43:31,920 --> 00:43:35,790 ამიტომ, ჩვენ შევინარჩუნოთ გამრავლებით ერთად ამ ფრაქციები, რომლებიც მიღების პატარა და პატარა, 724 00:43:35,790 --> 00:43:40,720 გაერკვნენ, რა არის ალბათობა, რომ ყველას უნდა გვქონდეს უნიკალური დაბადების? 725 00:43:40,720 --> 00:43:43,570 მაგრამ შემდეგ ჩვენ შეგვიძლია, რა თქმა უნდა, მხოლოდ მიიღოს, რომ პასუხი და Flip ირგვლივ 726 00:43:43,570 --> 00:43:47,210 და ნუ 1 მინუს ყველაფრისა, გამოხატვის ჩვენ საბოლოოდ მისაღებად 727 00:43:47,210 --> 00:43:51,250 თუ გახსოვთ უკან თქვენი მათემატიკის წიგნი, ეს გამოიყურება პატარა რაღაც მსგავსი, 728 00:43:51,250 --> 00:43:54,590 რომელიც ბევრად უფრო ადვილად ინტერპრეტირებული გრაფიკულად. 729 00:43:54,590 --> 00:43:57,820 და ამ გრაფიკული აქ უკვე შესახებ x ღერძი ხმების დაბადების, 730 00:43:57,820 --> 00:44:02,030 ან რაოდენობის მქონე ადამიანების დაბადების, და Y ღერძი არის ალბათობა მატჩი. 731 00:44:02,030 --> 00:44:06,060 და რა ამ ამბობს, რომ თუ თქვენ გაქვთ, ასე ვთქვათ, თუნდაც, 732 00:44:06,060 --> 00:44:10,860 მოდით ავირჩიოთ რაღაც 22, 23. 733 00:44:10,860 --> 00:44:13,160 თუ ის 22 ან 23 ადამიანი ოთახი, 734 00:44:13,160 --> 00:44:17,100 ალბათობა, რომ ორი იმ ძალიან ცოტა ხალხი აპირებს იგივე დაბადების დღე 735 00:44:17,100 --> 00:44:19,560 ფაქტიურად სუპერ მაღალი, combinatorially. 736 00:44:19,560 --> 00:44:23,450 50% შანსები რომ კლასი მხოლოდ 22 ადამიანი, სემინარი, პრაქტიკულად, 737 00:44:23,450 --> 00:44:25,790 2 იმ ადამიანების ვაპირებთ აქვს იგივე დღე. 738 00:44:25,790 --> 00:44:28,520 იმის გამო, რომ იქ ამდენი გზა, რომელიც შეგიძლიათ აქვს იგივე დღე. 739 00:44:28,520 --> 00:44:31,110 კიდევ უფრო უარესი, თუ გადავხედავთ მარჯვენა მხარეს გრაფიკი, 740 00:44:31,110 --> 00:44:34,040 იმ დროისთვის თქვენ გაქვთ კლასი 58 სტუდენტი მასში, 741 00:44:34,040 --> 00:44:39,270 ალბათობა 2 მქონე ადამიანები დაბადების დღე არის სუპერ, სუპერ მაღალი, თითქმის 100%. 742 00:44:39,270 --> 00:44:41,880 ახლა, რომ სახის გართობა ფაქტი ნამდვილ ცხოვრებაში. 743 00:44:41,880 --> 00:44:45,850 >> მაგრამ შედეგებზე, ახლა, მონაცემთა სტრუქტურები და შენახვის 744 00:44:45,850 --> 00:44:51,100 იმას ნიშნავს, რომ მხოლოდ ვთქვათ თქვენ გაქვთ ლამაზი, სუფთა, თანაბარი განაწილება მონაცემები 745 00:44:51,100 --> 00:44:53,650 და თქვენ დიდი საკმარისი მასივი, რათა შეწყობოდა bunch რამ 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 აღების შეყვანის როგორიცაა "Alice" და massaging მას რამდენიმე გზა 749 00:45:07,450 --> 00:45:10,190 და შემდეგ დავუბრუნდეთ პასუხი მოსწონს 0 ან 1 ან 2. 750 00:45:10,190 --> 00:45:17,500 დავუბრუნდეთ ზოგიერთ გამომავალი რომ ფუნქცია ხშირია ამ ალბათობა შეჯახება. 751 00:45:17,500 --> 00:45:19,530 ასე რომ როგორ შეგვიძლია გაუმკლავდეს იმ შეჯახებების? 752 00:45:19,530 --> 00:45:21,940 ისე, ერთის შემთხვევაში, შეგვიძლია იდეა, რომელიც შესთავაზა. 753 00:45:21,940 --> 00:45:25,100 ჩვენ შეგვიძლია მხოლოდ გადაეტანა ყველას ქვემოთ, ან იქნებ, ცოტა უფრო უბრალოდ, 754 00:45:25,100 --> 00:45:29,870 ვიდრე ნაბიჯი ყველას, მოდით უბრალოდ გადაადგილება ანიტა ბოლოში შესაძლებელი ადგილზე. 755 00:45:29,870 --> 00:45:32,810 ასე რომ, თუ Alice არის 0, ბობ არის 1, ჩარლი არის 2, 756 00:45:32,810 --> 00:45:35,260 ჩვენ უბრალოდ დააყენა ანიტა ზე საიდან 3. 757 00:45:35,260 --> 00:45:38,860 და ეს არის ტექნიკის მონაცემთა სტრუქტურების მოუწოდა ხაზოვანი probing. 758 00:45:38,860 --> 00:45:41,310 ხაზოვანი რადგან თქვენ მხოლოდ ფეხით ამ ხაზი, და თქვენ ერთგვარი საცდელი 759 00:45:41,310 --> 00:45:43,640 ამისთვის ხელმისაწვდომი ლაქების მონაცემთა სტრუქტურას. 760 00:45:43,640 --> 00:45:46,210 რა თქმა უნდა, ამ devolves შევიდა O (N). 761 00:45:46,210 --> 00:45:49,590 თუ მონაცემები სტრუქტურა მართლაც სრული, იქ 25 ადამიანი უკვე, 762 00:45:49,590 --> 00:45:54,120 და შემდეგ ანიტა მოდის გასწვრივ, მან მთავრდება რა იქნებოდა საიდან Z, და ეს ჯარიმა. 763 00:45:54,120 --> 00:45:56,540 იგი დღესაც ჯდება, და ჩვენ შეგვიძლია მოვძებნოთ მისი მოგვიანებით. 764 00:45:56,540 --> 00:46:00,100 >> მაგრამ ეს იყო ეწინააღმდეგება მიზანი სისწრაფეს რამ up. 765 00:46:00,100 --> 00:46:02,530 მერე რა რომ ჩვენ ნაცვლად გააცნო ამ მესამე განზომილების? 766 00:46:02,530 --> 00:46:06,400 რომ ტექნიკა ზოგადად მოუწოდა ცალკე chaining, ან მქონე ჯაჭვების. 767 00:46:06,400 --> 00:46:10,030 და რა hash მაგიდაზე ახლა არის, ამ tabular სტრუქტურა, 768 00:46:10,030 --> 00:46:13,450 თქვენი მაგიდა მხოლოდ მასივი პოინტერები. 769 00:46:13,450 --> 00:46:18,230 მაგრამ რა იმ პოინტერები აღვნიშნო, რომ არის გამოიცანით რა? 770 00:46:18,230 --> 00:46:21,970 უკავშირდება სიაში. მერე რა რომ ჩვენ საუკეთესო ორივე სამყაროს? 771 00:46:21,970 --> 00:46:26,500 ჩვენ ვიყენებთ კოლექტორები ამისთვის საწყის ინდექსები 772 00:46:26,500 --> 00:46:32,070 შევიდა მონაცემები სტრუქტურა ასე შეგვიძლია მომენტალურად წასვლა [0] [1], [30] ან სხვ, 773 00:46:32,070 --> 00:46:36,480 მაგრამ ისე, რომ ჩვენ გვაქვს გარკვეული მოქნილობა და ჩვენ შეგვიძლია ჯდება ანიტა და Alice და ადამ 774 00:46:36,480 --> 00:46:38,630 და ნებისმიერი სხვა სახელი, 775 00:46:38,630 --> 00:46:43,470 ჩვენ ნაცვლად ნება სხვა ღერძი იზრდება თვითნებურად. 776 00:46:43,470 --> 00:46:47,340 ჩვენ საბოლოოდ, როგორც ორშაბათს, აქვს, რომ ექსპრესიული შესაძლებლობების დაკავშირებული სიაში. 777 00:46:47,340 --> 00:46:49,530 ჩვენ შეგვიძლია იზრდება მონაცემები სტრუქტურა თვითნებურად. 778 00:46:49,530 --> 00:46:52,450 გარდა ამისა, ჩვენ შეგვიძლია მხოლოდ იმის უზარმაზარი 2 განზომილებიანი მასივი, 779 00:46:52,450 --> 00:46:57,190 მაგრამ ეს იქნება საშინელი სიტუაცია, თუ ერთი მწკრივების 2 განზომილებიანი მასივი 780 00:46:57,190 --> 00:47:01,280 არ არის დიდი საკმარისი დამატებითი პირი, რომლის სახელი ხდება იწყება ა 781 00:47:01,280 --> 00:47:04,200 ღმერთმა ნუ ქნას, რომ ჩვენ უნდა reallocate უზარმაზარი 2 განზომილებიანი სტრუქტურა 782 00:47:04,200 --> 00:47:06,600 მხოლოდ იმიტომ, რომ იქ ამდენი ადამიანი დაასახელა, 783 00:47:06,600 --> 00:47:09,480 განსაკუთრებით მაშინ, როდესაც იქ ასე ცოტა ადამიანი დაასახელა Z რაღაც. 784 00:47:09,480 --> 00:47:12,170 უბრალოდ იქნება ძალიან sparse მონაცემები სტრუქტურა. 785 00:47:12,170 --> 00:47:15,400 ასე რომ არ არის სრულყოფილი ნებისმიერი საშუალებით, მაგრამ ახლა ჩვენ სულ ცოტა აქვს უნარი 786 00:47:15,400 --> 00:47:19,090 დან მყისიერად მოვძებნოთ სადაც Alice ან ანიტა ეკუთვნის, 787 00:47:19,090 --> 00:47:21,090 მინიმუმ თვალსაზრისით ვერტიკალური ღერძი, 788 00:47:21,090 --> 00:47:25,850 და მაშინ ჩვენ უბრალოდ უნდა გადაწყვიტოს სად უნდა დააყენოს ანიტა ან Alice ამ ბმის სიაში. 789 00:47:25,850 --> 00:47:32,480 თუ ჩვენ არ აინტერესებს დახარისხება რამ, რამდენად სწრაფად შეგვეძლო ჩადეთ Alice შევიდა სტრუქტურა ასე? 790 00:47:32,480 --> 00:47:35,370 ეს მუდმივი დრო. ჩვენ ინდექსი შევიდა [0], და თუ არავის იქ, 791 00:47:35,370 --> 00:47:37,550 Alice მიდის დაწყების რომ უკავშირდება სიაში. 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. Alice უკვე რომ უკავშირდება სიაში. 795 00:47:45,140 --> 00:47:47,760 >> მაგრამ თუ ჩვენ არ აინტერესებს დახარისხება ეს სახელები, 796 00:47:47,760 --> 00:47:53,580 ჩვენ შეგვიძლია მხოლოდ გადაადგილება Alice მეტი, ჩადეთ ანიტა, მაგრამ რომ არის მუდმივი დრო. 797 00:47:53,580 --> 00:47:57,010 მაშინაც კი, თუ არსებობს Alice და ადამ და ყველა ეს სხვა სახელები, 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 ყველა თქვენ უნდა გააკეთოთ გადაადგილება პური crumbs. 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 ასე რომ, ჩვენ გვაქვს მუდმივი დროში lookup და მუდმივი დროში ჩასმა ვინმეს მოსწონს Anita. 804 00:48:20,250 --> 00:48:22,740 მაგრამ სახის oversimplifying მსოფლიოში. 805 00:48:22,740 --> 00:48:28,510 რა მოხდება, თუ ჩვენ მოგვიანებით გვსურს მოვძებნოთ Alice? 806 00:48:28,510 --> 00:48:31,050 რა მოხდება, თუ ჩვენ მოგვიანებით გვსურს მოვძებნოთ Alice? 807 00:48:31,050 --> 00:48:35,690 რამდენი ნაბიჯების რომ აპირებს? 808 00:48:35,690 --> 00:48:37,850 [სტუდენტური პასუხი, გაუგებარია] 809 00:48:37,850 --> 00:48:40,950 სწორედ. რაოდენობის ხალხი წინაშე ალისა უკავშირდება სიაში. 810 00:48:40,950 --> 00:48:45,420 ასე რომ არ საკმაოდ სრულყოფილი, რადგან ჩვენი მონაცემები სტრუქტურას, კვლავ აქვს ამ ვერტიკალური ხელმისაწვდომობის 811 00:48:45,420 --> 00:48:50,240 და შემდეგ მას ეს დაკავშირებული სიები ჩამოკიდებული - ფაქტობრივად, მოდით არ დაიხევს ეს მასივი. 812 00:48:50,240 --> 00:48:56,020 იგი ამ ბმის სიები ჩამოკიდებული off ის რომ გამოიყურება პატარა რაღაც მსგავსი. 813 00:48:56,020 --> 00:48:59,110 მაგრამ პრობლემა ის არის, თუ Alice და ადამ და ყველა ეს სხვა სახელები 814 00:48:59,110 --> 00:49:01,720 დასრულდება მდე სულ უფრო და უფრო მეტი არსებობს, 815 00:49:01,720 --> 00:49:04,810 მოძიებაში ვინმეს შეიძლება დასრულდეს up აღების bunch of ნაბიჯები, 816 00:49:04,810 --> 00:49:06,670 bcause თქვენ უნდა traverse დაკავშირებული სიაში, 817 00:49:06,670 --> 00:49:08,090 რაც ხაზოვანი ოპერაცია. 818 00:49:08,090 --> 00:49:14,270 ასე ნამდვილად, მაშინ, Insertion დრო საბოლოოდ არის O (N), სადაც n რაოდენობის ელემენტების სიაში. 819 00:49:14,270 --> 00:49:21,780 გაყოფილი, მოდით თვითნებურად ეძახით m, სადაც m არის ხმების დაკავშირებული სიები 820 00:49:21,780 --> 00:49:24,500 რომ ჩვენ გვაქვს ამ ვერტიკალური ღერძი. 821 00:49:24,500 --> 00:49:27,180 სხვა სიტყვებით, თუ ჩვენ ნამდვილად ვივარაუდოთ, თანაბარი განაწილება სახელები, 822 00:49:27,180 --> 00:49:30,150 სრულიად არარეალურია. იქ აშკარად უფრო ზოგიერთი წერილებს, ვიდრე სხვები. 823 00:49:30,150 --> 00:49:32,580 >> მაგრამ თუ ჩვენ დავუშვათ მომენტში თანაბარი განაწილება, 824 00:49:32,580 --> 00:49:37,350 და ჩვენ 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 და ჩვენ არა ვართ resizing ვერტიკალური ღერძი. ზოგადად, რომ რჩება დაფიქსირდა. 831 00:49:58,450 --> 00:50:01,220 ეს მხოლოდ ჰორიზონტალური ღერძი, ასე ვთქვათ, რომ იცვლება. 832 00:50:01,220 --> 00:50:04,760 ასე რომ ტექნიკურად, ეს არის მუდმივი. ახლა, Insertion დრო 833 00:50:04,760 --> 00:50:09,700 არის საკმაოდ ბევრი O (N). 834 00:50:09,700 --> 00:50:12,410 ასე რომ ვერ გრძნობს ყველა, რომ ბევრად უკეთესი. 835 00:50:12,410 --> 00:50:14,940 მაგრამ რა არის ჭეშმარიტება აქ? ისე, მთელი ამ ხნის, კვირების განმავლობაში, 836 00:50:14,940 --> 00:50:20,640 ჩვენ ვამბობდით O (N ²). O (N), 2 x n ², - N, გაყოფილი 2. . . ech. 837 00:50:20,640 --> 00:50:23,580 უბრალოდ n ². მაგრამ ახლა, ამ ნაწილში სემესტრის 838 00:50:23,580 --> 00:50:25,560 ჩვენ შეგვიძლია დავიწყოთ ლაპარაკი რეალური მსოფლიოს კიდევ ერთხელ. 839 00:50:25,560 --> 00:50:31,520 და N / მ სრულიად სწრაფად, ვიდრე უბრალოდ 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 ფიქრი ზუსტად, რომ მიუხედავად იმისა, yeah, 845 00:50:46,100 --> 00:50:49,520 asymptotically და მათემატიკურად, ეს მაინც მხოლოდ წრფივი, 846 00:50:49,520 --> 00:50:51,700 რომელიც sucks ზოგადად, როდესაც ცდილობს იპოვოს რამ. 847 00:50:51,700 --> 00:50:54,530 სინამდვილეში, ეს იქნება უფრო სწრაფად, ვიდრე, რომ 848 00:50:54,530 --> 00:50:56,520 რადგან ამ divisor. 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 >> მაშ როგორ დადიხართ შესახებ ახორციელებს დაკავშირებული - hash მაგიდასთან 31 ელემენტებს? 857 00:51:19,950 --> 00:51:22,600 და წინა მაგალითი იყო თვითნებურად შესახებ დაბადების. 858 00:51:22,600 --> 00:51:26,190 თუ ვინმეს დაბადების დღე 1 იანვრიდან ან 1 თებერვალს, ჩვენ დააყენა მათ ამ bucket. 859 00:51:26,190 --> 00:51:28,960 თუ ეს 2 იანვარი, 2 თებერვალს, 2 მარტს, ჩვენ დააყენა მათ ამ bucket. 860 00:51:28,960 --> 00:51:32,220 ამიტომ იყო 31. როგორ განაცხადოს hash მაგიდასთან? 861 00:51:32,220 --> 00:51:37,480 ეს შეიძლება იყოს საკმაოდ მარტივია, node * მაგიდასთან არის ჩემი თვითნებური სახელი მას, [31]. 862 00:51:37,480 --> 00:51:42,400 ეს მაძლევს 31 მითითებას კვანძების, 863 00:51:42,400 --> 00:51:45,370 და რომელიც საშუალებას აძლევს ჩემთვის აქვს 31 მითითებას უკავშირდება სიები 864 00:51:45,370 --> 00:51:48,800 მაშინაც კი, თუ იმ ჯაჭვების თავდაპირველად null. 865 00:51:48,800 --> 00:51:54,860 რა მინდა დააყენა თუ მინდა შესანახად "Alice", "ბობ", "ჩარლი"? 866 00:51:54,860 --> 00:51:57,010 ასევე, ჩვენ უნდა გადაიტანოთ იმ რამ სტრუქტურა 867 00:51:57,010 --> 00:52:00,530 რადგან ჩვენ გვჭირდება Alice აღვნიშნო, რომ ბობ, აღვნიშნო, რომ ჩარლი და სხვ. 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 სიმბოლო Crazy კუთხეში შემთხვევაში, 873 00:52:18,210 --> 00:52:22,680 და +1 არის რა? უბრალოდ ზედმეტი NULL ხასიათი, \ 0. 874 00:52:22,680 --> 00:52:27,410 ასე რომ, ეს არის კვანძის შესაფუთი "რაღაც" შიგნით თავისთავად 875 00:52:27,410 --> 00:52:29,640 მაგრამ ეს ასევე აცხადებს მაჩვენებელი მოუწოდა შემდეგი 876 00:52:29,640 --> 00:52:32,580 რათა შევძლოთ ჯაჭვის Alice to ბობ to ჩარლი და სხვ. 877 00:52:32,580 --> 00:52:36,700 შეიძლება იყოს NULL მაგრამ სულაც არ უნდა იყოს. 878 00:52:36,700 --> 00:52:40,110 ნებისმიერი კითხვები ამ hash მაგიდები? ჰო? 879 00:52:40,110 --> 00:52:46,190 [სტუდენტური სვამს კითხვას, გაუგებარია] მასივი - კარგი კითხვაა. 880 00:52:46,190 --> 00:52:50,120 რატომ არის ეს char სიტყვა მასივი, ვიდრე უბრალოდ char *? 881 00:52:50,120 --> 00:52:53,830 ამ გარკვეულწილად თვითნებური მაგალითად, მე არ მინდა მიმართო 882 00:52:53,830 --> 00:52:56,190 to malloc თითოეული ორიგინალური სახელები. 883 00:52:56,190 --> 00:52:59,530 მინდოდა განაცხადოს მაქსიმალური მეხსიერების სიმებიანი 884 00:52:59,530 --> 00:53:06,020 ასე რომ მე ვერ კოპირება შევიდა სტრუქტურა Alice \ 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 და ზოგიერთი jargon რომ ხედავთ ამ სურათში აქ 898 00:53:47,320 --> 00:53:50,630 არის რომელიმე პატარა ბავშვები ან grandkids on კიდეები 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 ასე რომ, ჩვენ შეიძლება ჰქონდეთ განსხვავებული ზომის ხეები, მაგრამ თუ ჩვენ დავიწყებთ standardize რამ, 906 00:54:10,740 --> 00:54:15,330 და თქვენ ალბათ გავიხსენოთ ამ საწყისი პატრიკ ს ვიდეო ორობითი ძებნა საწყისი წინა მოკლე 907 00:54:15,330 --> 00:54:19,490 შემოსული, ორობითი ძებნა არ უნდა განხორციელდეს მასივი 908 00:54:19,490 --> 00:54:21,410 ან ცალი მოხსენება დაფაზე. 909 00:54:21,410 --> 00:54:25,490 დავუშვათ, რომ თქვენ სურდა ჩაწეროთ თქვენი ნომრები უფრო დახვეწილი მონაცემები სტრუქტურა. 910 00:54:25,490 --> 00:54:27,680 თქვენ შეუქმნიდა ხე მოსწონს ეს. 911 00:54:27,680 --> 00:54:35,290 თქვენ შეიძლება კვანძის გამოცხადებული C, და რომ კვანძის შეიძლება ჰქონდეს არანაკლებ ორი ელემენტების შიგნით მას. 912 00:54:35,290 --> 00:54:39,470 ერთი ნომრის გსურთ შესანახად, და სხვა არის - კარგად, ჩვენ გვჭირდება კიდევ ერთი. 913 00:54:39,470 --> 00:54:41,540 სხვა არის მისი შვილი. 914 00:54:41,540 --> 00:54:45,150 ასე რომ აქ კიდევ ერთი მონაცემები სტრუქტურა. ამჯერად, node განისაზღვრება, როგორც შენახვის ნომერი N 915 00:54:45,150 --> 00:54:49,060 და შემდეგ ორი მაჩვენებლებს; მარცხენა ბავშვი და მარჯვენა შვილი. 916 00:54:49,060 --> 00:54:52,100 და ისინი არ თვითნებური. რა არის საინტერესო ამ ხეს? 917 00:54:52,100 --> 00:55:00,550 >> რა არის ნიმუში, როგორ ჩვენ ჩაუყარა ამ გამოსვლა ან როგორ პატრიკ ჩაუყარა მას თავის ვიდეო? 918 00:55:00,550 --> 00:55:02,790 ეს სახის აშკარაა, რომ არსებობს გარკვეული დახარისხება მიმდინარეობს აქ, 919 00:55:02,790 --> 00:55:04,460 მაგრამ რა მარტივი წესი? ჰო? 920 00:55:04,460 --> 00:55:08,350 [სტუდენტური პასუხი, გაუგებარია] 921 00:55:08,350 --> 00:55:12,040 Perfect. თუ ერთი შეხედვით ეს, ხედავთ პატარა ნომრები მარცხენა 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 მე უნდა იწყება root, რადგან როგორც ყველა ამ უფრო რთული მონაცემები სტრუქტურები არის, 926 00:55:29,320 --> 00:55:31,910 ჩვენ მხოლოდ მომცეთ ერთი რამ, დასაწყისია. 927 00:55:31,910 --> 00:55:35,010 და ამ შემთხვევაში, დასაწყისში არის root. ეს არ არის ბოლომდე მარცხენა, 928 00:55:35,010 --> 00:55:39,530 ეს root ამ სტრუქტურის. ასე რომ მე ვერ ვხედავ აქ 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 ასე რომ შეამჩნია აქ, თქვენ ერთგვარი კონცეპტუალურად chopping ხე ნახევარ 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 ეს საკმაოდ ბევრი იდენტური კონცეპტუალურად to სატელეფონო წიგნი. 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 სტრუქტურა მოსწონს - whoops. 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 ან გავლით იგი სახლში, ბინარული ძებნის გამოყენებით უკან დაბრუნების ან iteration, 944 00:56:31,270 --> 00:56:35,060 ეს ტკივილი კისრის. მოძებნა შუა ელემენტს, მაშინ ნუ თქვენი დამრგვალება ან ქვემოთ. 945 00:56:35,060 --> 00:56:39,230 >> არსებობს სილამაზის ამ რადგანაც ჩვენ არ შეგვიძლია ახლა გამოვიყენოთ უკან ისევ, 946 00:56:39,230 --> 00:56:43,760 მაგრამ ბევრად უფრო cleanly. მართლაც, თუ თქვენ დროს ხმების 55 და თქვენ გსურთ იპოვოთ 44, 947 00:56:43,760 --> 00:56:48,450 თქვენ გადასვლა დაუტოვებიათ ამ შემთხვევაში, მაშინ რას აკეთებ? თქვენ აწარმოებს ზუსტად იგივე ალგორითმი. 948 00:56:48,450 --> 00:56:51,560 თქვენ შეამოწმოთ ღირებულება კვანძში, მაშინ წავიდეს მარცხნივ და მარჯვნივ. 949 00:56:51,560 --> 00:56:53,670 მაშინ თქვენ შეამოწმოთ ღირებულება კვანძში, წავიდეს მარცხნივ და მარჯვნივ. 950 00:56:53,670 --> 00:56:56,710 ეს არის იდეალურად შეეფერება, რათა უკან დაბრუნების. 951 00:56:56,710 --> 00:57:00,920 ასე რომ, მიუხედავად იმისა, რომ წარსულში ჩვენ გავაკეთეთ რამდენიმე საკმაოდ თვითნებური მაგალითები ჩართვის უკან 952 00:57:00,920 --> 00:57:03,430 რომ არ უნდა იყოს რეკურსიული, მონაცემთა stuctures, 953 00:57:03,430 --> 00:57:07,820 განსაკუთრებით ხეები, ეს სრულყოფილი განაცხადის ამ იდეის აღების პრობლემა, 954 00:57:07,820 --> 00:57:12,920 მცირდება, და მაშინ გადაჭრის იგივე ტიპის, მაგრამ უფრო პატარა, პროგრამა. 955 00:57:12,920 --> 00:57:14,590 >> ასე რომ კიდევ ერთი მონაცემები სტრუქტურის, რომ ჩვენ შეგვიძლია წარმოგიდგინოთ. 956 00:57:14,590 --> 00:57:18,760 ეს ერთი განკუთვნილია ერთი შეხედვით, თვალი cryptic, მაგრამ ეს ერთი საოცარი. 957 00:57:18,760 --> 00:57:25,090 ასე რომ, ეს მონაცემები სტრუქტურა მოუწოდა trie, trie, რომელიც მემკვიდრეობით სიტყვის მოძიება, 958 00:57:25,090 --> 00:57:30,210 რომელიც არ წარმოითქმის ხელახალი მცდელობა-Val, მაგრამ ეს რა მსოფლიოს მოუწოდებს ეს ყველაფერი. ცდილობს. T-r-i-e. 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 მოსწონს-L-I-C-e ან B-o-B. 965 00:57:57,330 --> 00:58:02,480 და ამ გზით ამ მონაცემთა მაღაზიებში Alice და ბობ და ჩარლი და ანიტა და ა.შ. 966 00:58:02,480 --> 00:58:06,970 იგი იყენებს მასივი რომლის შესანახად ალისა trie, 967 00:58:06,970 --> 00:58:09,820 ჩვენ იწყება root node რომელიც ჰგავს მასივი, 968 00:58:09,820 --> 00:58:12,080 და მისთვის დაწერილი სტენოგრამის ნოტაცია. 969 00:58:12,080 --> 00:58:15,070 ავტორი გამოტოვებული abcdefg რადგან არ იყო სახელები, რომ. 970 00:58:15,070 --> 00:58:19,150 ისინი მხოლოდ აჩვენა M და P და T, მაგრამ ამ შემთხვევაში, 971 00:58:19,150 --> 00:58:22,780 მოდით გადავიდეს დაშორებით Alice და ბობ და ჩარლი ზოგიერთი სახელები, რომ აქ ხართ. 972 00:58:22,780 --> 00:58:25,670 Maxwell ფაქტიურად ამ დიაგრამაზე. 973 00:58:25,670 --> 00:58:29,570 ასე როგორ მოხდა ავტორი მაღაზიის M--x-W-e-L-მ? 974 00:58:29,570 --> 00:58:36,990 მან დაიწყო ძირეული კვანძის და წავიდა [M], ასე უხეშად 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 და წავიდა კურსორი at საიდან X. 980 00:58:55,460 --> 00:58:59,840 შემდეგ კი შემდეგი მასივი საიდან W, E, L, L, და ა.შ., 981 00:58:59,840 --> 00:59:03,090 და ბოლოს, მოდით რეალურად ვცდილობ მას გამოსახულება ამ. 982 00:59:03,090 --> 00:59:05,380 რას კვანძის ჰგავს კოდის? 983 00:59:05,380 --> 00:59:11,820 კვანძის წელს 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 თქვენ არ წერილობით მ თქვენ არ წერა X. 989 00:59:27,480 --> 00:59:30,240 ყველა თქვენ აკეთებთ არის შემდეგ მითითებას. 990 00:59:30,240 --> 00:59:33,360 მაჩვენებელი, რომელიც წარმოადგენს M, მაშინ მაჩვენებელი, რომელიც წარმოადგენს, 991 00:59:33,360 --> 00:59:36,310 მაშინ მაჩვენებელი, რომელიც წარმოადგენს X, მაშინ W, E, L, L, 992 00:59:36,310 --> 00:59:41,950 მაგრამ, რაც თქვენ გჭირდებათ რომ გააკეთოთ დასასრულს არის ერთგვარი წასვლა, ჩეკი, მე მიაღწია ამ ადგილას. 993 00:59:41,950 --> 00:59:45,560 იყო სიტყვა, რომელიც დამთავრდა აქ მონაცემები სტრუქტურა. 994 00:59:45,560 --> 00:59:48,190 >> მერე რა 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 ნიშნავს თუ უკან in ხე, 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 არ არის ხე, რადგან თუ მე იწყება root node აქ ზედა, 1001 01:00:07,970 --> 01:00:14,030 იქ არ არის ვ მაჩვენებელი, არ o მაჩვენებელი, არ o მაჩვენებელი. Foo არ არის სახელი ამ ლექსიკონი. 1002 01:00:14,030 --> 01:00:22,460 მაგრამ ამის საპირისპიროდ, turing, t-U-r-i-n-გ. ისევ და ისევ, მე არ შესანახად t ან U ან 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 და მოძიებაში ერთი იმ სიტყვა ალფავიტის შეეძლო O (N) დროს. 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 რამდენი დრო სჭირდება მოძებნის ან ჩადეთ კიდევ ერთი პირი, რომ, როგორც Alice, Alice? 1018 01:01:25,560 --> 01:01:30,640 ისე, ეს მხოლოდ 5, შესაძლოა 6 ნაბიჯები გადმოკიდული ხასიათი. 1019 01:01:30,640 --> 01:01:32,880 რადგან presense სხვა სახელების სტრუქტურის 1020 01:01:32,880 --> 01:01:35,340 არ მიიღონ გზა ჩასმა Alice. 1021 01:01:35,340 --> 01:01:39,640 უფრო მეტიც, მოძიებაში Alice ერთხელ არსებობს 150,000 სიტყვა ამ ლექსიკონი 1022 01:01:39,640 --> 01:01:41,960 არ მიიღოთ თქვენს გზას მოძიებაში Alice ყველა, 1023 01:01:41,960 --> 01:01:46,880 რადგან Alice არის. . . . . აქ, იმიტომ, რომ მე ი ლოგიკური მნიშვნელობა. 1024 01:01:46,880 --> 01:01:50,920 და თუ არ არსებობს ლოგიკური მართალია, მაშინ Alice არ არის ამ მონაცემების სტრუქტურას სიტყვა. 1025 01:01:50,920 --> 01:01:56,220 სხვა სიტყვებით, გაშვებული დრო მოძიებაში ნივთები და ჩასმა რამ ამ ახალ 1026 01:01:56,220 --> 01:02:01,920 მონაცემები სტრუქტურა trie არის O of - ეს არ ნ. 1027 01:02:01,920 --> 01:02:05,730 რადგან presense of 150,000 ადამიანი ვიზიტორების გავლენას Alice, როგორც ჩანს. 1028 01:02:05,730 --> 01:02:11,560 მოდით ეძახით K, სადაც K არის მაქსიმალური სიგრძე სიტყვა ინგლისურ 1029 01:02:11,560 --> 01:02:14,050 რაც, როგორც წესი, არა უმეტეს 20-რაღაც სიმბოლოებს. 1030 01:02:14,050 --> 01:02:17,940 ასე რომ K არის მუდმივი. ამიტომ წმიდა გრაალი ჩვენ, როგორც ჩანს, არ არის ნაპოვნი 1031 01:02:17,940 --> 01:02:26,000 ის არის, რომ საქართველოს trie, მუდმივი დრო ჩანართები, ამისთვის lookups, ამისთვის წაშლებს. 1032 01:02:26,000 --> 01:02:29,170 რაოდენობის გამო, რამ უკვე სტრუქტურა, 1033 01:02:29,170 --> 01:02:32,600 რომელიც კი არ არის ფიზიკურად არსებობს. ისევ და ისევ, ისინი მხოლოდ დასალაგებლად გადამოწმებული off, დიახ ან არა, 1034 01:02:32,600 --> 01:02:35,050 ვიზიტორების ზეგავლენა მისი მომავალი ქრონომეტრაჟი. 1035 01:02:35,050 --> 01:02:37,940 >> მაგრამ რაღაც უნდა იყოს დაჭერა, თორემ არ შეეწირა ამდენი დრო 1036 01:02:37,940 --> 01:02:41,460 ყველა ამ სხვა მონაცემები სტრუქტურების უბრალოდ საბოლოოდ მისაღებად საიდუმლო ერთი რომ საოცარი. 1037 01:02:41,460 --> 01:02:46,410 მერე რა ფასი ჩვენ გადამხდელი, რათა მივაღწიოთ ამ სიდიადე აქ? ფართი. 1038 01:02:46,410 --> 01:02:49,010 ეს ის არის, მასიური. და მიზეზით, რომ ავტორი 1039 01:02:49,010 --> 01:02:52,400 არ დაუსახელებია აქ შეამჩნევთ, რომ ყველა ამ საკითხზე, რომ გამოიყურებოდეს მასივები, 1040 01:02:52,400 --> 01:02:55,400 იგი არ შეუდგენიათ დანარჩენი ხე, დანარჩენი trie, 1041 01:02:55,400 --> 01:02:58,060 რადგან ისინი უბრალოდ არ შეესაბამება ამბავი. 1042 01:02:58,060 --> 01:03:01,870 მაგრამ ყველა ამ კვანძების არიან სუპერ ფართო, და ყველა კვანძის in ხე იკავებს 1043 01:03:01,870 --> 01:03:07,780 26 ან რეალურად, შეიძლება 27 გმირები, რადგან ამ შემთხვევაში მე მათ შორის სივრცე აპოსტროფი 1044 01:03:07,780 --> 01:03:09,980 ასე რომ ჩვენ შეგვეძლო apostrophized სიტყვა. 1045 01:03:09,980 --> 01:03:14,450 ამ შემთხვევაში, ეს არის ფართო მასივები. ასე რომ მიუხედავად იმისა, რომ ისინი არ picutured, 1046 01:03:14,450 --> 01:03:18,190 ამ იკავებს მასიური რაოდენობით RAM. 1047 01:03:18,190 --> 01:03:20,670 რაც შესაძლოა ჯარიმა, especilly თანამედროვე ტექნიკა, 1048 01:03:20,670 --> 01:03:25,650 მაგრამ ეს 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 >> მჯერა, რომ ეს თუ არა, იმდენი fun როგორც C უკვე გარკვეული დრო არის, 1053 01:03:43,450 --> 01:03:48,130 ჩვენ მიღწევის წერტილი სემესტრის სადაც დროა გადასვლას რამ უფრო თანამედროვე. 1054 01:03:48,130 --> 01:03:50,950 Things შესახებ მაღალ დონეზე. და მიუხედავად იმისა, რომ მომავალ რამდენიმე კვირის 1055 01:03:50,950 --> 01:03:54,580 ჩვენ კვლავ immerse საკუთარ თავს სამყაროში მაჩვენებლებისა და მეხსიერების მართვა 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 არის არის markup ენაზე და რა მარკირებას ენა 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 და ეს, რა თქმა უნდა omnipresent ამ დღეებში. 1064 01:04:16,650 --> 01:04:19,450 მაგრამ რა ძლევამოსილი შესახებ სამყაროში HTML და ვებ პროგრამირების უფრო ზოგადად, 1065 01:04:19,450 --> 01:04:25,910 აშენებს დინამიური რამ; წერა კოდი ენებს, როგორიცაა PHP ან Python ან Ruby ან Java ან C #. 1066 01:04:25,910 --> 01:04:30,360 მართლაც, მიუხედავად თქვენი ენა არჩევანი, და გამოიმუშავებს HTML დინამიურად ვითარდება. 1067 01:04:30,360 --> 01:04:32,960 გენერაცია რაღაც მოუწოდა CSS დინამიურად ვითარდება. 1068 01:04:32,960 --> 01:04:35,810 კასკადური სტილების, რომელიც არის ასევე შესახებ ესთეტიკას. 1069 01:04:35,810 --> 01:04:41,360 და ა.შ. მიუხედავად იმისა, დღეს, თუ მივდივარ გარკვეული ვებ როგორიცაა ნაცნობი Google.com, 1070 01:04:41,360 --> 01:04:46,100 და მივდივარ სანახავად, დეველოპერი, იხილე წყარო, რომელიც იქნებ გავაკეთეთ ადრე, 1071 01:04:46,100 --> 01:04:49,800 მაგრამ აპირებს იხილე წყარო, ამ პერსონალის ალბათ გამოიყურება საკმაოდ cryptic. 1072 01:04:49,800 --> 01:04:55,320 მაგრამ ეს ფუძემდებლური კოდი, რომელიც ახორციელებს Google.com. 1073 01:04:55,320 --> 01:04:57,940 ფრონტის ბოლომდე. და პრაქტიკულად ყველა ეს ფუმფულა ფისუნიაა ესთეტიკის პერსონალი. 1074 01:04:57,940 --> 01:05:01,740 ეს არის CSS აქ. თუ მე შენარჩუნება სენსორული ქვემოთ ჩვენ კიდევ რამდენიმე ფერი კოდირებული პერსონალი. 1075 01:05:01,740 --> 01:05:06,890 ეს არის HTML. Google-ის კოდი ჰგავს სასადილო, მაგრამ თუ რეალურად ქმნის სხვადასხვა ფანჯარაში, 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 ჩვენ ვაპირებთ ვხედავ სანამ ამ ხანგრძლივი tag, [სიტყვა] არის tag, 1079 01:05:16,850 --> 01:05:23,520 HTML, თავი, სხეული, div, სკრიპტი, ტექსტის არე, span, ორიენტირებული, DIV. 1080 01:05:23,520 --> 01:05:26,770 და ეს არის ასევე სახის cryptic ორიენტირებული ერთი შეხედვით, 1081 01:05:26,770 --> 01:05:30,890 მაგრამ ყველა ამ mess შემდეგნაირად გარკვეული ნიმუშების, და განმეორებადი თარგების, 1082 01:05:30,890 --> 01:05:33,850 ისე, რომ ერთხელ მივიღებთ საფუძვლებს ქვემოთ, თქვენ გექნებათ დაწერა კოდი მოსწონს 1083 01:05:33,850 --> 01:05:37,550 და შემდეგ მანიპულირება კოდი მოსწონს გამოყენებით კიდევ ერთი ენა, მოუწოდა JavaScript. 1084 01:05:37,550 --> 01:05:40,440 და JavaScript არის ენა, რომელიც ეშვება შიგნით ბრაუზერის 1085 01:05:40,440 --> 01:05:44,380 დღეს ჩვენ ვიყენებთ on ჰარვარდის კურსები, ამისთვის რა თქმა სავაჭრო ინსტრუმენტი, რომელიც Google Maps იყენებს 1086 01:05:44,380 --> 01:05:48,660 გადმოგცეთ მთელი bunch of დინამიურობა, Facebook გაძლევთ აჩვენოს მყისიერი სტატუსის განახლება, 1087 01:05:48,660 --> 01:05:51,430 Twitter იყენებს გაჩვენოთ tweets მყისიერად. 1088 01:05:51,430 --> 01:05:53,820 ყველა ამ ჩვენ დაიწყებს immerse ვდებთ სისტემაში 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 როგორ ინტერნეტში მუშაობს teaser ამისთვის რა უნდა მოვიდეს. მე გაძლევთ "Warriors წმინდა." 1092 01:06:08,380 --> 01:06:14,720 >> [♫ Slow გუნდისათვის მუსიკა ♫] 1093 01:06:14,720 --> 01:06:20,450 [კაცი მთხრობელი] მან მოყვა გაგზავნა. 1094 01:06:20,450 --> 01:06:23,770 With ოქმი ყველა საკუთარი. 1095 01:06:23,770 --> 01:06:37,270 [♫ Faster ელექტრონული მუსიკა ♫] 1096 01:06:37,270 --> 01:06:41,330 იგი მოვიდა სამყაროში cool ეკრანები, uncaring მარშრუტიზატორები, 1097 01:06:41,330 --> 01:06:45,690 და საფრთხეები გაცილებით უარესი, ვიდრე სიკვდილი. 1098 01:06:45,690 --> 01:06:55,400 ის სწრაფად. ის ძლიერი. ის TCP / IP, და ის მიიღო თქვენს მისამართზე. 1099 01:06:55,400 --> 01:06:59,250 Warriors of Net. 1100 01:06:59,250 --> 01:07:05,290 [Malan] მომავალ კვირას, შემდეგ. ინტერნეტი. ვებ პროგრამირებას. ეს არის CS50. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]