დავით Malan ყველა უფლება. ჩვენ დავბრუნდით. ასე რომ, ამ სეგმენტის პროგრამირების რა მე ვფიქრობდი, რომ ჩვენ გვინდა გავაკეთოთ არის ნაზავი რამ. ერთი, რომ ცოტა რაღაც პრაქტიკული, თუმცა გამოყენებით უფრო playful პროგრამირების environment-- ერთი, რომ საჩვენებელი of ზუსტად სახის იდეები ჩვენ ვლაპარაკობდით, მაგრამ ცოტა უფრო ფორმალურად. ორი, შევხედოთ ზოგიერთი უფრო ტექნიკური გზები რომ პროგრამისტი, რომ რეალურად მოგვარება პრობლემებს, როგორებიცაა ეძებს პრობლემა რომ ჩვენ შევხედე და მის ასევე უფრო ფუნდამენტურად საინტერესო პრობლემა დახარისხება. ჩვენ მხოლოდ ვივარაუდოთ მისაღებად წასვლა , რომ სატელეფონო წიგნი იყო დახარისხებული, მაგრამ რომ მარტო რეალურად სახის მძიმე პრობლემა ბევრი სხვადასხვა გზა გადაჭრას. ასე რომ, ჩვენ გამოვიყენებთ ამ, როგორც კლასი პრობლემები წარმომადგენელი რამ, რომ შეიძლება მოგვარდეს კულტურას. და მაშინ ჩვენ გაიგო შესახებ ზოგიერთი დეტალი რა ეწოდება მონაცემების structures-- fancier გზა, როგორიც დაკავშირებული სიები და hash მაგიდები და ხეები, პროგრამისტი, ფაქტობრივად, გამოყენება და ზოგადად გამოიყენოთ on დაფა ხატავს სურათს, რაც მას ითვალისწინებს განხორციელების რამდენიმე ნაჭერი პროგრამული უზრუნველყოფა. მოდით გავაკეთოთ პრაქტიკული ნაწილი პირველი. ასე რომ, უბრალოდ მიიღოთ თქვენი ხელები ბინძური ერთად გარემოს უწოდა scratch.mit.edu. ეს არის ინსტრუმენტი, რომელიც ჩვენ ვიყენებთ ჩვენი ბაკალავრიატის კლასში. მიუხედავად იმისა, რომ ის შექმნილია ასაკის 12 და, ჩვენ ვიყენებთ მას up ნაწილი, რომელიც საკმაოდ მწირი მას შემდეგ, რაც ის ლამაზი, მხიარული გრაფიკული გზა სწავლის ცოტა რამე პროგრამირების. ასე რომ, უფროსი რომ URL, სადაც თქვენ უნდა დაინახოს გვერდი საკმაოდ მოსწონს, და წავიდეთ წინ და დააჭირეთ რეგ Scratch ზედა მარჯვენა და აირჩიოს სახელი და პაროლი და საბოლოოდ მისაღებად account-- scratch.mit.edu. მეგონა მე გამოიყენოს ეს როგორც შესაძლებლობა პირველი, რათა ეს. კითხვა გამოვიდა შესვენების დროს იმაზე, თუ რა კოდი რეალურად გამოიყურება. და ჩვენ ვსაუბრობთ შესვენების დროს C, ში კერძოდ, განსაკუთრებით ქვედა დონეზე ხანდაზმული ენაზე. და მე უბრალოდ სწრაფი Google მოძებნოთ C კოდი ბინარული ძებნის ალგორითმი, რომ ჩვენ გამოიყენება მოძებნოთ, რომ სატელეფონო წიგნი ადრე. ამ კონკრეტულ მაგალითს, რა თქმა უნდა, არ ეძებს სატელეფონო წიგნი. ეს უბრალოდ ეძებს მთელი bunch ნომრები კომპიუტერის მეხსიერებაში. მაგრამ თუ გსურთ, რომ უბრალოდ ვიზუალური გრძნობა, რაც ფაქტობრივი პროგრამირების ენის ჰგავს, ეს გამოიყურება პატარა რაღაც მსგავსი. ასე რომ, ეს დაახლოებით 20-plus, 30 ან იმდენად ხაზი კოდი, მაგრამ საუბარი ჩვენ იყო, რომელსაც მეტი შესვენების იმის შესახებ, თუ როგორ ეს რეალურად იღებს გადაიზარდა zeros და პირობა და თუ თქვენ არ შეუძლიათ უბრალოდ აღადგინოთ, რომ დამუშავება და წავიდეთ zeros და პირობა თავში კოდი. სამწუხაროდ, პროცესი ასე ტრანსფორმაციული ის, რომ ბევრი ადვილია, ვიდრე გაკეთება. მივედი ადრე და რეალურად აღმოჩნდა ეს პროგრამა, ორობითი ძებნა, zeros და პირობა გზით პროგრამა მოუწოდა შემდგენელი რომ მე მოხდება აქ უფლება ჩემი Mac. და თუ თქვენ შეხედეთ ეკრანზე აქ აქცენტს ამ შუა ექვსი სვეტი მხოლოდ, დაინახავთ მხოლოდ zeros და პირობა. და ეს არის zeros და პირობა, რომ დაკომპლექტებას ზუსტად რომ სამძებრო პროგრამა. ასე რომ, თითოეული ბლოკი ხუთ ბიტი, თითოეული ბაიტი zeros და პირობა აქ, წარმოადგენს რამდენიმე დავალებით როგორც წესი, შიგნით კომპიუტერი. და სინამდვილეში, თუ თქვენ მოვისმინე მარკეტინგული სლოგანი "Intel შიგნით", - რომ, რა თქმა უნდა, მხოლოდ იმას ნიშნავს, თქვენ გაქვთ Intel CPU ან ტვინის შიგნით კომპიუტერი. ეს კი იმას ნიშნავს, რომ CPU არის რომ თქვენ გაქვთ ინსტრუქციის კომპლექტი, ასე ვთქვათ. ყოველ CPU მსოფლიოში, ბევრი მათ მიერ Intel ამ დღეებში, ესმის სასრული ნომერი ინსტრუქციები. და იმ ინსტრუქციას იმდენად დაბალი დონე როგორც დაამატოთ ეს ორი ნომრები ერთად, გავამრავლოთ ეს ორი ნომრები ერთად, გადაადგილება ამ ნაჭერი მონაცემები აქ აქ მეხსიერებაში, გარდა ამ ინფორმაცია აქედან აქ მეხსიერება, და ასე forth-- ასე რომ ძალიან, დაბალი დონის, თითქმის ელექტრონული დეტალები. მაგრამ იმ მათემატიკის ოპერაციების რასაც რაც ჩვენ განვიხილეთ ადრე, წარმომადგენლობა მონაცემები როგორც zeros და პირობა, შეუძლია თქვენ დაამყარონ ყველაფერი რომ კომპიუტერი დღეს შეგვიძლია, თუ არა ეს ტექსტური, გრაფიკული, მუსიკალური, ან სხვაგვარად. ასე რომ, ეს ძალიან ადვილია დაკარგული სარეველა სწრაფად. და იქ არის ბევრი სინტაქსური გამოწვევები რომლის მიხედვითაც, თუ თქვენ მიიღოს მარტივი, stupidest of typos არცერთი პროგრამა იმუშავებს განაწილებაზე. ასე რომ, ნაცვლად გამოყენებით ენა, როგორიცაა C ამ დილით, მე ვფიქრობდი, რომ ეს იქნება უფრო სახალისო რეალურად რაღაც უფრო ვიზუალური, რომელიც ხოლო განკუთვნილია ბავშვებისთვის ფაქტიურად სრულყოფილი გამოვლინება ფაქტობრივი პროგრამირების language-- რაღაც გამოიყენოთ სურათები ნაცვლად ტექსტი წარმოადგენს იმ იდეებს. ასე რომ, კიდევ მართლაც აქვს ანგარიშის scratch.mit.edu, შესაქმნელად დააჭირეთ ღილაკს ზედა მარცხენა საიტზე. და თქვენ უნდა დაინახოს გარემოში, როგორიცაა ერთი მე ვარ დაახლოებით ვხედავ ჩემს ეკრანზე აქ. და ჩვენ გაატაროთ მხოლოდ პატარა ცოტა დრო თამაშობენ აქ. მოდით ვნახოთ, თუ ჩვენ არ შეგვიძლია ყველა გადაწყვიტოს ზოგიერთი პრობლემები ერთად შემდეგ გზა. ასე რომ, რა დაინახავთ ამ environment-- და რეალურად მხოლოდ ნება მე პაუზის. არის ვინმე არ არის აქ? აქ არა? კარგი. ნება მომეცით აღვნიშნო, რამდენიმე მახასიათებლები ამ გარემოში. ასე რომ, ზედა მარცხენა ეკრანზე, ჩვენ აქვს Scratch ეტაპზე, ასე ვთქვათ. Scratch არ არის მხოლოდ სახელი ამ პროგრამირების ენა; ის ასევე სახელი კატა, რომელიც ხედავთ იყოს იქ ფორთოხლის. ის სცენაზე, ისე, ჰგავს მე აღწერილი კუს ადრე მყოფი მართკუთხა თეთრი ფორუმში გარემო. ეს კატა მსოფლიოში შემოიფარგლა რომ ოთხკუთხედი up ზედა არსებობს. იმავდროულად, მარჯვენა მხარეს აქ, ეს მხოლოდ სკრიპტები ტერიტორია, ცარიელი ფურცლიდან თუ. ეს არის სადაც ჩვენ ვაპირებთ დავწეროთ ჩვენი პროგრამების რაღაც მომენტში. და სამშენებლო ბლოკები, რომ ჩვენ უნდა გამოიყენოთ დაწერა ამ პროგრამის თავსატეხი ცალი, თუ will-- არიან იმ უფლება აქ შუა, და ისინი დაუხარისხებელი ფუნქციონირება. ასე, მაგალითად, მე ვაპირებ წავიდეთ წინ და ვაჩვენოთ მინიმუმ ერთი ასეთი. მე ვაპირებ წავიდეთ წინ და დააჭირეთ კონტროლის კატეგორიაში დაბრუნება. ასე რომ ეს არის კატეგორია up დაბრუნება. მე ვაპირებ დააჭირეთ კონტროლის გარეშე. პირიქით, მე ვაპირებ დააჭირეთ თარიღები მიხედვით, პირველი ერთი up დაბრუნება. და თუ გსურთ, რომ დაიცვას გასწვრივ კი როგორც ჩვენ ამისათვის, თქვენ საკმაოდ მივესალმებით. მე ვაპირებ დაწკაპეთ და გადაიტანეთ ეს პირველი ", როდესაც მწვანე დროშა დააწკაპებთ". და შემდეგ მე ვაპირებ ჩამოაგდეს ის მხოლოდ უხეშად ზედა ჩემი ცარიელი დაფები. და რა ლამაზი Scratch არის, რომ ეს თავსატეხი ცალი, როდესაც ერთმანეთთანაა სხვა თავსატეხი ცალი, აპირებს ფაქტიურად რა იმ თავსატეხი ცალი ამბობენ, ამის გაკეთება. ასე, მაგალითად, Scratch არის სწორი ახლა შუა თავის სამყაროს. მე ვაპირებ წავიდეთ წინ და აირჩიოს ახლა, მოდით ვთქვათ, მოძრაობის გარეშე, თუ გსურთ, რომ გავაკეთოთ same-- Motion კატეგორიაში. და ახლა შეამჩნია მე მაქვს მთელი bunch of თავსატეხი ცალი აქ რომ, კიდევ ერთხელ, სახის გავაკეთოთ, რას ამბობენ. და მე ვაპირებ წავიდეთ წინ და გადაიტანეთ ვარდნა ნაბიჯი ბლოკი უფლება აქ. და შენიშნავს, რომ, როგორც კი თქვენ ახლოს ბოლოში "მწვანე დროშა აირჩიეთ "ღილაკს, ცნობა როგორ თეთრი ხაზი, როგორც ჩანს, თითქოს ეს თითქმის მაგნიტური, მას სურს, რომ იქ წასვლა. უბრალოდ გაუშვებენ, და ეს იქნება ვადამდელი ერთად და ფორმებს შეესაბამება. და ახლა თქვენ შეგიძლიათ ალბათ, თითქმის ვხვდები, სადაც ჩვენ ვაპირებთ ამ. თუ გადავხედავთ Scratch ეტაპზე აქ და ვუყურებთ თავზე, დაინახავთ წითელი მსუბუქი, გაჩერების ნიშანი, და მწვანე დროშა. და მე ვაპირებ წავიდეთ წინ და ნახოთ ჩემი ეკრანზე მხოლოდ ერთი წუთით, თუ შეიძლება. მე ვაპირებ დააჭირეთ მწვანე დროშა ახლა, და ის გადავიდა, რაც, როგორც ჩანს, 10 ნაბიჯები ან 10 pixels, 10 წერტილები, ეკრანზე. ასე რომ, არ არის, რომ საინტერესო, მაგრამ ნება მომეცით შესთავაზოს გარეშე კი ასწავლის, უბრალოდ გამოყენებით საკუთარი საკუთარი intuition-- let მე ვთავაზობ, რომ თქვენ გაერკვნენ, თუ როგორ რათა Scratch გასეირნების უფლება off ეტაპზე. მას, რათა გზა მარჯვენა მხარეს ეკრანზე, ყველა გზა უფლება. ნება მიბოძეთ, ერთი წუთით ან ასე ჭიდაობა რომ. დაგვჭირდება შევხედოთ სხვა კატეგორია ბლოკები. კარგი. ასე რომ მხოლოდ recap, როდესაც ჩვენ მწვანე დროშა დააწკაპებთ აქ და გადაადგილება 10 ნაბიჯები არის მხოლოდ დავალებით, ყოველ ჯერზე მე დააჭირეთ მწვანე დროშა, რა ხდება? ისე, რომ გაშვებული პროგრამა. ასე რომ, მე ვერ გავაკეთებ ამ იქნებ 10-ჯერ ხელით, მაგრამ ეს გრძნობს პატარა ცოტა hackish, ასე ვთქვათ, რომლის დროსაც მე არ ვარ ნამდვილად პრობლემის გადაჭრის. მე უბრალოდ ცდილობს ერთხელ და ისევ და ისევ და ისევ სანამ მე ერთგვარი შემთხვევით მისაღწევად დირექტივა რომ მე შეიქმნა იმისათვის, რომ მივაღწიოთ ადრე. მაგრამ ჩვენ ვიცით, ჩვენი pseudocode ადრე, რომ იქ ეს ცნება პროგრამირების looping, თავისსავე ისევ და ისევ. ასე რომ, მე დავინახე, რომ რამოდენიმე თქვენ მიაღწია რა თავსატეხი ცალი? ვიმეორებ, სანამ. ასე რომ, ჩვენ შეიძლება რაღაც როგორიცაა ვიმეორებ, სანამ. და რა თქვენ ვიმეორებ, სანამ ზუსტად? კარგი. და ნება მომეცით წავიდეთ ერთად ერთი, რომ გარკვეულწილად მარტივია რაღაც მომენტში. ნება მომეცით წავიდეთ წინ და ამის გაკეთება. გაითვალისწინეთ, რომ, როგორც თქვენ შეიძლება ჰქონდეს აღმოაჩინა კონტროლის ქვეშ, არ არის ეს განმეორებითი ბლოკი, რომელიც არ ჰგავს ის, რომ დიდი. იქ არ არის ბევრი ოთახი შორის ორი ყვითელი ხაზები. მაგრამ, როგორც ზოგიერთი ალბათ შენიშნა, თუ გადააადგილება, შეამჩნევთ, თუ როგორ იზრდება შეავსოთ ფორმა. და თქვენ შეგიძლიათ კიდევ cram მეტი. ეს უბრალოდ შენარჩუნება იზრდება თუ თქვენ გადაიტანეთ და hover მას. და მე არ ვიცი, რა არის საუკეთესო აქ, მოდით ყოველ შემთხვევაში ჩემთვის ვიმეორებ ხუთ ჯერ, მაგალითად, და შემდეგ დაბრუნდეს სცენაზე და დააჭირეთ მწვანე დროშა. და ახლა შეამჩნია, რომ ეს არ არის იქ. ახლა ზოგიერთი თქვენ შესთავაზა, როგორც Victoria უბრალოდ არ, ვიმეორებ 10 ჯერ. და რომ საერთოდ მისაღებად მას ყველა გზა, მაგრამ არ იყოს უფრო ძლიერი გზა, ვიდრე თვითნებურად მჭიდროდაა რამდენი ნაბიჯები, რათა? რა შეიძლება იყოს უკეთესი ბლოკი ვიდრე ვიმეორებ 10 ჯერ იყოს? ჰო, ისე, რატომ არ უნდა გავაკეთოთ რაღაც სამუდამოდ? ახლა კი ნება მომეცით გადავიდეს ამ თავსატეხი ცალი შიგნით არსებობს და მოშორება ეს ერთი. ახლა შეამჩნია, არ აქვს მნიშვნელობა, სადაც Scratch იწყება, ის მიდის პირას. და საბედნიეროდ MIT, რომელიც იღებს Scratch, უბრალოდ რაც დარწმუნებული ვარ, რომ ის არასდროს ქრება მთლიანად. თქვენ ყოველთვის შეგიძლიათ დაიბრუნოს მისი კუდი. და მხოლოდ ინტუიციურად, რატომ შენარჩუნება მოძრავი? აქ რა ხდება? მან, როგორც ჩანს, არ გაჩერდა, მაგრამ თუ მე შეარჩიო და გადაიტანეთ იგი ინარჩუნებს უნდოდა წასვლა, იქ. რატომ არის, რომ? მართლაც, კომპიუტერი ფაქტიურად აპირებს თუ რა გითხრათ, ეს უნდა გააკეთოს. ასე რომ, თუ უთხრეს, რომ ეს ადრე გააკეთოთ შემდეგ, რაც სამუდამოდ, გადაადგილება 10 ნაბიჯები, ის აპირებს შენარჩუნებას აპირებს და აპირებს სანამ მოხვდა წითელი გაჩერების ნიშანი და შეწყვიტოს პროგრამა საერთოდ. ასე რომ, თუ თქვენ არ ამისათვის, როგორ შეიძლება მე რათა Scratch ნაბიჯი სწრაფად მთელს ეკრანზე? სხვა ნაბიჯები, არა? ასე რომ ნაცვლად აკეთებს 10 იმ დროს, რატომ არ გვაქვს წავიდეთ წინ და შეცვალოს იგი, რომელთა მიზანია რას შესთავაზოს 50? ასე რომ, ახლა მე ვაპირებ დააჭირეთ მწვანე დროშა, და მართლაც, ის მიდის მართლაც სწრაფი. და ეს, რა თქმა უნდა, მხოლოდ გამოვლინება ანიმაცია. რა არის ანიმაცია? უბრალოდ გვიჩვენებს, თუ ადამიანის მთელი bunch of ჯერ კიდევ სურათები მართლაც, რეალურად, მართლაც სწრაფად. ასე რომ, თუ ჩვენ უბრალოდ ვეუბნებოდი მას გადაადგილება უფრო ნაბიჯები, ჩვენ უბრალოდ მქონე ეფექტი იყოს ცვლილება, სადაც ის არის ეკრანზე ყველა უფრო სწრაფად ერთეულის დრო. ახლა შემდეგი გამოწვევა, რომელიც მე შევთავაზე იყო, რომ მის ახსნას off ზღვარზე. და გარეშე იცის რა თავსატეხი ცალი exist-- იმიტომ, რომ ეს ჯარიმა თუ არ უნდა, რომ ეტაპზე გამოწვევა, რაც გინდა ამის ინტუიციურად? როგორ გვაქვს მას ახსნას უკან და მეოთხე, შორის მარცხენა და მარჯვენა? ჰო. ასე რომ, ჩვენ გვჭირდება გარკვეული მდგომარეობა, და ჩვენ როგორც ჩანს, აქვს პირობით, ასე საუბარი, კონტროლის ქვეშ კატეგორიაში. რომელიც ამ ბლოკის ჩვენ, ალბათ, სურს? ჰო, ალბათ, "თუ შემდეგ." ასე რომ შეამჩნია, რომ მათ შორის ყვითელი ბლოკები ჩვენ აქ, არ არის ეს "თუ" ან ეს "თუ სხვაგან," ბლოკი, რომელიც საშუალებას მოგვცემს, რომ მიიღოს გადაწყვეტილება, რომ ამის გაკეთება და ამის გაკეთება. და თქვენ შეგიძლიათ კიდევ ბუდე მათ გავაკეთოთ მრავალჯერადი რამ. ან თუ თქვენ არ წავიდა არის აქ, წავიდეთ წინ ზონდირება კატეგორიაში and-- ვნახოთ, თუ ის აქ. ასე რომ, რა ბლოკი შეიძლება იყოს სასარგებლო, აქ აღმოაჩინოს თუ ის off ეტაპზე? ჰო, რომ ზოგიერთი ამ ბლოკის შეიძლება parametrized, ასე ვთქვათ. ისინი შეიძლება ერთგვარი მორგებული, არ განსხვავებით HTML გუშინ ატრიბუტები, სადაც იმ ატრიბუტებს სახის სახის ქცევა აქვს. ანალოგიურად აქ, შეიძლება მე დაიბრუნოს ეს ეხება ბლოკი და ცვლილება და ვთხოვო კითხვა, თქვენ ეხება თაგვის მაჩვენებელი, როგორც კურსორი ან თქვენ ეხება ზღვარზე? ნება მომეცით, წავიდეთ და ამის გაკეთება. მე ვაპირებ დააშორებს მომენტში. ნება მიბოძეთ აითვისებდა ამ თავსატეხი ცალი აქ, ამ თავსატეხი ცალი ამ, და მე ვაპირებ Jumble მათ მხოლოდ ერთი წუთით. მე ვაპირებ გადაადგილება ამ, შეცვალოს ეს ეხება პირას, და მე ვაპირებ მოძრაობის გაკეთება. ასე რომ, აქ არის გარკვეული ინგრედიენტები. მე ვფიქრობ, რომ მაქვს ყველაფერი მინდა. რომ ვინმე მინდა შესთავაზოს, თუ მე შეგიძლიათ დაკავშირება ეს, ალბათ, ყველაზე ქვედა იმისათვის, რომ ამ პრობლემის მოსაგვარებლად, რომელსაც Scratch ნაბიჯი უფლება მარცხნიდან მარჯვნივ მარცხნიდან მარჯვნივ მარცხნივ, თითოეულ დრო მხოლოდ bouncing off კედელზე? რა უნდა გავაკეთოთ? რომელი ბლოკი უნდა დაკავშირება "როდესაც მწვანე დროშის დაწკაპავთ პირველი"? OK, ასე რომ დავიწყოთ "სამუდამოდ". რა მიდის შიგნით შემდეგი? ვიღაც სხვა. OK, გადაადგილება ნაბიჯები. კარგი. მერე რა? ასე რომ, თუ. და შეამჩნია, მიუხედავად იმისა, რომ გამოიყურება მოქცეული ერთად მჭიდროდ, ეს იქნება მხოლოდ იზრდება შევსება. ეს უბრალოდ ხტომა სადაც მე მინდა. და რა შემიძლია დააყენა შორის თუ და მაშინ? სავარაუდოდ, "იმ შემთხვევაში, თუ ეხება პირას." და შეამჩნია, კიდევ ერთხელ, ეს არის ძალიან დიდი მას, მაგრამ ეს გაიზრდება შევსება. და მერე 15 გრადუსი? რამდენი გრადუსი? ჰო, ასე რომ 180 დაიძაბება ჩემთვის ყველა გზა გარშემო. მოდით ვნახოთ, თუ მე მივიღე ეს უფლება. ნება მომეცით დააშორებს. მიადევნე თვალი გადაიტანეთ Scratch up. ასე რომ, ის ცოტა დამახინჯებული ახლა, მაგრამ ეს ჯარიმა. როგორ შევცვალო მას ადვილად? მე ვაპირებ მოტყუებას ოდნავ. ასე რომ, მე კიდევ ერთი ბლოკი, უბრალოდ უნდა იყოს მკაფიო. მინდა, აღვნიშნო, 90 გრადუსი მარჯვნივ ჩვეულებრივ, ასე რომ, მე ვაპირებ ვუთხრა მას, უნდა გავაკეთოთ, რომ პროგრამულად. და აქ ჩვენ მივდივართ. ჩვენ, როგორც ჩანს არ გააკეთებდა. ეს ცოტა უცნაურია, რადგან ის ფეხით თავდაყირა. მოდით მოვუწოდებთ, რომ შეცდომა. ეს არის შეცდომა. ხარვეზის არის შეცდომა პროგრამა, ლოგიკური შეცდომა, რომ მე, ადამიანური, გააკეთა. რატომ არის იგი აპირებს თავდაყირა? არ MIT ხრახნიანი ან არ მინდა? ჰო, მე ვგულისხმობ, რომ ეს არ არის MIT- ის ბრალია. მომცეს თავსატეხი ცალი რომელიც ამბობს, რომ გახდეს ზოგიერთი რაოდენობა გრადუსი. და ვიქტორია წინადადება, მე გარდამტეხი 180 გრადუსი, რაც სწორი ინტუიცია. მაგრამ გარდამტეხი 180 გრადუსი ფაქტიურად ნიშნავს იმას, რომ 180 გრადუსი, და ეს არ არის ნამდვილად რაც მე მინდა, როგორც ჩანს. იმის გამო, რომ მაინც ის არის ეს ორგანზომილებიანი მსოფლიოში, ასე გადამწყვეტი ხდება სინამდვილეში Flip, მას თავდაყირა. მე, ალბათ, სურს გამოიყენოს რა ბლოკი ნაცვლად, ეფუძნება რა ხედავთ აქ? როგორ შეიძლება მოვაგვაროთ ეს პრობლემა? ჰო, ამიტომ, შესაძლოა, საპირისპირო მიმართულებით. და რეალურად კი, რომ არ იქნება საკმარისი, იმიტომ, რომ ჩვენ მხოლოდ მძიმე კოდი მიუთითებს მარცხნივ ან მარჯვნივ. თქვენ იცით, რა შეგვიძლია გავაკეთოთ? როგორც ჩანს, ჩვენ გვაქვს ფონდის ბლოკის აქ. თუ ზომით, ვხედავ ის, რომ ჩვენ აქ? ასე გამოიყურება MIT აქვს აბსტრაქცია აშენდა აქ. ამ ბლოკში, როგორც ჩანს ექვივალენტი რომლის სხვა ბლოკები, მრავლობითი? ეს ერთი ბლოკი, როგორც ჩანს ექვივალენტი მთელი ამ ტრიო ბლოკები რომ ჩვენ გვაქვს აქ. გამოდის, რომ მე შეიძლება გამარტივდეს ჩემი პროგრამის მიერ მოშორების ყველა იმ და უბრალოდ დააყენა ამ აქ. და ახლა ის ჯერ კიდევ პატარა buggy, და ეს ჯარიმა არის. ჩვენ დავტოვებთ, რომ იყოს. მაგრამ ჩემი პროგრამა კი მარტივი და ეს, ძალიან, იქნება წარმომადგენელი ერთი მიზანი პროგრამირების არის იდეალურად თქვენი კოდი, როგორც მარტივი, როგორც კომპაქტური რაც შეიძლება, მიუხედავად იმისა, როგორც იკითხება როგორც შესაძლებელი. თქვენ არ სურს ისე, ლაკონური , რომ ეს რთული გასაგებია. მაგრამ შეამჩნია მე შეცვალა სამ ერთი, და ეს, ალბათ, კარგია. მე ამოღებული მოშორებით ცნება შემოწმების თუ თქვენ ზღვარზე მხოლოდ ერთი ბლოკი. ახლა ჩვენ შეგვიძლია დაათვალიერეთ ეს, ფაქტობრივად. ეს არ დაამატოთ იმდენად ინტელექტუალური ღირებულება, მაგრამ playful ღირებულება. მე ვაპირებ წავიდეთ წინ და დაიბრუნოს ეს ხმა აქ. ნება მომეცით წავიდეთ წინ, და ნება მომეცით გადაცემის შეჩერება ერთი წუთით. მე ვაპირებ ჩაწერას შემდეგ, საშუალებას აძლევს ხელმისაწვდომობის ჩემი მიკროფონი. აქ ჩვენ მივდივართ. Ouch. შევეცადოთ ეს კიდევ ერთხელ. აქ ჩვენ მივდივართ. OK, მე ჩაწერილი არასწორია. აქ ჩვენ მივდივართ. Ouch. Ouch. კარგი. ახლა მე უნდა დაეღწია, რომ. კარგი. ასე რომ, ახლა მე მაქვს ჩაწერა მხოლოდ "ouch". ასე რომ, ახლა მე ვაპირებ წასვლა წინ და დაარქვით "ouch". მე ვაპირებ დაბრუნდეს ჩემი სკრიპტები, და ახლა გაფრთხილების ამ ბლოკის რომ ე.წ. თამაში ხმის "Meow" და თამაში ხმის "ouch". მე ვაპირებ გადაიტანეთ ეს, და სადაც უნდა დააყენოს ამ კომიკური ეფექტი? ჰო, ასე რომ, ახლა ეს სახის buggy, რადგან ახლა ეს ბლოკი შეამჩნევთ, თუ როგორ ეს "თუ პირას, bounce "არის ერთგვარი თვითმმართველობის შეიცავს. ასე რომ, მე და ეს უნდა გამოვასწოროთ. ნება მომეცით წავიდეთ წინ და ამის გაკეთება. ნება მომეცით დაეღწია ამ და დაბრუნდეს ჩვენი ორიგინალური, უფრო მიზანმიმართული ფუნქცია. ასე რომ, "თუ ეხება ზღვარზე, მაშინ" მინდა თავის მხრივ, როგორც Victoria შემოთავაზებული, 180 გრადუსი. და მე მინდა, რომ ითამაშოს ხმა "ouch" არსებობს? ჰო, შენიშნავს, რომ ის გარეთ ყვითელი ბლოკი. ასე რომ, ეს, ძალიან, იქნება bug, მაგრამ მე ეს შენიშნეს. ამიტომ, მე ვაპირებ გადაიტანეთ აქ, და შეამჩნია, ახლა შიგნით "თუ". ასე რომ, "თუ" არის ამ სახის მოსწონს arm მსგავსი blot რომ მხოლოდ აპირებს გავაკეთოთ რა შიგნით მას. ასე რომ, ახლა თუ დააშორებს ზე რისკი annoying-- კომპიუტერული: Ouch, ouch, ouch. დავით Malan: ეს მხოლოდ გაგრძელდება სამუდამოდ. ახლა მხოლოდ დააჩქაროს რამ აქ, ნება მომეცით წავიდეთ წინ და გახსენით, ვთქვათ ნება მომეცით წავიდეთ ზოგიერთი ჩემი საკუთარი პერსონალის კლასში. და ნება მომეცით გახსნა, ვთქვათ, ამ ერთი გააკეთა ერთი ჩვენი სწავლების პრაქტიკის რამდენიმე წლის წინ. ასე რომ, ზოგიერთ თქვენგანს შეიძლება გავიხსენოთ ამ თამაშში წარსულის, და ეს, ფაქტობრივად, აღსანიშნავია. მიუხედავად იმისა, რომ ჩვენ გავაკეთეთ მარტივი პროგრამების ახლა, განვიხილოთ, რა არის ეს რეალურად გამოიყურება. მიადევნე თვალი მოხვდა პიესა. ასე რომ ამ თამაშში, ჩვენ გვაქვს ბაყაყი და გამოყენებით arrow keys-- იგი იღებს უფრო დიდი ნაბიჯები, ვიდრე მე გვახსოვდეს მაქვს კონტროლი ამ frog. და მიზანია, რომ მასშტაბით დაკავებულია გზის გარეშე გაშვებული შევიდა მანქანა. და ვნახოთ, თუ მე აქ, მე უნდა ველოდოთ შესვლა გადახვევა მიერ. ეს იგრძნობა bug. ეს არის ერთგვარი შეცდომა. კარგი. მე ვარ აქ, იქ, და მაშინ თქვენ გაქვთ აპირებს, სანამ თქვენ ყველა ბაყაყები ლილი ბალიშები. ახლა ეს შეიძლება გამოიყურებოდეს ყველა უფრო რთული, მაგრამ მოდით ცდილობენ დაარღვიოს ქვემოთ გონებრივად და სიტყვიერი შევიდა მისი შემადგენელი ბლოკები. ასე რომ, ალბათ, თავსატეხი ნაჭერი, რომ ჩვენ არ ჩანს მაგრამ, რომ რეაგირების keystrokes, რამ მე მოხვდა კლავიატურაზე. ასე რომ, ალბათ, გარკვეული სახის ბლოკი, რომელიც ამბობს, თუ გასაღები შეადგენს up, მაშინ ნუ რაღაც ნულიდან შესაძლოა გადავიდეს ეს 10 ნაბიჯები ამ გზით. თუ ქვემოთ გასაღები დაპრესილი, გადაადგილება 10 ნაბიჯები ამ გზით, და მარცხენა ღილაკს, გადაადგილება 10 ნაბიჯები ამ გზით, 10 ნაბიჯი, რომელიც. მე ნათლად აღმოჩნდა კატა შევიდა frog. ასე რომ, მხოლოდ, სადაც costume, როგორც Scratch ზარები it-- ჩვენ მხოლოდ იმპორტირებული სურათს frog. მაგრამ რა ხდება? სხვა რა ხაზი კოდი, სხვა რა თავსატეხი ცალი გააკეთა ბლეიკი, ჩვენი სწავლების თანამემამულე, გამოყენება ამ პროგრამის, როგორც ჩანს? რა ყველაფრის გადაადგილება რა პროგრამირების მშენებლობა? Motion, sure-- ასე გადაადგილება ბლოკი, დარწმუნებული ვარ. და რა არის, რომ ეს ნაბიჯი ბლოკი შიგნით, სავარაუდოდ? ჰო, რაღაც სახის მარყუჟის, იქნებ სამუდამოდ დაბლოკოს, შესაძლოა, განმეორებითი ბლოკი ვიმეორებ, სანამ ბლოკი. და რომ ის, რაც მიღების ჟურნალი და ლილი ბალიშები და ყველაფერი ნაბიჯი უკან და მეოთხე. ეს უბრალოდ ხდება უსასრულოდ. რატომ არის ზოგიერთი მანქანა მოძრავი სწრაფად, ვიდრე სხვები? რით განსხვავდება იმ პროგრამებს? ჰო, ალბათ ზოგიერთი მათგანი იღებენ მეტი ნაბიჯები ერთდროულად და ზოგიერთი მათგანი ნაკლები ნაბიჯები ერთდროულად. და ვიზუალური ეფექტი არის სწრაფი წინააღმდეგ ნელი. როგორ ფიქრობთ, რა მოხდა? როდესაც მე მივიღე ჩემი frog ყველა გზა მოპირდაპირე მხარეს და მდინარე გადატანა ლილი pad, რაღაც აღსანიშნავია მოხდა. რა მოხდა, როგორც კი მე რომ? იგი შეჩერდა. რომ frog შეწყვიტა და მე მივიღე მეორე frog. ასე რომ, რა შენება უნდა იყოს გამოიყენება იქ, რა ფუნქცია? ჰო, ასე რომ გარკვეული სახის "თუ" მდგომარეობაშია იქ, ძალიან. და თურმე out-- ჩვენ არ ვხედავთ ამას მაგრამ არსებობს სხვა ბლოკები, რომ შეიძლება ითქვას, რომ, თუ თქვენ ეხება კიდევ ერთი რამ ეკრანზე, თუ თქვენ ეხება lily pad ", მაშინ". და მაშინ, რომ მაშინ, როდესაც ჩვენ მიიღოს მეორე frog გამოჩნდება. მიუხედავად იმისა, რომ ეს თამაში არის, რა თქმა უნდა ძალიან დათარიღებული, მიუხედავად იმისა, რომ ერთი შეხედვით იქ იმდენად აპირებს on-- და ბლეიკი არ whip ამ up ორ წუთში, ეს, ალბათ, წაიყვანეს რამდენიმე საათის შექმნათ თამაში საფუძველზე მის ხსოვნას და ვიდეო წარსულის ვერსიას იგი. მაგრამ ყველა ეს პატარა რამ აპირებს ეკრანზე იზოლაცია მოვხარშოთ ქვემოთ ეს ძალიან მარტივია constructs-- მოძრაობები და განცხადებები როგორც ჩვენ განვიხილეთ, მარყუჟების და პირობები, და რომ ამის შესახებ. არსებობს რამდენიმე სხვა fancier თვისებები. ზოგიერთი მათგანი წმინდა ესთეტიკური და აკუსტიკური, როგორც კინო უბრალოდ ითამაშა. მაგრამ იმ ნაწილს, თქვენ აქვს ამ ენაზე, Scratch, ყველა ფუნდამენტური სამშენებლო ბლოკები, რომ თქვენ აქვს C, Java, JavaScript, PHP, Ruby, Python, და ნებისმიერი რაოდენობის სხვა ენებზე. რაიმე შეკითხვები Scratch? კარგი. ასე რომ, ჩვენ არ ჩაყვინთვის ღრმა Scratch, მიუხედავად იმისა, რომ თქვენ მივესალმებით ამ კვირის ბოლოს, განსაკუთრებით თუ თქვენ გაქვთ ბავშვები ან ძმისწულები და ძმისწულები და ასეთი, გააცნოს მათ Scratch. ეს, ფაქტობრივად, შესანიშნავად playful გარემოს, როგორც მისი ავტორები აცხადებენ, ძალიან მაღალი ჭერით. მიუხედავად იმისა, რომ ჩვენ დავიწყეთ ძალიან დაბალი დონის დეტალები, თქვენ შეიძლება მართლაც საკმაოდ მწირი მას, და ეს არის ალბათ დემონსტრირება ზუსტად რომ. მაგრამ მოდით ახლა გადასვლას კიდევ რამდენიმე დახვეწილი პრობლემები, თუ გნებავთ, ცნობილია, როგორც "ძიება" და "დახარისხება", უფრო ზოგადად. ჩვენ გვქონდა ამ სატელეფონო წიგნი ადრე აქ არის კიდევ ერთი მხოლოდ discussion-- რომ ჩვენ შევძელით ძიება უფრო ეფექტურად, რადგან მნიშვნელოვანი ვარაუდი. და უბრალოდ უნდა იყოს ნათელი, თუ რა მოსაზრება იყო, მე მიღების როცა ძებნას ამ სატელეფონო წიგნი? რომ მაიკ სმიტი იყო სატელეფონო წიგნი, მიუხედავად იმისა, რომ შეძლებს გაუმკლავდეს სცენარის მის გარეშე არსებობს თუ უბრალოდ შეწყვიტა ნაადრევად. წიგნი ანბანური. და ეს ძალიან კეთილშობილური ვარაუდი, იმიტომ, რომ ნიშნავს someone-- მე სახის ჭრის კუთხეში, როგორიც მე ვარ, უფრო სწრაფად, რადგან ვინმე სხვა ძალიან ბევრი შრომა ჩემთვის. მაგრამ რა, თუ ტელეფონი წიგნი იყო დაუხარისხებელი? იქნებ Verizon მიიღო ზარმაცი, უბრალოდ ესროლა ყველას სახელები და ნომრები არ შესაძლოა, იმისათვის, რომელშიც ისინი მოაწერა ხელი სატელეფონო მომსახურების. და რამდენი დრო სჭირდება me რათა იპოვოს ადამიანი, როგორიც მაიკ სმიტი? 1000 გვერდი ტელეფონი book-- რამდენი გვერდებზე მაქვს გაეცნონ? ყველა მათგანი. თქვენ ერთგვარი out of luck. თქვენ სიტყვასიტყვით უნდა შევხედოთ ყველა გვერდი, თუ ტელეფონი წიგნი მხოლოდ შემთხვევით გადანაწილებული. თქვენ შეიძლება გაუმართლა და იპოვოს Mike პირველივე გვერდზე, იმიტომ, რომ ის იყო პირველი მომხმარებელს შეკვეთა სატელეფონო მომსახურების. მაგრამ ის შეიძლება ყოფილიყო, ბოლო, ძალიან. ასე რომ, შემთხვევითი მიზნით არ არის კარგი. ასე რომ, ვფიქრობ, ჩვენ უნდა დასალაგებლად სატელეფონო წიგნი და ზოგადად სახის მონაცემები ჩვენ უკვე ეძლევა. როგორ შეგვიძლია ამის გაკეთება? ასევე, ნება მომეცით უბრალოდ ცდილობენ უბრალო მაგალითი აქ. ნება მომეცით წავიდეთ წინ და toss რამდენიმე ნომრები ფორუმში. დავუშვათ, ნომრები ჩვენ ვართ, ვთქვათ, ოთხი, ორი, ერთი და სამი. და, ბენ, დასალაგებლად ამ ნომრებზე ჩვენთვის. კარგი, კარგია. როგორ ფიქრობთ, რომ? კარგი. ასე იწყება პატარა მნიშვნელობა და უმაღლესი, და ეს მართლაც კარგი ინტუიცია. და გააცნობიეროს, რომ ჩვენ ადამიანები რეალურად საკმაოდ კარგი პრობლემების გადაჭრის როგორც ეს, მინიმუმ როდესაც მონაცემები შედარებით მცირე. როგორც კი დაიწყება ასობით ციფრები, ათასობით ნომრები, მილიონობით ნომრები, ბენ ალბათ ამის გაკეთება არ შეეძლო საკმაოდ, რომ სწრაფი, თუ გავითვალისწინებთ, რომ არ იყო ხარვეზები ნომრები. საკმაოდ ადვილი ითვლიან მილიონი წინააღმდეგ შემთხვევაში, უბრალოდ დროს მოითხოვს. ასე რომ, ალგორითმი, რომ ეს ხმები ისევე როგორც ბენ გამოიყენება მხოლოდ ახლა იყო ძიება მცირე რაოდენობის. მიუხედავად იმისა, რომ ჩვენ, ადამიანები, შეუძლია მიიღოს ბევრი ინფორმაცია ვიზუალურად, კომპიუტერი არის რეალურად ცოტა უფრო შეზღუდულია. კომპიუტერული მხოლოდ შეხედეთ ერთი byte დროს ან იქნებ ოთხი ბაიტი time-- ამ დღეებში, შესაძლოა, 8 ბაიტი time-- მაგრამ ძალიან მცირე რაოდენობით ბაიტი მოცემულ დროს. ასე რომ, იმის გათვალისწინებით, რომ ჩვენ ნამდვილად გვაქვს ოთხი ღირებულებები აქ და შეგიძლიათ წარმოიდგინოთ, ბენ, როგორც blinders შესახებ, თუ ის იყო კომპიუტერი, როგორიცაა რომ იგი ვერ ხედავს რაიმე სხვა ვიდრე ერთი ნომრის time-- ასე რომ, ჩვენ ზოგადად ვივარაუდოთ, ისევე როგორც ინგლისური, ჩვენ წაიკითხა მარჯვნიდან მარცხნივ. ასე რომ, პირველი ნომერი ბენ ალბათ ჩანდა at ოთხი და შემდეგ ძალიან სწრაფად მიხვდა, რომ საკმაოდ დიდი რიცხვი მიადევნე თვალი შენარჩუნება ეძებს. არსებობს ორი. ერთი წუთი მაცადე. ორი მცირეა ოთხ. მე ვაპირებ მახსოვს. ორი არის პატარა. ახლა one--, რომ უფრო უკეთესი. ეს არის ის, თუნდაც მცირე. მე ვაპირებ დაივიწყოს ორი და უბრალოდ მახსოვს ერთი ახლა. და შეიძლება მან შეწყვიტოს ეძებს? ისე, რომ იგი შეიძლება დაფუძნებული ამ ინფორმაციას, მაგრამ მან უმჯობესია ძიება დანარჩენი სიაში. რადგან რა, თუ ნულოვანი იყო სიაში? რა მოხდება, თუ უარყოფითი იყო სიაში? მან მხოლოდ იცის, რომ მისი პასუხი სწორია თუ ის ამომწურავად შემოწმდება მთელი სია. ამიტომ, ჩვენ შევხედოთ დანარჩენი ამ. Three-- რომ იყო ნარჩენები დრო. მიიღო უიღბლო იყო, მაგრამ მე მაინც სწორი ამის გაკეთება. ასე რომ, ახლა იგი, სავარაუდოდ, შერჩეული მცირე რაოდენობის და მხოლოდ დააყენა ის დასაწყისში სია, როგორც მე გავაკეთებ აქ. ახლა რას აკეთებთ შემდეგ, მიუხედავად იმისა, რომ თქვენ არ ვიფიქროთ, რომ თითქმის ამ მხრივ? გაიმეორეთ პროცესი, ასე რომ, გარკვეული ციკლი. იქ ნაცნობი იდეა. ასე რომ, აქ არის ოთხი. სწორედ გაკეთებული პატარა. სწორედ კანდიდატი. უკვე აღარ. ახლა მე ვნახე ორი. სწორედ შემდეგი პატარა ელემენტს. Three-- ეს არ არის პატარა, ისე, ახლა ბენ შეიძლება pluck გარეთ ორი. და ახლა ჩვენ ვიმეორებ პროცესში და რა თქმა უნდა, სამი იღებს გაყვანილია მომავალი. ვიმეორებ პროცესში. ოთხი იღებს გაყვანილია. და ახლა ჩვენ out ნომრები, ასე რომ სია უნდა იყოს დახარისხებული. მართლაც, ეს არის ფორმალური ალგორითმი. კომპიუტერული მეცნიერი იქნებოდა მოვუწოდებთ ამ "შერჩევის დალაგების" იდეა მყოფი დასალაგებლად სიაში iteratively-- ერთხელ და ისევ და ისევ შერჩევით ყველაზე პატარა ნომერი. და რა ლამაზი შესახებ არის ის, ეს მხოლოდ ასე darn ინტუიციური. ეს ასე მარტივი. და შეგიძლიათ გაიმეოროს იგივე ოპერაცია ისევ და ისევ. ეს მარტივია. ამ შემთხვევაში ეს იყო სწრაფი, მაგრამ რამდენი ხანი რეალურად? მოდით ეს, როგორც ჩანს, და ვგრძნობ ცოტა მეტი tedious. ასე რომ, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, შვიდი, რვა, ცხრა, 10, 11, 12, 13, 14, 15 16-- თვითნებური რაოდენობა. მე უბრალოდ მინდოდა უფრო მეტი ამ დრო, ვიდრე მხოლოდ ოთხი. ასე რომ, თუ მე მაქვს მთელი რამოდენიმე ნომრები, ახლა ეს კი არ აქვს მნიშვნელობა რაც მათ are-- მოდით დაფიქრდით რას ალგორითმი მართლაც ჰგავს. დავუშვათ, რომ არსებობს ნომერს. კიდევ ერთხელ, არ აქვს მნიშვნელობა, რა ისინი, მაგრამ ისინი შემთხვევითი. მე გამოყენებით ბენ ალგორითმი. მე უნდა აირჩიოთ ყველაზე პატარა ნომერი. რას ვაკეთებ? და მე ვაპირებ, რომ ფიზიკურად იგი ამ დროს იმოქმედოს ის. ეძებს, ეძებს, ეძებს, ეძებს, ეძებს. მხოლოდ დრო მივიღებ ბოლოს სია შეიძლება ვხვდები პატარა ნომერი ორი ამ დროს. ერთი არ არის სიაში. ასე რომ, მე ჩაახშო ორი. რა გავაკეთო შემდეგი? ეძებს, ეძებს, ეძებს, ეძებს. ახლა მივხვდი, რომ ნომერი შვიდი, რადგან არსებობს ხარვეზები ამ ნომრებზე მაგრამ მხოლოდ უკანონო. კარგი. ახლა შემიძლია ჩასახშობად შვიდი. ვეძებთ ეძებს, ეძებს. ახლა მე ვთქვათ, რა თქმა უნდა, რომ ბენ არ აქვს დამატებითი RAM, დამატებითი მეხსიერება, იმიტომ, რომ, რა თქმა უნდა, ვეძებ ამავე ნომერი. რა თქმა უნდა, მე ვერ გაიხსენა ყველა იმ ნომრები, და ეს აბსოლუტურად მართალია. მაგრამ თუ ბენ ახსოვს ყველა ნომრები ის ჩანს, მას არ ნამდვილად გააკეთა ძირითადი პროგრესი იმიტომ, რომ მას უკვე აქვს უნარი ძებნის მეშვეობით ნომრები ფორუმში. გავიხსენოთ ყველა ნომრები არ დაეხმარება, იმიტომ, რომ მას ჯერ კიდევ შეუძლია, როგორც კომპიუტერი მხოლოდ შევხედოთ, ჩვენ ვთქვით, ერთი ნომერი დროულად. ასე რომ არ არსებობს ერთგვარი cheat იქ რომ შეგიძლიათ ბერკეტები. ასე რომ, სინამდვილეში, როგორც მე მოიძიებ სიაში, მე ფაქტიურად მხოლოდ შენარჩუნებას აპირებს უკან და მეოთხე მეშვეობით, plucking out შემდეგი ყველაზე პატარა ნომერი. და თქვენ შეგიძლიათ სახის infer ჩემი სულელური მოძრაობები, ეს მხოლოდ იღებს ძალიან tedious, ძალიან სწრაფად, და მე, როგორც ჩანს ბრუნდება და მეოთხე, და უკან საკმაოდ მწირი. ახლა უნდა იყოს სამართლიანი, მე არ უნდა წავიდეს საკმაოდ, ასევე, ვნახოთ უნდა იყოს სამართლიანი, მე არ უნდა ფეხით საკმაოდ როგორც ბევრი ნაბიჯები ყოველ ჯერზე. იმის გამო, რომ, რა თქმა უნდა, როგორც მე აირჩიეთ ნომრები სიიდან, დარჩენილი სიაში დღითიდღე უფრო მოკლეა. ასე რომ, მოდით ვიფიქროთ რამდენი ნაბიჯები მე რეალურად traipsing მეშვეობით ყოველ ჯერზე. პირველივე სიტუაცია ჩვენ გვქონდა 16 ნომრები, და ასე maximally-- მოდით უბრალოდ ამის გაკეთება discussion-- მე უნდა გაეცნონ 16 ნომრები მოძიების პატარა. მაგრამ ერთხელ ამოაგდო მცირე რაოდენობის, როგორ ხანგრძლივი იყო დარჩენილი სიაში, რა თქმა უნდა? მხოლოდ 15. ასე რომ, რამდენი ნომრები გააკეთა Ben ან მე არ მაქვს გაეცნონ მეორედ? 15, უბრალოდ წასვლა და იპოვოს პატარა. მაგრამ ახლა, რა თქმა უნდა, სიაში არის, ძალიან, პატარა, ვიდრე ეს იყო ადრე. ასე რომ, რამდენი ნაბიჯები არ მინდა უნდა მიიღოს მომავალი დრო? 14 და შემდეგ 13 და შემდეგ 12, პლიუს dot, dot, dot, სანამ მე დარჩა მხოლოდ ერთი. ასე რომ, ახლა კომპიუტერის მეცნიერი იქნებოდა ვთხოვთ, ისე, რა, რომ ყველა ერთნაირია? ეს ფაქტიურად უტოლდება კონკრეტული ნომერი, რომელიც ჩვენ ნამდვილად ამის arithmetically, მაგრამ ჩვენ გვინდა, რომ გაიგო ეფექტურობის შესახებ ალგორითმები ცოტა მეტი formulaically, დამოუკიდებელი რამდენი ხანი სია. და ასე რომ თქვენ იცით, რა? ეს არის 16, მაგრამ, როგორც ვთქვი, მოდით უბრალოდ მოვუწოდებთ ზომის პრობლემა n, სადაც n არის გარკვეული რაოდენობა. შესაძლოა, ეს 16, იქნებ ეს სამი, შესაძლოა, ეს მილიონი. მე არ ვიცი. მე არ მაინტერესებს. რაც მე მინდა არის ფორმულა, რომელიც შემიძლია გამოიყენოთ შედარება ეს ალგორითმი სხვა ალგორითმები რომ ვინმე შეიძლება ითქვას, უკეთესი ან უარესი. ასე რომ, თურმე, და მე მხოლოდ ვიცი, რომ ეს კლასის სკოლა, რომ ამ რეალურად მუშაობს, რათა იგივე რამ, როგორც n მეტი N პლუს ერთი ორი. და ეს მოხდება, თანაბარი პირობების რა თქმა უნდა, n კვადრატში + N ორი. ასე რომ, თუ მინდოდა ფორმულა რამდენი ნაბიჯები ჩართული იყო ეძებს ყველა იმ ნომრები ისევ და ისევ და ისევ და ისევ, მე ვიტყოდი, ის n კვადრატში + N ორი. მაგრამ იცით, რა? ეს უბრალოდ გამოიყურება ბინძურ. მე ნამდვილად მინდა ზოგადი გაგებით რამ. და თქვენ შეიძლება გავიხსენოთ საშუალო სკოლა, რომ არის ცნება უმაღლესი მიზნით ვადით. რომელიც ამ თვალსაზრისით, n კვადრატი, ო, ან ნახევარი, აქვს ყველაზე გავლენა დროთა განმავლობაში? უფრო დიდი ო იღებს, რომელიც ამ საკითხებზე ყველაზე მეტად? სხვა სიტყვებით, თუ მე შეაერთედ მილიონი, n კვადრატში იქნება სავარაუდოდ გამორჩეული ფაქტორი, იმიტომ, რომ მილიონი ჯერ თავად არის ბევრი დიდი ვიდრე დამატებული მლნ. ასე, რომ თქვენ იცით, რა? ეს არის ისეთი darn დიდი ნომერი თუ მოედანზე ნომერი. ეს ნამდვილად არ აქვს. ჩვენ უბრალოდ აპირებს ჯვარი და დაივიწყოს იგი. ასე რომ, კომპიუტერის მეცნიერი ვიტყოდი რომ ეფექტურობის ეს ალგორითმი არის ბრძანებით N კვადრატი ვგულისხმობ ნამდვილად დაახლოებას. ეს არის ერთგვარი უხეშად n კვადრატში. დროთა განმავლობაში, მით უფრო დიდია და დიდი ო იღებს, ეს არის კარგი შეფასებით, რა ეფექტურობის ან ნაკლებობა ეფექტურობის ეს ალგორითმი რეალურად არის. და მე გამომდინარეობს, რომ, რა თქმა უნდა, რეალურად აკეთებს მათემატიკის. მაგრამ ახლა მე უბრალოდ ვნახე ხელები, რადგან მე მხოლოდ მინდა, ზოგადი გაგებით, ეს ალგორითმი. ასე რომ, იმავე ლოგიკით, იმავდროულად, განვიხილოთ კიდევ ერთი ალგორითმი ჩვენ უკვე შევხედეთ ხაზოვანი ძებნა. როცა მე ეძებს ტელეფონი book-- არ დახარისხება ის, ეძებს სატელეფონო book-- ჩვენ ამბობდა, რომ ეს იყო 1000 ნაბიჯი, ან 500 ნაბიჯები. მაგრამ მოდით განზოგადება, რომ. თუ არსებობს n გვერდები სატელეფონო წიგნი, რა არის ქრონომეტრაჟი ან ეფექტურობის ხაზოვანი ძებნა? ეს ბრძანებით რამდენი ნაბიჯები, რათა იპოვოს მაიკ სმიტი გამოყენებით ხაზოვანი ძებნა, პირველი ალგორითმი, ან თუნდაც მეორე? უარეს შემთხვევაში, მაიკ ბოლოს წიგნი. ასე რომ, თუ სატელეფონო წიგნი 1000 გვერდებზე, ჩვენ ვთქვით, რომ ბოლო დროს, უარეს შემთხვევაში, შესაძლოა, უხეშად, თუ როგორ ბევრი გვერდებზე, რათა Mike? 1000. ეს არის ზედა ზღვარი. ეს არის ყველაზე უარესი სიტუაცია. მაგრამ კიდევ ერთხელ, ჩვენ მოძრავი დაშორებით საწყისი ნომრები 1000 ახლა. ეს არის უბრალოდ n. ასე რომ, რა არის ლოგიკური დასკვნა? მოძიება მაიკ ტელეფონი წიგნი, რომელიც n გვერდები შესაძლოა, ძალიან უარეს შემთხვევაში, რამდენი ნაბიჯები ბრძანებით N? და მართლაც კომპიუტერი მეცნიერი ვიტყოდი რომ გაშვებული დრო, ან შესრულების ან ეფექტურობის და არაეფექტურობა, ალგორითმი, როგორიცაა ხაზოვანი ძებნა არის ბრძანებით ო. და ჩვენ შეგვიძლია იგივე ლოგიკა გადაკვეთის რაღაც გარეთ როგორც მე უბრალოდ მეორე ალგორითმი, რომ ჩვენ გვქონდა სატელეფონო წიგნი, სადაც წავედით ორი გვერდებზე დროს. ასე რომ, 1000 გვერდი სატელეფონო წიგნი შეიძლება წაგვიყვანს 500 გვერდი მონაცვლეობით, პლუს ერთი თუ ჩვენ ორმაგად უკან ცოტა. ასე რომ, თუ სატელეფონო წიგნი n გვერდები, მაგრამ ჩვენ ვაკეთებთ ორ გვერდს დროს, რომ უხეშად რა? N ორი, ასე რომ, როგორც N ორი. მაგრამ მე მივიღე მოპოვებას მომენტში წინ, რომ n მეტი two-- ეს ერთგვარი იგივე, რაც უბრალოდ n. ეს არის მხოლოდ მუდმივი ფაქტორი, კომპიუტერული მეცნიერები ვიტყოდი. მოდით მხოლოდ ფოკუსირება ცვლადები, ნამდვილად ყველაზე დიდი ცვლადები წელს განტოლება. ასე რომ წრფივი ძიება, თუ არა გაკეთდეს ერთი გვერდზე დროს ან ორი გვერდებზე დროს, სახის ფუნდამენტურად იგივე. ეს ჯერ კიდევ ბრძანებით n. მაგრამ მე აცხადებდა ჩემი სურათი ადრე რომ მესამე ალგორითმი არ იყო წრფივი. ეს არ იყო სწორი ხაზი. ეს იყო, რომ curved ხაზი, და მათემატიკური ფორმულა იყო რა? შესვლა N-- ასე ჟურნალი ბაზა ორ ო. და ჩვენ არ უნდა წასვლას ძალიან ბევრი დეტალი on logarithms დღეს, მაგრამ ყველაზე კომპიუტერის მეცნიერები რომ არ კი გეტყვით, თუ რა ბაზა. იმის გამო, რომ ეს ყველაფერი მხოლოდ მუდმივი ფაქტორი, ასე ვთქვათ, მხოლოდ უმნიშვნელო რიცხვითი განსხვავებები. ასე რომ, ეს იქნება ძალიან გავრცელებული გზა განსაკუთრებით ფორმალური კომპიუტერული მეცნიერთა საბჭოს ან პროგრამისტები თეთრ დაფაზე რეალურად კამათი, რომელიც ალგორითმი ისინი გამოიყენოთ ან რა ეფექტურობის მათი ალგორითმი. და ეს არ არის აუცილებლად რაღაც თქვენ განიხილოს ნებისმიერი დიდი დეტალი, მაგრამ კარგი პროგრამისტი არის ვინმე რომელსაც აქვს მყარი, ფორმალური ფონზე. ის ლაპარაკი თქვენ ამ სახის გზა და რეალურად ხარისხიანი არგუმენტები თუ რატომ ერთი ალგორითმი ან ერთი ნაჭერი პროგრამული უზრუნველყოფა უმაღლესი რამდენიმე გზა სხვა. იმის გამო, რომ თქვენ ნამდვილად მხოლოდ აწარმოებს ერთი პიროვნების პროგრამა და იმედი რაოდენობა წამში სჭირდება დასალაგებლად ზოგიერთი ნომრები, და თქვენ შეგიძლიათ აწარმოებს რამდენიმე სხვა პირის მიერ პროგრამის და იმედი რაოდენობა წამში სჭირდება. მაგრამ ეს არის უფრო ზოგადი, ისე, რომ თქვენ შეგიძლიათ გამოიყენოთ ანალიზი ალგორითმები, თუ თქვენ, უბრალოდ ქაღალდის ან უბრალოდ სიტყვიერი შეურაცხყოფა მიაყენეს. გარეშე კი გაშვებული ის გარეშე კი ცდილობს ნიმუში საშუალებებით, შეგიძლიათ უბრალოდ მიზეზი მეშვეობით. ასე რომ აყვანის დეველოპერი ან თუ რომელსაც მას ერთგვარი ამტკიცებენ, რომ თქვენ რატომ მათი ალგორითმი, მათი საიდუმლო სოუსი ეძებს მილიარდობით ვებ გვერდების თქვენი კომპანია არის უკეთესი, ამ არიან სახის არგუმენტები მათ უნდა იდეალურად შეძლებს მიიღოს. ან თუნდაც ეს არის სახის რამ, რომ ამუშავება დისკუსია, at სულ მცირე, ძალიან ფორმალური განხილვა. კარგი. ასე რომ, ბენ შემოთავაზებული რაღაც მოუწოდა შერჩევა ერთგვარი. მაგრამ მე ვაპირებ შესთავაზოს, რომ არსებობს სხვა გზები ამით, ძალიან. რა მე ნამდვილად არ მინდა ბენ ის ალგორითმი ის არის, რომ დადიოდა, ან რომელმაც მე ფეხით, უკან და მეოთხე და უკან და უკან და მეოთხე. რა მოხდება, თუ ნაცვლად მე უნდა გავაკეთოთ რაღაც ამ ნომრებზე აქ და მე მხოლოდ გაუმკლავდეთ თითოეული ნომერი, თავის მხრივ, როგორც მე მომცეს? სხვა სიტყვებით, აქ არის ჩემს სიაში ნომრები. ოთხი, ერთი, სამი, ორი. და მე ვაპირებ ამის შემდეგ. მე ვაპირებ ჩადეთ ნომრები სადაც მათ ეკუთვნის საკმაოდ ვიდრე შერჩევით მათ ერთ დროს. სხვა სიტყვებით, აქ არის ნომერი ოთხი. აი ჩემი ორიგინალური სიაში. და მე ვაპირებ, რომ შევინარჩუნოთ არსებითად ახალ სიას აქ. ასე რომ, ეს არის ძველი სიაში. ეს არის ახალი სია. ვხედავ ნომერი ოთხი პირველი. ჩემი ახალი სიაში თავდაპირველად ცარიელი, ასე რომ trivially შემთხვევაში რომ ოთხი ახლა ასორტი სიაში. მე უბრალოდ აღების ხმების მე ეძლევა, და მე აყენებს ეს ჩემი ახალი სია. არის ეს ახალი სია დალაგებულია? ჰო. ეს სულელური იმიტომ, რომ იქ მხოლოდ ერთი ელემენტს, მაგრამ ის აბსოლუტურად გადანაწილებული. არაფერია გარეთ ადგილი. ეს არის უფრო საინტერესო, ეს ალგორითმი, როცა გადავა მომდევნო ნაბიჯი. ახლა მე მაქვს ერთი. ასე რომ, რა თქმა უნდა, ეკუთვნის დროს დასაწყისში ან დასასრულს ამ ახალ სიაში? დასაწყისი. ასე რომ, მე უნდა გავაკეთოთ ზოგიერთი მუშაობა ახლა. მე უკვე გარკვეული თავისუფლებების ჩემი marker მხოლოდ ხატვის რამ სადაც მე მინდა მათ, მაგრამ ეს არ არის ნამდვილად ზუსტი კომპიუტერი. კომპიუტერი, როგორც ვიცით, არ აქვს RAM, ან ოპერატიული მეხსიერება, და რომ ერთი byte და კიდევ ერთი ბაიტი და კიდევ ერთი ბაიტი. და თუ თქვენ გაქვთ გბ RAM, თქვენ გაქვთ მილიარდი bytes, მაგრამ ისინი ფიზიკურად ერთ ადგილას. თქვენ არ შეგიძლიათ უბრალოდ გადაადგილება პერსონალის გარშემო აღებით ის ფორუმში სადაც გინდა. ასე რომ, თუ ჩემი ახალი სია ოთხ ადგილას მეხსიერებაში, სამწუხაროდ, ოთხი უკვე არასწორ ადგილას. ასე რომ ჩადეთ ნომერი ერთი მე არ შემიძლია დავხაზო აქ. ეს მეხსიერების არ არსებობს. ეს იქნება ღალატი, და მე ღალატი ილუსტრირებული რამდენიმე წუთში აქ. ასე ნამდვილად, თუ მინდა, რომ აქ, მაქვს დროებით ასლი ოთხ და შემდეგ დააყენა ერთი არსებობს. ეს ჯარიმა, რომ სწორი, რომ ტექნიკურად შესაძლებელია, მაგრამ მიხვდებიან, რომ ზედმეტი მუშაობა. მე არ დააყენა ნომერი ადგილზე. მე პირველად მქონდა გადაადგილება ნომერი, მაშინ, რომ ეს ადგილი, ამიტომ ასეთი გაორმაგდა ჩემი ოდენობით მუშაობა. ასე რომ შევინარჩუნოთ ამის გათვალისწინებით. მაგრამ მე ახლა კეთდება ამ ელემენტს. ახლა მინდა, რომ დაიბრუნოს ნომერი სამი. სად, რა თქმა უნდა, ეს არ ეკუთვნის? შორის. მე ვერ მოტყუებას აღარ და მხოლოდ დააყენოს ის არსებობს, რადგან, კიდევ ერთხელ, ამ მეხსიერების არის ფიზიკური ადგილას. ასე რომ, მე უნდა კოპირება ოთხ და ბოლო სამი აქ. დიდი არაფერი. ეს მხოლოდ ერთი ზედმეტი ნაბიჯი ერთხელ გრძნობს ძალიან იაფია. მაგრამ ახლა მე გადაადგილება, რათა ორი. ორი, რა თქმა უნდა, ეკუთვნის აქ. ახლა დაიწყება ვხედავთ, თუ როგორ მუშაობა შეიძლება წყობის up. ახლა რა უნდა გავაკეთოთ? ჰო, მე უნდა გადავიდეს ოთხი, მე მაშინ უნდა კოპირება სამი, და ახლა მე ჩადეთ ორი. და დაჭერა ამ ალგორითმი, საინტერესოა, არის, რომ ვივარაუდოთ, რომ ჩვენ გვაქვს უფრო ექსტრემალური შემთხვევაში, თუ ის, მოდით ვთქვათ, რვა, შვიდი, ექვსი, ხუთი, ოთხი, სამი, ორი, ერთი. ეს არის, ბევრ კონტექსტში, უარეს შემთხვევაში, იმის გამო, რომ darn რამ ფაქტიურად უკან. ეს ნამდვილად არ აქვს იმოქმედებს ბენ ალგორითმი, იმიტომ, რომ ბენ შერჩევა ერთგვარი ის აპირებს შენარჩუნება ბრუნდება და მეოთხე მეშვეობით სიაში. და რადგან იგი ყოველთვის ეძებს მთელი დარჩენილი სია, მნიშვნელობა არ აქვს, სადაც ელემენტები არიან. მაგრამ ამ შემთხვევაში ჩემი ჩასმა მიდგომა მოდით ცდილობენ ამ. ასე რომ, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, შვიდი, რვა. ერთი ორი სამი ოთხი, ხუთი, ექვსი, შვიდი, რვა. მე ვაპირებ რვა, და სადაც მე ამას? ისე, დასაწყისში ჩემი სია, იმიტომ, რომ ეს ახალი სია დალაგებულია. და მე გადაკვეთა ის. სად დააყენა შვიდი? Darn იგი. ის უნდა წავიდეს იქ, ასე რომ მე უნდა გავაკეთოთ ზოგიერთი გადაწერა. და ახლა შვიდი მიდის აქ. ახლა მე გადაადგილება, რათა ექვსი. ახლა ეს კიდევ უფრო მეტი მუშაობა. რვა წასვლა აქ. Seven უნდა წავიდეს აქ. ახლა ექვსი შეგვიძლია წავიდეთ აქ. ახლა მე დაიბრუნოს ხუთ. ახლა რვა უნდა წავიდეს აქ, შვიდი უნდა წავიდეს აქ, ექვსი წასვლა აქ და ახლა ხუთ და ვიმეორებ. და მე საკმაოდ ბევრი მოძრავი მას მუდმივად. ასე რომ, საბოლოოდ, ეს ალგორითმი ჩვენ გამოგიგზავნით ეძახით ჩასმა დალაგება რეალურად აქვს ბევრი სამუშაოა, ძალიან. ეს უბრალოდ სხვადასხვა სახის სამუშაო, ვიდრე ბენ. ბენ მუშაობის ჰქონდა ჩემთვის აპირებს უკან და მეოთხე, ყველა დროის, შერჩევის შემდეგი ყველაზე პატარა ელემენტი ისევ და ისევ. ასე რომ, ამ ძალიან ვიზუალური სახის სამუშაო. ეს სხვა ალგორითმი, რომელიც ჯერ კიდევ correct-- ის მიიღებს სამუშაოს done-- უბრალოდ ცვლის ოდენობით მუშაობა. როგორც ჩანს, თავდაპირველად თქვენ გადარჩენის, რადგან თქვენ მხოლოდ საქმე თითოეული ელემენტის წინა გარეშე ფეხით ყველა გზას სია, ისევე როგორც ბენ იყო. მაგრამ პრობლემა ის არის, განსაკუთრებით ეს გიჟები შემთხვევებში, როდესაც ეს ყველაფერი უკან, თქვენ უბრალოდ სახის გადადების მძიმე სამუშაოს სანამ არ დაფიქსირება თქვენი შეცდომები. ასე რომ, თუ თქვენ წარმოიდგინეთ, ეს რვა და შვიდი და ექვსი და ხუთი და შემდეგ ოთხი და სამი და ორი მოძრავი მათი მეშვეობით სია, ჩვენ უბრალოდ შეცვალა ტიპის მუშაობა ვაკეთებთ. ნაცვლად იმისა, რომ იგი დაწყებული ჩემი iteration, მე უბრალოდ აკეთებს იგი ყოველი მცდელობაა. გამოდის, რომ ეს ალგორითმი, ძალიან, ზოგადად მოუწოდა Insertion დალაგების, ასევე ბრძანებით N კვადრატში. ეს, ფაქტობრივად, არ არის უკეთესი, არსებობს უკეთესი ყველა. თუმცა, არსებობს მესამე მიდგომა მე მოგიწოდებთ განვიხილოთ, რომელიც ამ. ასე რომ, ვფიქრობ, ჩემი სია, სიმარტივის კიდევ ერთხელ, არის ოთხი, ერთი, სამი, two-- მხოლოდ ოთხი ნომრები. ბენ ჰქონდა კარგი ინტუიცია, კარგი ადამიანის ინტუიცია ადრე, რომლითაც ჩვენ დაფიქსირდა მთელი სიაში eventually-- Insertion დალაგების. მე coaxed ჩვენთან ერთად. მაგრამ მოდით განიხილავს უმარტივესი გზა დაფიქსირება ამ სიაში. ამ სიაში არ არის გადანაწილებული. რატომ? ინგლისურ, რატომ ეს არ არის რეალურად გადანაწილებული. რას ნიშნავს, არ უნდა იყოს გადანაწილებული? სტუდენტი: ეს არ არის თანმიმდევრული. დავით Malan: არ თანმიმდევრული. მომეცი მაგალითი. სტუდენტი: განათავსეთ მათ მიზნით. დავით Malan: OK. მომეცი უფრო კონკრეტული მაგალითი. სტუდენტი: მიმდევრობით. დავით Malan: არ მიმდევრობით. უფრო სწორად. მე არ ვიცი, რას ნიშნავს აღმავალი. რა მოხდა? სტუდენტი: პატარა ციფრები არ არის პირველი სივრცეში. დავით Malan: პატარა ნომრის არა პირველ სივრცეში. უფრო კონკრეტულად. მე დაწყებული დაჭერა. ჩვენ იმედი, მაგრამ რა არის მწყობრიდან აქ? STUDENT რიცხვითი თანმიმდევრობა. დავით Malan: რიცხვითი თანმიმდევრობა. ყველას სახის შენახვის ის აქ ძალიან მაღალ დონეზე. უბრალოდ სიტყვასიტყვით მეუბნებოდა, თუ რა არის არასწორი, როგორც ხუთი წლის შეიძლება. სტუდენტი: პლუს ერთი. დავით Malan: რა არის ეს? სტუდენტი: პლუს ერთი. დავით Malan: რას ნიშნავს პლუს ერთი? მომეცი სხვადასხვა ხუთი წლის. რა არის არასწორი, დედა? რა არის არასწორი, მამა? რას ნიშნავს ეს არ არის გადანაწილებული? სტუდენტი: ეს არ არის სწორი ადგილი. დავით Malan: რა არის არ არის სწორი ადგილი? სტუდენტი: Four. დავით Malan: კარგი, კარგი. ასე რომ ოთხი არ არის, სადაც ეს უნდა იყოს. კერძოდ, ეს უფლება? ოთხი და ერთი, პირველი ორი რიცხვის ვხედავ. არის თუ არა ეს უფლება? არა, ისინი მწყობრიდან, არა? სინამდვილეში, ვფიქრობ, ახლა შესახებ კომპიუტერი, ძალიან. ეს შეიძლება მხოლოდ შევხედოთ იქნებ ერთი, იქნებ ორი რამ once-- და რეალურად მხოლოდ ერთი რამ იმ დროს, მაგრამ ეს შეიძლება მინიმუმ შეხედეთ ერთი რამ მაშინ შემდეგი რამ უფლება შემდეგ იგი. ასე რომ, ეს, რათა? რათქმაუნდა არა. ასე, რომ თქვენ იცით, რა? რატომ არ ვიღებთ ბავშვი ნაბიჯები აფიქსირებს ამ პრობლემას ნაცვლად აკეთებს ამ ლამაზი ალგორითმები ისევე როგორც ბენ, სადაც ის ერთგვარი აფიქსირებს, რომ ის მიერ looping მეშვეობით სია ნაცვლად აკეთებს, რა გავაკეთე, სადაც მე უბრალოდ სახის დაფიქსირდა, როგორც ჩვენ წავიდეთ? მოდით უბრალოდ სიტყვასიტყვით ჩაიშალოს ცნება order-- რიცხვითი მიზნით, ეძახით რასაც თქვენ want-- შევიდა ამ pairwise შედარება. ოთხი და ერთი. არის თუ არა ეს სწორი მიზნით? მოდით დაფიქსირება, რომ. ერთი და ოთხი და შემდეგ ჩვენ უბრალოდ კოპირება. ყველა უფლება, კარგი. მე დაფიქსირდა ერთი და ოთხი. სამი და ორი? No. მოდით, ჩემი სიტყვა ემთხვევა ჩემი თითების. ოთხი და სამი? ეს არ არის იმისათვის, ასე რომ მე ვაპირებ გავაკეთოთ ერთი, სამი, ოთხი, ორი. კარგი, კარგია. ახლა ოთხი და ორი? ჩვენ ეს უნდა გამოვასწოროთ, ძალიან. ასე რომ, ერთი, სამი, ორი, ოთხი. ასე რომ, ის გადანაწილებული? არა, მაგრამ იგი უფრო ახლოს გადანაწილებული? ეს არის, იმიტომ, რომ ჩვენ დაფიქსირდა ეს შეცდომა, ჩვენ ფიქსირებული ეს შეცდომა, და ჩვენ ფიქსირებული ეს შეცდომა. ასე რომ, ჩვენ დაფიქსირდა სამი შეცდომები, ალბათ. ჯერ კიდევ ნამდვილად არ გამოიყურება დახარისხებული, მაგრამ ის ობიექტურად დაახლოება დახარისხებული იმიტომ, რომ ჩვენ დაფიქსირდა რამდენიმე იმ შეცდომების. ახლა რა გავაკეთოთ შემდეგი? I ტიპის მიაღწია ბოლოს სიაში. როგორც ჩანს, არ დაფიქსირდა ყველა შეცდომა, მაგრამ არა. იმის გამო, რომ ამ შემთხვევაში, ზოგიერთი ნომრები ალბათ bubbled უფრო მჭიდრო სხვა ნომრები, ჯერ კიდევ მწყობრიდან. ასე რომ, მოდით ეს კიდევ ერთხელ, და მე უბრალოდ ის ადგილი ამ დროს. ერთი და სამი? ეს ჯარიმა. სამი და ორი? რა თქმა უნდა, არ არის, ასე რომ, მოდით შეცვლის. ასე რომ, ორი, სამი. სამი და ოთხი? და ახლა მოდით უბრალოდ იყოს განსაკუთრებით pedantic აქ. არის ის გადანაწილებული? თქვენ ადამიანები ვიცით, ეს დახარისხებული. მე უნდა ვეცადოთ ერთხელ. ასე რომ, Olivia სთავაზობს ვცდილობ კიდევ ერთხელ. რატომ? იმის გამო, რომ კომპიუტერი არ ფუფუნება ჩვენი თვალით მხოლოდ გადავავლე back-- OK, მე გაკეთდეს. რა კომპიუტერი განსაზღვრავს რომ სიაში არის გადანაწილებული? მექანიკურად. მე უნდა გაიაროს კიდევ ერთხელ, და თუ მე არ მიიღოს / იპოვით ნებისმიერი შეცდომა შეიძლება მე მაშინ დავასკვნათ, როგორც კომპიუტერი, yep, ჩვენ კარგი წასვლა. ასე რომ, ერთი და ორი, და სამი, სამი და ოთხი. ახლა მე შეიძლება საბოლოოდ ვთქვა, ეს არის დახარისხებული, იმიტომ, რომ მე არ შეუცვლია. ახლა ეს იქნება შეცდომა და მხოლოდ სულელური, თუ მე, კომპიუტერი, კითხვაზე, იმ იგივე კითხვები ისევ ველოდებით სხვადასხვა პასუხი. არ უნდა მოხდეს. ასე რომ, ახლა სია დალაგებულია. სამწუხაროდ, ქრონომეტრაჟი ეს ალგორითმი ასევე n კვადრატში. რატომ? იმის გამო, რომ თქვენ გაქვთ N ნომრები, და უარეს შემთხვევაში, თქვენ უნდა გადავიდეს N ნომრები n ჯერ იმიტომ, რომ თქვენ უნდა შევინარჩუნოთ აპირებს უკან შემოწმება და პოტენციურად დაფიქსირება ამ ნომრებზე. და ჩვენ შეგვიძლია გავაკეთოთ უფრო ფორმალური ანალიზის, ძალიან. ასე რომ, ეს არის ყველა, რომ ვთქვათ, ჩვენ მიღებული სამი განსხვავებული მიდგომები, ერთი მათგანი მაშინვე ინტუიციური off bat, ბენ ჩემი ვარაუდით ჩასმა დალაგება ეს ერთი სადაც თქვენ სახის დაკარგავს დანახვაზე ტყეში ხეები თავდაპირველად. მაგრამ თუ თქვენ მიიღოს უკან გადადგმული ნაბიჯია, voila, ჩვენ დაფიქსირდა დახარისხება ცნება. ასე რომ, ეს, ვთქვათ, ქვედა დონეზე, ალბათ, ვიდრე ზოგიერთი იმ სხვა ალგორითმები, მაგრამ მოდით, თუ ჩვენ ვერ ვიზუალიზაციისთვის ამ გზით ეს. ასე რომ, ეს არის ლამაზი პროგრამული უზრუნველყოფა, რომ ვინმე წერდა გამოყენებით ფერადი ბარები, რომ აპირებს ამის შემდეგ ჩვენთვის. თითოეული ეს ბარები წარმოადგენს ნომერი. Taller ბარი, მით უფრო დიდია ნომერი, პატარა ბარი, პატარა ნომერი. ასე რომ იდეალურად ჩვენ გვინდა ლამაზი პირამიდის სადაც იგი იწყებს მცირე და იღებს დიდი, რაც ნიშნავს იმას, რომ ამ ბარები დახარისხებული. ამიტომ, მე ვაპირებ წავიდეთ წინ და აირჩიოს, მაგალითად, ბენ ალგორითმი , პირველი შერჩევა ერთგვარი. და შენიშნავს, რასაც ის აკეთებს. გზა ისინი არჩეული ვიზუალურად ეს ალგორითმი ის არის, რომ, ისევე, როგორც მე ვიყავი გავლით ჩემს სიაში, ეს პროგრამა ფეხით თავისი სიაში ნომრები, ხაზს უსვამს ვარდისფერი თითოეულ ნომერი რომ ის ეძებს. და რა უნდა მოხდეს ახლა? ყველაზე პატარა ნომერი, რომელიც მე და ბენ ნაპოვნი მოულოდნელად იღებს გადავიდა დასაწყისში სიაში. და შეამჩნია ისინი არ გაყრის ნომერი, რომელიც იქ იყო, და რომ შესანიშნავად ჯარიმა. მე არ მოხვდება, რომ დონეზე დეტალურად. მაგრამ ჩვენ უნდა დააყენოს რომ ნომერი, სადღაც, ასე რომ ჩვენ უბრალოდ გადაიტანეს ღია ადგილზე, რომელიც შეიქმნა. ამიტომ, მე ვაპირებ, რათა დაჩქარდეს ეს up, იმიტომ, რომ წინააღმდეგ შემთხვევაში, ეს ხდება ძალიან რუტინული სწრაფად. ანიმაციები speed-- იქ ჩვენ წავიდეთ. ასე რომ, ახლა იგივე პრინციპი მე მსჯელობა, მაგრამ თქვენ შეიძლება დაიწყოს გრძნობენ ალგორითმი, თუ ნება, ან დანახვა ცოტა უფრო ნათლად. და ეს ალგორითმი აქვს ეფექტი შერჩევის შემდეგი ყველაზე პატარა ელემენტი, ასე რომ თქვენ აპირებთ უნდა დაიწყოს ვხედავ, რომ გაეზარდათ მარცხენა. და თითოეულ iteration, როგორც მე შემოთავაზებული, ეს იმას ცოტა ნაკლები მუშაობა. ეს არ უნდა წავიდეთ ყველა გზა უკან მარცხენა ბოლოს სიაში, იმიტომ, რომ ეს უკვე იცნობს დახარისხებული. ასე რომ, ეს სახის იგრძნობა ეს დაჩქარება, მიუხედავად იმისა, რომ ყოველი ნაბიჯი არის იღებენ იგივე დროის. არსებობს მხოლოდ ნაკლები ნაბიჯები დარჩენილი. და ახლა თქვენ შეგიძლიათ სახის გრძნობს ალგორითმი გაწმენდის ბოლომდე, და მართლაც, ახლა ის გადანაწილებული. ასე რომ, Insertion დალაგების არის ყველაფერი კეთდება. მე უნდა ხელახლა randomize მასივი. და შენიშნავს, მე შემიძლია უბრალოდ შენარჩუნება randomizing მას, და ჩვენ კიდევ დაახლოებას იგივე მიდგომა, Insertion დალაგების. მიადევნე თვალი ნელი მას აქ. დავიწყოთ, რომ დასრულდა. შეჩერება. მოდით გაფართოებული ოთხ. იქ ჩვენ წავიდეთ. Randomize ისინი მასივი. და აქ ჩვენ go-- Insertion დალაგების. თამაში. გაითვალისწინეთ, რომ ეს საქმე ყოველი ელემენტი ეს შეტაკებები დაუყოვნებლივ, მაგრამ თუ მას ეკუთვნის არასწორი ადგილი ცნობა ყველა სამუშაო, რომელიც უნდა მოხდეს. ჩვენ უნდა შევინარჩუნოთ გადასვლის მეტი და სხვა ელემენტები, რათა ოთახი ერთი, ჩვენ გვინდა, რომ ადგილზე. ასე რომ, ჩვენ აქცენტი მარცხენა ბოლოს სია. გაითვალისწინეთ ჩვენ კი არ შევხედეთ ჩვენ არ მონიშნულია ვარდისფერი არაფერი მარჯვნივ. ჩვენ უბრალოდ საქმე პრობლემების, როგორც ჩვენ წავიდეთ მაგრამ ჩვენ შექმნის ბევრი მუშაობა საკუთარ თავს მაინც. ასე რომ, თუ ჩვენ დაჩქარდეს ეს ახლა წასვლა დასრულების შემდეგ, მას აქვს სხვადასხვა ფიქრობს, რომ ის მართლაც. უბრალოდ აქცენტი მარცხენა ბოლოს, მაგრამ ამით ცოტა მეტი მუშაობა, როგორც needed-- სახის დამარბილებელი რამ მეტი, აფიქსირებს რამ, მაგრამ საქმე საბოლოო ჯამში თითოეული ელემენტის ერთ დროს სანამ არ მივიღებთ the-- კარგად, ჩვენ ყველამ ვიცით, თუ როგორ აპირებს დასრულდება, ასე რომ, ეს არის პატარა underwhelming ალბათ. მაგრამ სიაში end-- spoiler-- იქნება გადანაწილებული. მოდით შევხედოთ ერთი ბოლო. ჩვენ არ შეგვიძლია უბრალოდ გამოტოვოთ ახლა. ჩვენ თითქმის არ არსებობს. ორი წასვლა, ერთი უნდა წავიდეს. და voila. შესანიშნავი. ასე რომ, ახლა მოდით ერთი ბოლო, ხელახლა randomizing ერთად bubble sort. და შენიშნავს, აქ, განსაკუთრებით, თუ მე ნელი ის ქვემოთ, ეს იმას შენარჩუნება swooping მეშვეობით. მაგრამ შეამჩნია ეს მხოლოდ იღებს pairwise comparisons-- ერთგვარი ადგილობრივი გადაწყვეტილებები. მაგრამ, როგორც კი მივიღებთ, რომ ბოლოს სიის ვარდისფერი, რა ხდება უნდა მოხდეს? ჰო, ის აპირებს უნდა დაიწყოს, რადგან ეს მხოლოდ ფიქსირებული pairwise შეცდომები. და რომ შეიძლება არ გამოვლინდა კიდევ სხვები. ასე რომ, თუ დაჩქარდეს ეს, თქვენ ვხედავთ, რომ, ისევე როგორც სახელი გულისხმობს, პატარა ელემენტებს უფრო სწორად, დიდი ელემენტებს ვიწყებთ ბუშტი მდე დაბრუნება, თუ გნებავთ. და პატარა ელემენტები არიან დაწყებული bubble ქვემოთ მარცხენა. და მართლაც, რომ სახის ვიზუალური ეფექტი, ისევე. ასე რომ, ეს დასრულდება მდე დასრულების ძალიან მსგავსი გზით, ძალიან. ჩვენ არ გვაქვს, რომ არენაზე ამ კონკრეტულ შემთხვევაში. ნება მომეცით გახსნა ახლა, ძალიან. არსებობს რამდენიმე სხვა დახარისხება ალგორითმები მსოფლიოში, რამდენიმე რომლის ტყვედ აქ. და, განსაკუთრებით, მოსწავლეების, რომლებიც არ არიან აუცილებლად ვიზუალური და მათემატიკის, როგორც ჩვენ გავაკეთეთ ადრე, ჩვენ შეგვიძლია ასევე ამის გაკეთება audially თუ ჩვენ ასოცირდება ხმა ამ. და უბრალოდ for fun, აქ არის რამდენიმე სხვადასხვა ალგორითმები, ერთ-ერთი მათგანი, კერძოდ, თქვენ აპირებს შეამჩნია ეწოდება "შერწყმა დალაგების". სინამდვილეში ეს არის ფუნდამენტურად უკეთესი ალგორითმი, ისეთი, რომ შერწყმა დალაგების, ერთ-ერთი პირობა თქვენ შესახებ, რომ ნახოთ, არ არის ბრძანებით N კვადრატში. ეს ბრძანებით N ჯერ შესვლა of n, რომელიც რეალურად პატარა და ამით უფრო სწრაფად, ვიდრე სხვა სამი. და იქ რამდენიმე სხვა სულელური პირობა, რომ ჩვენ დავინახავთ. ასე რომ, აქ ჩვენ წავიდეთ ერთად ხმა. ეს არის Insertion დალაგების, ასე რომ კიდევ ერთხელ ეს უბრალოდ საქმე ელემენტები როგორც ისინი. ეს არის bubble sort, ამიტომ იმის გათვალისწინებით, მათ წყვილი დროს. ისევ და ისევ, დიდი ელემენტები არიან bubbling მდე დაბრუნება. შემდეგი up შერჩევა ერთგვარი. ეს არის ბენ ალგორითმი, სადაც ერთხელ ის შერჩევით iteratively შემდეგი ყველაზე პატარა ელემენტს. ისევ და ისევ, ახლა შეგიძლიათ ნამდვილად მესმის, რომ ის დაჩქარებას, მაგრამ მხოლოდ იმდენად, რამდენადაც როგორც ის აკეთებს და უფრო ნაკლებად მუშაობა თითოეული მცდელობაა. ეს არის სწრაფად ერთი, შერწყმა დალაგების, რომელიც დახარისხება მტევანი ნომრები ერთად და შემდეგ აერთიანებს მათ. ასე რომ, look-- მარცხენა ნახევარი უკვე დახარისხებული. ახლა ის დახარისხება მარჯვენა ნახევარში, და ახლა ის აპირებს აერთიანებს მათ ერთ. ეს არის რაღაც მოუწოდა "Gnome სახის". და თქვენ შეგიძლიათ სახის ვხედავ, რომ ის აპირებს უკან და მეოთხე, აფიქსირებს მუშაობა ცოტა აქ და იქ ადრე იგი აგრძელებს ახალი სამუშაო. და ეს არის ის. არსებობს კიდევ ერთი დალაგების, რომელიც მართლაც მხოლოდ აკადემიური მიზნებისათვის, სახელწოდებით "სულელური ერთგვარი", რომელიც იღებს თქვენი მონაცემები, ჯიშები ის შემთხვევით, და შემდეგ ამოწმებს, თუ ის გადანაწილებული. და თუ ეს ასე არ არის, იგი ხელახლა ჯიშები ეს შემთხვევით, ამოწმებს, თუ ეს დახარისხებული, და თუ არ იმეორებს. და თეორიულად probabilistically ეს დაასრულებს, მაგრამ მას შემდეგ, საკმაოდ ცოტა დრო. ეს არ არის ყველაზე ეფექტური ალგორითმები. ასე რომ ნებისმიერი კითხვებს იმ კერძოდ ალგორითმები ან არაფერი დაკავშირებული იქ, ძალიან? მოდით, ახლა აჯავრებენ გარდა რა ყველა ეს ხაზები, რომ მე უკვე ხატვის და რა მე თუ ვთქვათ კომპიუტერული შეგიძლიათ გააკეთოთ ქვეშ hood. მე ვიტყოდი, რომ ყველა ამ ნომრებზე მე შენარჩუნება drawing-- მათ უნდა მიიღონ შენახული სადღაც მეხსიერებაში. ჩვენ თავი დაეღწია ამ ბიჭი, ძალიან. ასე ცალი მეხსიერების კომპიუტერში ასე RAM DIMM არის ის, რაც ჩვენ ჩხრეკა გუშინ, ორმაგი inline მეხსიერება module-- ასე გამოიყურება. და თითოეულ ამ პატარა შავი ჩიპი არის გარკვეული რაოდენობის ბაიტი, როგორც წესი. და მაშინ ოქროს ქინძისთავები ჰგვანან ხაზები, დააკავშირებს მას კომპიუტერი, და მწვანე სილიკონის საბჭოს მხოლოდ რა ინახავს ყველაფერს ერთად. ასე რომ, რას ნიშნავს რეალურად? თუ ასეთი მიაპყროს იგივე სურათი, მოდით ვივარაუდოთ, სიმარტივის რომ ეს DIMM, ორმაგი inline მეხსიერების მოდული, ერთ-ერთი გბ RAM, ერთი Gigabyte of მეხსიერება, რომელიც რამდენი ბაიტი სულ? ერთი Gigabyte რამდენი ბაიტი? მეტია. 1,124 არის კილო, 1000. Mega არის მლნ. გიგა არის მილიარდი. ვარ მე ცრუობს? შეგვიძლია კი წავიკითხე ეტიკეტზე? ეს არის რეალურად 128 გიგაბაიტი, ასე რომ მეტი. მაგრამ ჩვენ პრეტენზია ამ არის მხოლოდ ერთი gigabyte. ასე რომ, ეს ნიშნავს, რომ იქ მილიარდი ბაიტი მეხსიერება ხელმისაწვდომია ჩემთვის ან 8 მილიარდი ბიტი, მაგრამ ჩვენ ვაპირებთ გაიგო თვალსაზრისით ბაიტი ახლა, წინ მოძრაობა. ასე რომ, იმას ნიშნავს, რომ ეს არის ერთი ბაიტი, ეს არის კიდევ ერთი ბაიტი, ეს არის კიდევ ერთი ბაიტი, და თუ ჩვენ ნამდვილად სურდა უნდა იყოს კონკრეტული, ჩვენ უნდა მიაპყროს მილიარდი პატარა მოედნები. მაგრამ რას ნიშნავს ეს? ასევე, ნება მომეცით უბრალოდ მიუახლოვდით წელს ამ სურათს. თუ მაქვს, რომ რაღაც გამოიყურება მოსწონს ეს ახლა, რომ ოთხი ბაიტი. ასე რომ, მე ვერ დააყენა ოთხი ნომრები აქ. ერთი ორი სამი ოთხი. ან მე ვერ დააყენა ოთხი ასო ან სიმბოლო. "Hey!" შეიძლება წავიდეს იქ, იმიტომ, რომ თითოეული ასო, ჩვენ განვიხილეთ ადრე, შეიძლება წარმოდგენილი იყოს რვა ბიტი და ASCII ან byte. სხვა სიტყვებით, თქვენ შეგიძლიათ ბოლო 8 მილიარდი რამ შიგნით ამ ერთი ჯოხი მეხსიერება. ახლა ეს რას ნიშნავს, რომ რამ უკან თავში დაბრუნება მეხსიერებაში, როგორც ეს? ეს არის ის, რაც პროგრამისტი რომ დარეკოთ "მასივი". კომპიუტერული პროგრამა, თქვენ არ ვფიქრობ შესახებ ძირითადი აპარატურა, თავისთავად. უბრალოდ ვფიქრობ თავს, როგორც ხელმისაწვდომობის მილიარდი bytes სულ და თქვენ შეგიძლიათ არაფერი გსურთ იგი. მაგრამ მოხერხებულობის ეს არის ზოგადად სასარგებლო თქვენი მეხსიერება უფლება შემდეგი ერთმანეთს მოსწონს ეს. ასე რომ, თუ მე მიუახლოვდით ამ იმიტომ, რომ ჩვენ, რა თქმა უნდა არ აპირებს მიაპყროს მილიარდი პატარა squares-- მოდით ვივარაუდოთ, რომ ამ ფორუმში წარმოადგენს რომ ჯოხი მეხსიერების ახლა. და მე უბრალოდ მიაპყროს როგორც ბევრი როგორც ჩემი marker მთავრდება მაძლევს აქ. ახლა ჩვენ გვაქვს ჯოხი მეხსიერების ფორუმში რომ ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, seven-- ასე 42 ბაიტი მეხსიერების ეკრანზე სულ. გმადლობთ. დიახ, გავაკეთე არითმეტიკული უფლება. ასე რომ, 42 ბაიტი მეხსიერება აქ. ასე რომ, რას ნიშნავს რეალურად? ისე, პროგრამისტად რომ რეალურად ზოგადად ვფიქრობ, ეს მეხსიერებაში, როგორც სამისამართო. სხვა სიტყვებით, ყველა ერთი ასეთი ადგილას მეხსიერება, ტექნიკა, აქვს უნიკალური მისამართზე. ეს არ არის ისეთი რთული, როგორც ერთ-ერთი brattle მოედანზე, კემბრიჯის, Mass., 02138. სამაგიეროდ, ეს მხოლოდ ნომერი. ეს არის byte ხმების ნულოვანი, ეს არის ერთი, ეს არის ორი, ეს არის სამი, და ეს არის 41. ერთი წუთი მაცადე. ვფიქრობდი, 42 მომენტში წინ. დავიწყე დათვლის დროს ნულოვანი, ასე რომ, რეალურად სწორი. ახლა ჩვენ არ უნდა დახატავდი მას როგორც ქსელის, და თუ თქვენ მიაპყროს, როგორც ქსელის მე ვფიქრობ, რამ რეალურად კიდევ ცოტა შეცდომაში შეყვანას. რა პროგრამისტი იქნებოდა, მისი აზრით, ზოგადად ვფიქრობ, ამ მეხსიერება, ისევე, როგორც ფირზე, როგორც ნაჭერი masking ფირზე რომ მიდის და სამუდამოდ ან სანამ ამოიწურა მეხსიერება. ასე რომ, უფრო გავრცელებული გზა მიაპყროს და უბრალოდ ვიფიქროთ მეხსიერება იქნებოდა, რომ ეს არის byte ნულოვანი, ერთი, ორი, სამი, და შემდეგ dot, dot, dot. და თქვენ უნდა 42 ასეთი bytes სულ, მაშინაც კი, მიუხედავად იმისა, რომ ფიზიკურად შეიძლება რეალურად რაღაც უფრო მოსწონს ეს. ასე რომ, თუ ახლა ვფიქრობ, რომ თქვენი მეხსიერება, ეს, ისევე, როგორც ფირზე, ეს არის ის, რაც პროგრამისტი ერთხელ მინდა მოვუწოდო მასივი მეხსიერება. და როცა მინდა, რომ რეალურად შესანახად რაღაც კომპიუტერის მეხსიერებაში, თქვენ ზოგადად მაღაზიაში რამ უკან-to-back უკან-to-back. ასე რომ, ჩვენ ვლაპარაკობდით ნომრები. და როცა მინდოდა პრობლემების მოსაგვარებლად როგორც ოთხი, ერთი, სამი, ორი, მიუხედავად იმისა, რომ მე უბრალოდ ხატვის მხოლოდ ნომრები ოთხი, ერთი, სამი, ორი ფორუმში, კომპიუტერი ნამდვილად აქვს ამ setup მეხსიერებაში. და რა იქნება შემდეგი ორი კომპიუტერის მეხსიერებაში? ასევე, არ არსებობს პასუხი რომ. ჩვენ ნამდვილად არ ვიცი. ასე რომ, სანამ კომპიუტერი არ სჭირდება, ეს არ უნდა იზრუნოს რა არის შემდეგი ნომრები, რომ ეს არ აინტერესებს. და როცა განაცხადა, რომ კომპიუტერი შეიძლება მხოლოდ შევხედოთ ერთი მისამართი დროს, ეს არის ერთგვარი რატომ. არ არის განსხვავებით ჩანაწერი მოთამაშე და კითხულობს უფროსი მხოლოდ მას შეუძლია შევხედოთ გარკვეული groove ფიზიკური ძველი სკოლა ჩანაწერი იმ დროს, ასევე შეუძლია კომპიუტერის მადლობა მისი CPU და მისი Intel ინსტრუქციის კომპლექტი, შორის, რომლის მითითების წაკითხვის მეხსიერების ან შენახვა memory-- კომპიუტერი შეიძლება მხოლოდ გამოიყურება ერთ ადგილმდებარეობა გამართულ time-- ზოგჯერ კომბინაცია მათ, მაგრამ რეალურად მხოლოდ ერთ ადგილას დროს. ასე რომ, როცა ვაკეთებდით ამ სხვადასხვა ალგორითმები, მე არა მხოლოდ წერა vacuum-- ოთხი, ერთი, სამი, ორი. ეს ციფრები რეალურად ეკუთვნის სადღაც ფიზიკური მეხსიერებაში. ასე რომ, არსებობს პატარა ტრანზისტორი ან რაიმე სახის ელექტრონიკა ქვეშ hood შენახვის ამ ღირებულებებს. და სულ რამდენი ბიტი ჩართული ახლა, უბრალოდ უნდა იყოს მკაფიო? ასე რომ, ეს არის ოთხი ბაიტი, ან ახლა ის 32 ბიტი სულ. ასე რომ, არსებობს 32 zeros და პირობა საკომპოზიტორო ამ ოთხი რამ. იქ კიდევ უფრო მეტი აქ, მაგრამ ერთხელ ჩვენ არ გვაღელვებს. ახლა მოდით ვთხოვო სხვა კითხვა გამოყენებით მეხსიერება, იმიტომ, რომ ბოლოს დღის არის ეწინააღმდეგება. არ აქვს მნიშვნელობა რა შეიძლება გავაკეთოთ ერთად კომპიუტერი, ბოლოს დღეს აპარატურა არის კიდევ იგივე ქვეშ hood. როგორ მე შესანახად სიტყვა აქ? ისე, სიტყვა კომპიუტერის "Hey!" იქნება შენახული, ისევე, როგორც ეს. და თუ უნდოდა აღარ სიტყვა, შეგიძლიათ უბრალოდ გადაწერა, რომ და აცხადებენ, რომ როგორც "Hello" და მაღაზია რომ აქ. ასე რომ, აქ, ძალიან, ეს contiguousness არის რეალურად უპირატესობა, იმიტომ, რომ კომპიუტერი შეიძლება მხოლოდ წაკითხვის უფლება მარცხენა. მაგრამ აქ არის შეკითხვა. ამ კონტექსტში ეს სიტყვა, თ-ე-ლ-l-o, ძახილის წერტილი, როგორ შეიძლება კომპიუტერის ვიცი, სადაც სიტყვა იწყება და სადაც სიტყვა მთავრდება? კონტექსტში ნომრები, რა კომპიუტერი ვიცი, რამდენ ხანს თანმიმდევრობა ნომრები არის ან სად იწყება? ასევე, თურმე out-- და ჩვენ არ წავიდეთ ძალიან ბევრი ამ დონის detail-- კომპიუტერები გადაადგილება პერსონალის გარშემო მეხსიერება ფაქტიურად გზით ამ მისამართები. ასე რომ, კომპიუტერი, თუ თქვენ წერა კოდი შესანახად რამ როგორიცაა სიტყვა, რაც თქვენ ნამდვილად აკეთებს აკრეფით გამოთქმები, რომ მახსოვს, სადაც კომპიუტერის მეხსიერებაში ეს სიტყვები. ნება მომეცით, ამის გაკეთება ძალიან, ძალიან მარტივი მაგალითი. მე ვაპირებ წავიდეთ წინ და გახსენით უბრალო ტექსტური პროგრამა, და მე ვაპირებ, რომ შევქმნათ ფაილი სახელად hello.c. ყველაზე ამ ინფორმაციას ჩვენ არ წასვლას დიდი დეტალურად, მაგრამ მე ვაპირებ დაწერა პროგრამა, რომ ერთსა და იმავე ენაზე, C. ეს არის ბევრად უფრო დაშინებას, მე ვიტყოდი, რომ, ვიდრე Scratch, მაგრამ ეს ძალიან გავს სულითა. ფაქტობრივად, ეს curly აფრთხილებს შეგიძლიათ სახის ვფიქრობ, თუ რა მე უბრალოდ, როგორც ეს. მოდით ეს, ფაქტობრივად. როდესაც მწვანე დროშა დააწკაპებთ, ამის შემდეგ. მინდა ამობეჭდოთ "Hello". ასე რომ, ეს არის pseudocode. მე სახის ბუნდოვანი ხაზები. C, ამ ენის ვსაუბრობ შესახებ, ამ ხაზის ბეჭდვა hello რეალურად ხდება "printf" ერთად ზოგიერთი ფრჩხილებში და ნახევრად მსხვილი ნაწლავის. მაგრამ ეს ზუსტად იგივე იდეა. და ეს ძალიან მოსახერხებელი "როდესაც მწვანე დროშის დაწკაპავთ" ხდება ბევრად უფრო arcane "int ძირითადი ბათილად." და ეს ნამდვილად არ აქვს რუკების, ასე რომ, მე უბრალოდ აპირებს იგნორირება, რომ. მაგრამ curly აფრთხილებს, როგორიცაა curved თავსატეხი ცალი მოსწონს ეს. ასე რომ თქვენ შეგიძლიათ სახის ვხვდები. მაშინაც კი, თუ თქვენ არასდროს დაპროგრამებულია ადრე, რას ამ პროგრამის ალბათ? ალბათ ბეჭდავს კომენტარი ძახილის წერტილი. მოდით ვეცადოთ, რომ. მე ვაპირებ გადარჩენა იგი. და ეს არის, კიდევ ერთხელ, ძალიან ძველი სკოლა გარემო. მე ვერ დააჭირეთ, მე ვერ გადაიტანეთ. მე უნდა აკრიფოთ ბრძანებები. ამიტომ, მე მინდა, რომ აწარმოებს ჩემი პროგრამა, ასე მე შეიძლება ამის გაკეთება, როგორც hello.c. ეს ფაილი, მე გაიქცა. მაგრამ დაველოდოთ, მე დაკარგული ნაბიჯი. რა ვამბობთ, არის აუცილებელი ნაბიჯი ენა, როგორიცაა C? მე მხოლოდ წერილობითი წყარო კოდი, მაგრამ, რა უნდა? ჰო, მე უნდა შემდგენელი. ასე რომ, ჩემს Mac აქ, მაქვს პროგრამა მოუწოდა GCC, GNU C შემდგენელი, რომელიც საშუალებას აძლევს ჩემთვის ამას, თავის მხრივ, ჩემი კოდის, ჩვენ მოვუწოდებთ მას, მანქანა კოდი. და მე ვხედავ, რომ, ერთხელ, ასეთია, ამ არიან zeros და პირობა უბრალოდ შეიქმნა ჩემი წყარო კოდი ყველა zeros და პირობა. და თუ მინდა აწარმოებს ჩემი პროგრამაში ხდება, ეწოდოს a.out for ისტორიული reasons-- "Hello". შემიძლია გაუშვით ერთხელ. გამარჯობა გამარჯობა გამარჯობა. და, როგორც ჩანს, სამუშაო. მაგრამ ეს ნიშნავს, სადღაც ჩემი კომპიუტერის მეხსიერებაში არის სიტყვა თ-ე-ლ-l-o, ძახილის წერტილი. და აღმოჩნდება, ისევე, როგორც განზე, რა კომპიუტერი, როგორც წესი, ასე, რომ იცის, სადაც რამ დაიწყება და end-- ეს აპირებს დააყენოს სპეციალური სიმბოლო აქ. და კონვენცია არის იმისათვის, რომ ხმების ნულოვანი ბოლოს სიტყვა ასე რომ თქვენ იცით, სადაც იგი რეალურად მთავრდება, ასე რომ თქვენ არ შეინარჩუნოს ბეჭდვის უფრო და უფრო პერსონაჟი, ვიდრე თქვენ რეალურად აპირებს. მაგრამ takeaway აქ, მაშინაც კი, მიუხედავად იმისა, რომ ეს არის საკმაოდ arcane, არის ის, რომ, საბოლოო ჯამში, შედარებით მარტივი. თქვენ გადაეცათ ერთგვარი ფირზე, ცარიელი სივრცე, სადაც შეგიძლიათ წერენ წერილებს. თქვენ უბრალოდ უნდა ჰქონდეს სპეციალური სიმბოლო, როგორც თვითნებურად ხმების ნულოვანი, იმისათვის, რომ ბოლოს თქვენი სიტყვები, ასე რომ კომპიუტერი იცის, oh, მე უნდა შეწყვიტოს ბეჭდვის შემდეგ მე ვხედავ ძახილის წერტილი. იმის გამო, რომ შემდეგი რამ არ არის ASCII ღირებულება ნულოვანი, ან null ხასიათი, როგორც ვინმეს ეძახით. მაგრამ არსებობს ასეთი პრობლემა აქ და მოდით აღადგინოთ უკან ნომრები მომენტში. დავუშვათ, რომ მე, ფაქტობრივად, მასივი ნომრები, და ვარაუდობენ, რომ პროგრამის მე წერა არის მოსწონს კლასის წიგნი მასწავლებლის და მასწავლებელი კლასის. ეს პროგრამა საშუალებას აძლევს მას ჩაწერეთ მოსწავლეების ქულები შესახებ ვიქტორინებში. და ვფიქრობ, რომ სტუდენტი მიიღებს 100 მათი ინტელექტუალური, შესაძლოა, როგორც 80 წლის შემდეგ, მაშინ 75, მაშინ 90 წლის მეოთხე ვიქტორინა. ამრიგად, ამ ეტაპზე იმ ამბავს, მასივი ზომა ოთხ. იქ აბსოლუტურად მეტი მეხსიერების კომპიუტერი, მაგრამ მასივი, ასე ვთქვათ, არის ზომა ოთხ. ვარაუდობენ, რომ მასწავლებელი სურს მივანიჭოთ მეხუთე ინტელექტუალური კლასი. ისე, ერთი რამ, ის და იგი აპირებს უნდა გავაკეთოთ ახლა შესანახად დამატებითი ღირებულების აქ. მაგრამ თუ მასივში პედაგოგი შექმნა ამ პროგრამაში, ზომა, ერთ-ერთი პრობლემა მასივი, რომ თქვენ არ შეგიძლიათ უბრალოდ შეინახოს დასძინა ხსოვნას. რადგან რა, თუ მეორე ნაწილი პროგრამას აქვს სიტყვა "hey" უფლება არსებობს? სხვა სიტყვებით, ჩემი მეხსიერება შეიძლება იყოს გამოიყენება არაფერი პროგრამა. და თუ წინასწარ მე აკრეფილი, hey, მინდა შეყვანის ოთხი Quiz ქულით, მათ შეიძლება წავიდეთ აქ და აქ. და თუ თქვენ მოულოდნელად შეიცვალოს თქვენი აზრით მოგვიანებით და ვთქვათ მე მინდა მეხუთე ვიქტორინა ანგარიში, თქვენ შეგიძლიათ არა მხოლოდ განათავსოთ სადაც გსურთ, იმიტომ, რომ თუ ეს მეხსიერების გამოიყენება რაღაც else-- სხვა პროგრამა ან სხვა თვისება პროგრამა რომ თქვენ გაშვებული? ასე რომ თქვენ უნდა ვიფიქროთ წინასწარ როგორ გსურთ შეინახოთ თქვენი მონაცემები, რადგან ახლა თქვენ მოხატული თავს შევიდა ციფრული კუთხეში. ასე რომ, პედაგოგი პირიქით, ამბობენ, როდესაც წერილობით პროგრამა შესანახად მისი შეფასება, იცით, რა? ვაპირებ მოითხოვოს, როდესაც წერა ჩემი პროგრამა, რომ მე მინდა ნულოვანი, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, რვა შეფასება საერთო. ასე რომ, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, შვიდი, რვა. მასწავლებელს შეუძლია უბრალოდ ზედმეტად გამოყოფს მეხსიერების როდესაც წერილობით მისი პროგრამა და ამბობენ, იცით, რა? მე არასდროს დაავალოს მეტი ვიდრე რვა ტესტებში სემესტრში. ეს არის მხოლოდ გიჟები. მე არასოდეს გამოყოფს, რომ. ასე რომ, ამ გზით მას აქვს მოქნილობა მაღაზია სტუდენტი ქულა, მოსწონს 75, 90, და, შესაძლოა, ერთი ზედმეტი, სადაც მოსწავლემ დამატებითი საკრედიტო, 105. მაგრამ, თუ მასწავლებელი არ იყენებს ამ სამი ფართები, იქ ინტუიციური takeaway აქ. იგი უბრალოდ დროის გაყვანაა სივრცეში. ასე რომ, სხვა სიტყვებით, არ არის ეს საერთო tradeoff პროგრამირებაში სადაც შეგიძლიათ გამოყოფს ზუსტად იმდენი მეხსიერება, როგორც გსურთ, თავდაყირა, რომელიც არის ის, რომ თქვენ სუპერ efficient-- თქვენ არ მიმდინარეობს არარაციონალური at ყველა მაგრამ downside რომლის არის რა, თუ თქვენ შეცვლის თქვენი გონება, როდესაც გამოყენებით პროგრამა, რომელიც გსურთ შეინახოთ მეტი მონაცემები, ვიდრე თქვენ თავდაპირველად გამიზნული. ასე რომ, შესაძლოა გამოსავალი არის, მაშინ, დაწერეთ თქვენი პროგრამები იმგვარად რომ ისინი იყენებენ უფრო მეტი მეხსიერება ვიდრე სინამდვილეში გვჭირდება. ამ გზით თქვენ არ აპირებს გადაეყარონ, რომ პრობლემა, მაგრამ თქვენ, რომ ფუჭია და უსარგებლო. და მეტი მეხსიერების თქვენი პროგრამა იყენებს, როგორც ჩვენ განვიხილეთ გუშინ, ნაკლებად მეხსიერება, რომელიც არ არის შესაძლებელი სხვა პროგრამებს, მით უფრო რომ თქვენი კომპიუტერი შეიძლება ნელი ქვემოთ გამო ვირტუალური მეხსიერება. ასე რომ, იდეალური გადაწყვეტა შეიძლება იყოს რა? Under-გამოყოფისას ჩანს ცუდი. Over-გამოყოფისას ჩანს ცუდი. ასე რომ, რა შეიძლება იყოს უკეთესი? გადანაწილება. უფრო დინამიური იქნება. არ აიძულოს თავს აირჩიოს აპრიორი, დასაწყისში, რაც გსურთ. და რა თქმა უნდა, არა ზედმეტად გამოყოფს, მცირეოდენ თქვენ უნდა wasteful. ასე რომ, ამ მიზნის მისაღწევად, ჩვენ საჭიროა იმისათვის, რომ ამ მონაცემების სტრუქტურას, ასე ვთქვათ, მოშორებით. ასე რომ, რა პროგრამისტი როგორც წესი, იყენებენ არის რაღაც მოუწოდა არ არის მასივი, მაგრამ უკავშირდება სიაში. სხვა სიტყვებით, იგი დავიწყოთ ფიქრი მათი მეხსიერება როგორც სახის ფორმა, რომელიც მათ შეგიძლიათ დახაზოთ შემდეგ გზა. თუ მინდა შესანახად ერთი ნომერი პროგრამაში ასე რომ, სექტემბერი, მეც გავაკეთე სტუდენტები ვიქტორინა; მე მინდა შესანახად სტუდენტთა ინტელექტუალური, და მიიღეს 100 it-- I ვაპირებ ვკითხო ჩემი კომპიუტერი, გზით პროგრამის მე დაწერილი, ერთი ბლოკი მეხსიერება. და მე ვაპირებ შესანახად ნომერი 100, და ეს არის ის. შემდეგ რამდენიმე კვირის შემდეგ როდესაც ჩემს მეორე ვიქტორინა, და დროა აკრიფოთ იმ 90%, მე ვაპირებ ვთხოვო კომპიუტერი, hey, კომპიუტერი, შეიძლება მე მაქვს კიდევ ერთი ბლოკი მეხსიერება? ის აპირებს მომეცი ამ ცარიელი ბლოკი მეხსიერება. მე ვაპირებ დააყენა ნომერი 90, მაგრამ, ჩემი პროგრამა რატომღაც ან other-- და ჩვენ არ აღელვებს სინტაქსი ამას მე უნდა როგორმე ჯაჭვის ეს ყველაფერი ერთად. და მე ჯაჭვის მათ ერთად რა ჰგავს ისარი აქ. მესამე ვიქტორინა, რომელიც მოდის, მე ვაპირებ ვთქვა, hey, კომპიუტერი, მომეცი კიდევ ერთი ბლოკი მეხსიერება. და მე ვაპირებ ჩასახშობად რაც არ იყო, ისევე, როგორც 75, და მე უნდა ჯაჭვის ამ ერთად ახლა რატომღაც. მეოთხე ინტელექტუალური მოდის, და, შესაძლოა, რომ ის მიმართ სემესტრის ბოლოს. და რომ წერტილი ჩემი პროგრამა შეიძლება იყოს გამოყენებით მეხსიერება მთელი ადგილი, მთელი ფიზიკურად. ასე რომ, მხოლოდ ჩათვლით, მე ვაპირებ შევაჩერო ამ მეოთხე quiz-- მე დაგვავიწყდეს, რა იყო ეს; მე ვფიქრობ, იქნებ 80 ან რაღაც გზა აქ. მაგრამ ეს ჯარიმა, რადგან ხატოვნად მე ვაპირებ შევაჩერო ეს ხაზი. სხვა სიტყვებით, სინამდვილეში, თქვენი კომპიუტერის ტექნიკა, პირველი ანგარიშით შეიძლება დასრულდება მდე აქ იმიტომ, რომ ეს უფლება დაწყების სემესტრში. შემდეგი შეიძლება დასრულდება მდე აქ იმიტომ, რომ ცოტა დრო გავიდა და პროგრამა ინახავს გაშვებული. შემდეგი ანგარიშით, რომელიც იყო 75, შეიძლება იყოს აქ. და ბოლოს, ანგარიში შეიძლება იყოს 80, რომელიც აქ. ასე რომ, რეალურად, ფიზიკურად, ეს შეიძლება იყოს რა თქვენი კომპიუტერის მეხსიერების ჰგავს. მაგრამ ეს არ არის სასარგებლო ფსიქიკური პარადიგმა კომპიუტერის პროგრამისტი. რატომ უნდა იზრუნოს, სადაც heck თქვენი მონაცემები დამთავრებული? თქვენ უბრალოდ უნდა ჩაწეროთ მონაცემები. ეს არის სახის მოსწონს ჩვენი დისკუსია ადრე ხატვის კუბი. რატომ აინტერესებს, თუ რა კუთხე კუბი და როგორ უნდა მივმართოთ მიაპყროს ეს? უბრალოდ კუბი. ანალოგიურად აქ, თქვენ უბრალოდ მინდა, რომ კლასის წიგნში. თქვენ უბრალოდ უნდა ვიფიქროთ, ეს, როგორც სიაში ნომრები. ვინ ზრუნავს, თუ როგორ ეს განხორციელებული ტექნიკა? ასე რომ, აბსტრაქცია ახლა ეს სურათი აქ. ეს არის უკავშირდება სიაში, როგორც პროგრამისტი მოვუწოდებთ, იმდენად, რამდენადაც თქვენ გაქვთ სია, ცხადია, ნომრები. მაგრამ ეს უკავშირდება ხატოვნად გზით ამ ისრებით, და ყველა ამ ისრებით are-- ქვეშ hood, თუ თქვენ აინტერესებს, გავიხსენოთ, რომ ჩვენი ფიზიკური ტექნიკის მისამართები ნულოვანი, ერთი, ორი, სამი, ოთხი. ყველა ამ ისრებით ჰგავს რუკა ან მიმართულებით, სადაც, თუ 90 is-- ახლა მე მივიღე ითვლიან. ნულოვანი, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, შვიდი. როგორც ჩანს, 90 საათზე მეხსიერების მისამართი ნომერი შვიდი. ყველა ამ ისრებით არის როგორც პატარა ჯართი ქაღალდი რომ აძლევდა პროგრამა, რომელიც ამბობს დაიცვას ეს რუკა მისაღებად ადგილმდებარეობა შვიდი. და იქ თქვენ იხილავთ სტუდენტის მეორე ვიქტორინა ანგარიში. იმავდროულად, 75-- თუ მე გააგრძელებს, ეს არის შვიდი, რვა, ცხრა, 10, 11, 12, 13, 14, 15. ეს სხვა arrow უბრალოდ წარმოადგენს რუკაზე მეხსიერების 15. მაგრამ ერთხელ, პროგრამისტი საერთოდ არ აინტერესებს ამ დონის დეტალურად. და საუკეთესო ყველა პროგრამირების ენის დღეს, პროგრამისტი კი არ ვიცი, სადაც მეხსიერება ეს ციფრები რეალურად არიან. ყველა მას უნდა ზრუნავდეს არის რომ ისინი როგორმე გაერთიანებულს მონაცემები სტრუქტურა მოსწონს ეს. მაგრამ აღმოჩნდება, რომ არ მიიღოთ ძალიან ტექნიკური. მაგრამ მხოლოდ იმიტომ, რომ ჩვენ, ალბათ, საშუალება აქვს ეს განხილვა აქ, ვარაუდობენ, რომ ჩვენ დავუბრუნდეთ ეს საკითხი აქ მასივი. მოდით ვნახოთ, თუ ჩვენ ვწუხვართ აპირებს აქ. ეს არის 100, 90, 75, 80. მომეცით, მოკლედ, რომ ეს სარჩელი. ეს არის მასივი, და კიდევ ერთხელ, გახმაურებული დამახასიათებელი მასივი ის არის, რომ ყველა თქვენი მონაცემები დაბრუნდა უკან უკან memory-- ფაქტიურად ერთი ბაიტი ან იქნებ ოთხი ბაიტი, გარკვეული ფიქსირებული რაოდენობის bytes მოშორებით. უკავშირდება სიაში, რომელიც ჩვენ შეიძლება შევაჩერო როგორც ეს, ქვეშ hood, რომელიც იცის, სად, რომ პერსონალი არის? ეს იმას კი არ უნდა შემოვა მოსწონს ეს. ზოგიერთი მონაცემები შეიძლება იყოს უკან დარჩა იქ. თქვენ კი არ ვიცი. და ასე მასივი, თქვენ გაქვთ ფუნქცია ცნობილია, როგორც წვდომის. და რა წვდომის საშუალება არის რომ კომპიუტერი გადადით მყისიერად ნებისმიერ ადგილას მასივი. რატომ? იმის გამო, რომ კომპიუტერი იცის რომ პირველი ადგილმდებარეობა ნულოვანი, ერთი, ორი, სამი. ასე რომ, თუ გსურთ გადასვლა ამ ელემენტს მომდევნო ელემენტს, თქვენ ფაქტიურად, ამ კომპიუტერის გონება, უბრალოდ დაამატოთ ერთი. თუ გსურთ წასვლა მესამე ელემენტს, უბრალოდ დაამატოთ one-- შემდეგი ელემენტის, უბრალოდ დაამატოთ ერთი. თუმცა, ეს ვერსია ამბავი, ვფიქრობ, კომპიუტერული გაკეთებული ეძებს ან საქმე ნომერი 100. როგორ იღებთ შემდეგი კლასის grade წიგნი? თქვენ უნდა მიიღოს შვიდი ნაბიჯები, რომელიც არის უკანონო. იმისათვის რომ მომდევნო ერთი, თქვენ უნდა მიიღოს კიდევ რვა ნაბიჯები, რათა კიდევ 15. სხვა სიტყვებით, ეს არ არის მუდმივი უფსკრული ნომრები, და ასე უბრალოდ იღებს კომპიუტერული მეტი დრო არის წერტილი. კომპიუტერი უნდა ვეძებოთ მეშვეობით მეხსიერება, რათა იპოვოს ის, რაც თქვენ ეძებთ. ასე რომ, ხოლო მასივი tends უნდა იყოს სწრაფი მონაცემები სტრუქტურა იმიტომ, რომ თქვენ ფაქტიურად მხოლოდ ამის მარტივი არითმეტიკა და მისაღებად, სადაც გსურთ დამატებით ერთი, for instance-- უკავშირდება სია, შესწირონ, რომ ფუნქცია. თქვენ არ შეგიძლიათ უბრალოდ პირველი მეორე მესამე მეოთხე. თქვენ უნდა დაიცვას რუკაზე. თქვენ უნდა მიიღოს მეტი ნაბიჯები მიიღოს იმ ღირებულებებს, რომლებიც რომ როგორც ჩანს, დასძინა ღირებულება. ასე რომ, ჩვენ გადამხდელი ფასი, მაგრამ რა იყო ფუნქცია, რომელიც Dan ეძებდა აქ? რას უკავშირდება სიაში როგორც ჩანს, საშუალებას გვაძლევს გავაკეთოთ, რომელიც იყო წარმოშობის ამ კონკრეტულ ამბავი? ზუსტად. დინამიური ზომა, რათა. ჩვენ შეგიძლიათ ამ სიაში. ჩვენ კი შემცირება სიაში, ასე რომ ჩვენ მხოლოდ გამოყენებით იმდენი მეხსიერება როგორც ჩვენ რეალურად გვინდა, და ასე ჩვენ არასდროს ზედმეტად გამოყოფისას. ახლა უბრალოდ უნდა იყოს ნამდვილად Nit-picky, არსებობს ფარული ღირებულება. ასე, რომ თქვენ უნდა არა მხოლოდ მიადევნე თვალი დაარწმუნოს რომ ეს არის მყარი იდგა. არსებობს კიდევ ერთი ფარული ღირებულება აქ. სასარგებლოდ, უნდა იყოს ნათელი, არის, რომ ჩვენ კიდევ დინამიკას. თუ მე მინდა კიდევ ერთი ელემენტი, მე შემიძლია უბრალოდ მიაპყროს და დააყენოს ნომერი არსებობს. და მერე შეიძლება ბმული სურათს აქ, იმის გამო, რომ სწორედ აქ, კიდევ ერთხელ, თუ მე მოხატული თავს კუთხეში, თუ რაღაც უკვე გამოყენებით მეხსიერების აქ, მე out of luck. მე მოხატული თავს შევიდა კუთხეში. მაგრამ რა არის ფარული ღირს ამ სურათში? ეს არ არის მხოლოდ თანხის დრო, რომელიც სჭირდება უნდა წავიდეს აქ, რაც არის შვიდი ნაბიჯები, მაშინ რვა ნაბიჯი, რომელიც უფრო მეტია, ვიდრე ერთი. რა არის კიდევ ერთი ფარული ღირებულება? არა მხოლოდ დროს. დამატებითი ინფორმაცია აუცილებელია, რათა მივაღწიოთ ამ სურათს. ჰო, რუკა, იმ პატარა ცალი ქაღალდი, მე შენარჩუნება აღწერს მათ. ეს arrows-- ის არ არის თავისუფალი. კომპიუტერი თქვენ იცით, რა კომპიუტერი აქვს. მას აქვს zeros და პირობა. თუ გსურთ წარმოადგენს ისარი ან რუკაზე ან ნომერი, თქვენ უნდა მეხსიერება. ასე რომ, სხვა ფასი თქვენ გადახდა უკავშირდება სია, საერთო კომპიუტერულ მეცნიერებათა რესურსი, ასევე სივრცეში. და მართლაც, ასე რომ ხშირად, შორის tradeoffs შექმნასა პროგრამული საინჟინრო სისტემები დრო და სივრცე ორი თქვენი ინგრედიენტები, ორი თქვენი ყველაზე ძვირადღირებული ინგრედიენტები. ეს არის რაზეც მე მეტი დრო იმიტომ, რომ მე უნდა დაიცვას ეს რუკა, მაგრამ ის ასევე რაზეც მე მეტი სივრცე იმიტომ, რომ მე, რომ ეს რუკა გარშემო. ასე რომ, იმედი მაქვს, როგორც ჩვენ სახის დისკუსია გუშინ და დღეს, არის, რომ სარგებელი გადაწონის ხარჯები. მაგრამ არ არსებობს აშკარა გადაწყვეტა აქ. იქნებ ეს არის better-- a la სწრაფი და ბინძური, როგორც Kareem შემოთავაზებული ადრე იმისათვის, მეხსიერების პრობლემა. მხოლოდ ყიდვა მეხსიერება, ვფიქრობ, ნაკლებად ძნელია იმის შესახებ, პრობლემის გადაჭრის, და გადაწყვიტოს იგი უფრო ადვილი გზა. და მართლაც ადრე, როდესაც ჩვენ ვისაუბრეთ tradeoffs, ეს არ იყო სივრცე კომპიუტერი და დრო. ეს იყო დეველოპერი დრო, რომელიც კიდევ ერთი რესურსი. ასე რომ, კიდევ ერთხელ, ეს გაწონასწორებული ცდილობს გადაწყვიტოს, რომელი ერთი იმ რამ, თქვენ სურვილი დახარჯოს? რომელიც ყველაზე ნაკლებად ძვირი? რომელიც უკომპრომისო უკეთესი შედეგები? ჰო? ნამდვილად. ამ შემთხვევაში, თუ თქვენ წარმოადგენს ნომრები maps-- ეს ეწოდება მრავალ ენაზე "მითითებას" ან "მისამართები" - ეს ორმაგი სივრცეში. ეს არ უნდა იყოს, როგორც ცუდი როგორც ორმაგი თუ ახლა ჩვენ მხოლოდ შენახვის ნომრები. დავუშვათ, რომ ჩვენ შენახვის პაციენტის ჩანაწერი hospital-- ასე პირსონი სახელები, ტელეფონის ნომრები, სოციალური უსაფრთხოების ნომერი, ექიმი ისტორია. ეს ყუთი შეიძლება იყოს ბევრი, გაცილებით დიდია, ამ შემთხვევაში პატარა მაჩვენებელი, მისამართი შემდეგი element-- ეს არ არის დიდი გარიგება. ეს ისეთი fringe ღირს რომ არ აქვს მნიშვნელობა. მაგრამ ამ შემთხვევაში, yeah, ეს გაორმაგება. კარგი კითხვაა. მოდით ვისაუბროთ დროს ცოტა უფრო კონკრეტულად. რა არის ქრონომეტრაჟი ძიების ამ სიაში? დავუშვათ, რომ მინდოდა ძიება ყველა სტუდენტთა შეფასება, და იქ n შეფასება ამ მონაცემების სტრუქტურას. აქაც, ჩვენ შეგვიძლია სესხება ლექსიკის ადრე. ეს არის წრფივი მონაცემების სტრუქტურას. დიდი ო ო არის ის, რაც საჭირო მისაღებად ბოლოს ამ მონაცემების სტრუქტურას, whereas-- და ჩვენ არ მინახავს ეს ადრე მასივი გაძლევთ რასაც მუდმივი, რაც იმას ნიშნავს, ერთი ნაბიჯი ან ორი ნაბიჯი ან 10 ნაბიჯების მნიშვნელობა არ აქვს. ეს არის ფიქსირებული ნომერი. მას აქვს არაფერ შუაშია ზომა მასივი. და მიზეზი, რომ კიდევ ერთხელ, არის წვდომის. კომპიუტერული შეუძლია მხოლოდ დაუყოვნებლივ გადასვლა სხვა ადგილას, იმიტომ, რომ ისინი ყველა ერთი და იგივე დაშორება ყველაფერი. არ არის აზროვნების ჩართული. კარგი. ასე რომ, თუ მე არ შემიძლია, ნება მომეცით, ცდილობენ ხატვა ორი საბოლოო სურათები. ძალიან გავრცელებული ერთ-ერთი ცნობილია, როგორც hash მაგიდა. ასე რომ მოტივაცია ამ დისკუსია, მიადევნე თვალი ვიფიქროთ, თუ როგორ უნდა გავაკეთოთ ეს. ასე რომ, თუ ამის შესახებ? ვივარაუდოთ, რომ პრობლემის ჩვენ გვინდა, რომ გადაწყვიტოს ახლა ახორციელებს in a dictionary-- ასე რომ, მთელი bunch of ინგლისური სიტყვა ან რასაც. და მიზანი არის, რომ შეძლებს უპასუხოს კითხვებს ფორმა არის ეს სიტყვა? ასე, რომ თქვენ უნდა განახორციელოს მართლწერის შემოწმება, უბრალოდ როგორც ფიზიკური ლექსიკონი რომელიც შეგიძლიათ გამოიყურება რამ up. დავუშვათ, რომ მე უნდა გავაკეთოთ ამ მასივი. მე ვერ გავაკეთებ ამ. და ვფიქრობ, სიტყვები ვაშლის და ბანანის და ნესვი. და მე არ ვფიქრობ, რომ ხილი რომ იწყება d, ასე რომ, ჩვენ მხოლოდ აპირებენ სამი ხილი. ასე რომ, ეს არის მასივი, და ჩვენ შენახვის ყველა ეს სიტყვები ამ ლექსიკონი, როგორც მასივი. კითხვაზე, მაშინ, როგორ სხვაგან შეიძლება თქვენ შესანახად ეს ინფორმაცია? ისე, მე სახის მოტყუების აქ, იმიტომ, თითოეული ეს ასო სიტყვის მართლაც ინდივიდუალური ბაიტი. ასე რომ, თუ მე ნამდვილად მინდოდა, რომ იყოს nit-picky, მე ნამდვილად უნდა უნდა გამყოფი ამ დაყოფილია ბევრი მცირე მოცულობით მეხსიერება, და ჩვენ შეგვიძლია გავაკეთოთ ზუსტად რომ. მაგრამ ჩვენ ვაპირებთ გადაეყარონ იგივე პრობლემა, როგორც ადრე. რა მოხდება, თუ, როგორც Merriam Webster და Oxford აკეთებს ყოველ წლამდე ისინი დაამატოთ სიტყვა რომ dictionary-- ჩვენ არ აუცილებლად მინდა ხატვა თავს კუთხეში მასივი? ასე რომ, ნაცვლად, შესაძლოა, მსოფლიოს სასურველი სტუმარი გახდებით მიდგომა იმისათვის, რომ ვაშლის საკუთარი კვანძის ან ყუთი, როგორც ჩვენ ვიტყოდი, ბანანის და მაშინ აქ ჩვენ გვაქვს cantaloupe. ჩვენ string ეს ყველაფერი ერთად. ასე რომ, ეს არის მასივი, და ეს არის დაკავშირებული სიაში. თუ თქვენ ვერ საკმაოდ დანახვა, ეს მხოლოდ ამბობს: "მასივი", და ეს ამბობს "სიაში." ასე რომ, ჩვენ გვაქვს იგივე ზუსტი საკითხები, როგორც ადრე, რომლის დროსაც ჩვენ ახლა აქვს დინამიზმის ჩვენს უკავშირდება სიაში. მაგრამ ჩვენ გვაქვს საკმაოდ ნელი ლექსიკონი. დავუშვათ, მინდა ეძებოთ სიტყვა. ეს შეიძლება მიიღოს ჩემთვის დიდი ო ო ნაბიჯები, რადგან სიტყვა შეიძლება იყოს ყველა გზა ბოლოს სია, როგორიცაა cantaloupe. და აღმოჩნდება, რომ პროგრამირებაში, ერთგვარი წმინდა გრაალი მონაცემები სტრუქტურები, არის ის, რომელიც გაძლევთ მუდმივი დრო მასივი მაგრამ ჯერ კიდევ გაძლევთ დინამიკას. ასე რომ, ჩვენ გვაქვს საუკეთესო ორივე სამყაროს? და მართლაც, იქ არის რაღაც მოუწოდა hash მაგიდა რომელიც საშუალებას გაძლევთ ზუსტად რომ, თუმცა დაახლოებით. Hash მაგიდა არის fancier მონაცემები სტრუქტურა, რომელიც ჩვენ შეიძლება ვიფიქროთ, როგორც კომბინაცია მასივი და მე ვაპირებ შევაჩერო ეს მოსწონს ეს და დაკავშირებული სიები რომ მე მიაპყროს მსგავსი აქ. და გზა ამ რამ სამუშაოები ასეთია. თუ ეს, ახლა hash მაგიდასთან ჩემი მესამე მონაცემების სტრუქტურას, და მე მინდა შესანახად სიტყვა, მე არ მინდა, რომ მხოლოდ შესანახად ყველა სიტყვა თავში დაბრუნება თავში დაბრუნება. მინდა ბერკეტები ზოგიერთი ინფორმაცია შესახებ სიტყვა, რომ შევძლებთ ჩემთვის მისაღებად, სადაც ის სწრაფად. ასე რომ, მოცემულ სიტყვები ვაშლის და ბანანის და cantaloupe, მე შეგნებულად აირჩია ეს სიტყვები. რატომ? რა არის სახის ფუნდამენტურად სხვადასხვა დაახლოებით სამი? რა არის აშკარა? ისინი იწყება სხვადასხვა წერილებს. ასე, რომ თქვენ იცით, რა? იმის ნაცვლად, რომ ყველა ჩემი სიტყვები იმავე bucket, ასე ვთქვათ, ისევე, როგორც ერთ-ერთი დიდი სია, რატომ არ მე მაინც ცდილობენ ოპტიმიზაცია და ჩემი სიები 1/26 გრძელი. მყარი ოპტიმიზაცია შეიძლება იყოს რატომ არ არ მე როცა ჩასმა სიტყვა ამ მონაცემების სტრუქტურას, შევიდა კომპიუტერის მეხსიერებაში, რატომ არ მე ყველაფერს "ა" სიტყვები, ყველა "ბ" სიტყვები, და ყველა "გ" სიტყვა აქ? ასე რომ, ეს მთავრდება აყენებს ვაშლის აქ, ბანანის აქ, cantaloupe აქ, და ასე შემდეგ. და თუ მაქვს დამატებითი სიტყვა მოსწონს რა არის კიდევ? Apple, banana, მსხალი. ვინმეს ვფიქრობ ხილი რომელიც იწყება, B ან C? Blueberry-- სრულყოფილი. რომ აპირებს დასრულდება მდე აქ. ასე რომ, ჩვენ, როგორც ჩანს, ოდნავ უკეთესი, იმიტომ, რომ ახლა თუ მინდა მოძიება ვაშლის, I , პირველი მე არ dive ჩემი მონაცემები სტრუქტურა. მე არ ჩაყვინთვის შევიდა ჩემი კომპიუტერის მეხსიერებაში. მე პირველად შევხედოთ პირველი წერილი. და ეს არის ის, რაც კომპიუტერში მეცნიერი ვიტყოდი. თქვენ hash თქვენი მონაცემები სტრუქტურა. თქვენ თქვენი input, რომელიც ამ შემთხვევაში არის სიტყვა, როგორიცაა ვაშლი. თქვენ გაანალიზება, ეძებს პირველი წერილი ამ შემთხვევაში, ამით ჰეშირება იგი. ჰეშირება არის ზოგადი ტერმინი, რომლის დროსაც შენ რაღაც, როგორც შეყვანის და თქვენ აწარმოოს გარკვეული გამომავალი. და გამომავალი, რომ საქმე ის არის, ადგილმდებარეობა გსურთ მოძებნოთ, პირველი ადგილმდებარეობა, მეორე ადგილას, მესამე. ასე რომ შეყვანის არის ვაშლის, გამომავალი პირველი. შეყვანის ბანანის, გამომავალი უნდა იყოს მეორე. შეყვანის cantaloupe, გამომავალი უნდა იყოს მესამე. შეყვანის მოცვის, რომ გამომავალი უნდა კვლავ იყოს მეორე. და ის, რაც ეხმარება თქვენ shortcuts თქვენი მეხსიერება იმისათვის, რომ მიიღოთ სიტყვა ან მონაცემების უფრო ეფექტურად. ახლა ეს წყვეტს ქვემოთ ჩვენი დროის პოტენციურად ისევე როგორც ყოველი 26 იმიტომ, რომ თუ ვივარაუდოთ, რომ თქვენ იმდენი "ა" სიტყვები "z" სიტყვა, როგორც "q" სიტყვა, რომელიც არ არის ნამდვილად realistic-- თქვენ ვაპირებთ აქვს skew მასშტაბით გარკვეული ასო alphabet-- მაგრამ ეს იქნება დამატებითი მიდგომა, რომელიც არ იძლევა მიიღოთ სიტყვა ბევრად უფრო სწრაფად. და რეალურად, დახვეწილი პროგრამა, Google- ის მსოფლიოში, Facebooks საქართველოს world-- ისინი გამოიყენოთ hash მაგიდა ბევრი სხვადასხვა მიზნით. მაგრამ ისინი არ იქნება ისეთი მიამიტი უბრალოდ შეხედეთ პირველი წერილი ვაშლის ან ბანანის ან მსხალი ან cantaloupe, იმიტომ, რომ, როგორც ხედავთ, ამ სიები შეიძლება მაინც ხანგრძლივი. ასე რომ, ეს შეიძლება კვლავ ერთგვარი of linear-- ასე რომ, ერთგვარი ნელი, ისევე, როგორც დიდი ო ო რომელიც ჩვენ განვიხილეთ ადრე. ასე რომ, რა რეალური კარგი hash მაგიდა, გავაკეთოთ მას მოუწევს ბევრად უფრო დიდი მასივი. და ის გამოყენება ბევრად უფრო დახვეწილი hashing ფუნქცია, ასე, რომ ეს არ არის მხოლოდ შევხედოთ "ა". იქნებ ეს უყურებს "a-p-p-l-ე" და რატომღაც აკონვერტებს იმ ხუთ წერილები შევიდა იმ ადგილას, სადაც ვაშლის უნდა იყოს შენახული. ჩვენ უბრალოდ გულუბრყვილოდ გამოყენებით ასო 'a' მარტო იმიტომ, რომ ეს არის ლამაზი და მარტივი. მაგრამ hash მაგიდა, და ბოლოს, თქვენ შეიძლება ვიფიქროთ როგორც კომბინაცია მასივი, რომელთაგან თითოეული აქვს უკავშირდება სიაში, რომელიც იდეალურად უნდა იყოს რაც შეიძლება მოკლე. და ეს არ არის აშკარა გადაწყვეტა. სინამდვილეში, ბევრი ჯარიმა tuning რომ მიდის ქვეშ hood როდესაც ახორციელებს ამ სახის დახვეწილი მონაცემთა სტრუქტურები არის ის, რაც არის სწორი სიგრძეზე მასივი? რა არის სწორი ქეშირების ფუნქცია? როგორ ჩაწეროთ რამ მეხსიერებაში? მაგრამ გააცნობიეროს, რამდენად სწრაფად ეს ერთგვარი დისკუსია გამწვავდა, არც ისე შორს, რომ ეს არის სახის მეტი ერთი ხელმძღვანელი ამ ეტაპზე, რომელიც კარგად არის. მაგრამ ჩვენ დავიწყეთ, გავიხსენოთ, ნამდვილად რაღაც დაბალი დონის და ელექტრონული. ასე რომ, ეს კიდევ ერთხელ არის ამ თემა აბსტრაქციის სადაც ერთხელ თქვენ დაიწყოს მიიღოს მინიჭებული, OK, მაქვს it-- არსებობს ფიზიკური მეხსიერება, კარგი, გასაგებია, ყოველ ფიზიკური ადგილმდებარეობა აქვს მისამართი, OK, მე მივიღე ეს, მე შემიძლია წარმოადგენს იმ მისამართები როგორც arrows-- თქვენ შეგიძლიათ ძალიან სწრაფად დაიწყება უფრო დახვეწილი საუბარი, რომ საბოლოოდ, როგორც ჩანს, რომელიც საშუალებას მოგვცემს პრობლემების მოსაგვარებლად, როგორიცაა ეძებს და დახარისხება უფრო ეფექტურად. ხოლო დანარჩენი დავრწმუნდი, ძალიან იმიტომ, რომ მე ვფიქრობ, რომ ეს არის ღრმა ჩვენ წავიდა ზოგიერთი ამ CS თემა proper-- ჩვენ კეთდება დღეში და ნახევარი ამ მეტიც, თუ რა შეიძლება, როგორც წესი, მეტი რა თქმა უნდა, რვა კვირის სემესტრში. ნებისმიერი კითხვები ამ? არ არის? კარგი. ისე, რატომ არ გავჩერდეთ იქ, დაიწყოს ლანჩი რამდენიმე წუთის დასაწყისში, განახლდება მხოლოდ ერთი საათის განმავლობაში? და მე, linger ცოტა შეკითხვებს. ამის შემდეგ მე ვაპირებ, რომ უნდა წავიდეს მიიღოს რამდენიმე ზარები, თუ, რომ კარგადაა. მე ჩართოთ რამდენიმე მუსიკალური იმავდროულად, მაგრამ ლანჩი უნდა იყოს გარშემო კუთხეში.