DAVID Malan: ყველა უფლება.
ასე რომ, ეს არის CS50, და ეს არის ახლა დაწყების კვირაში სამი.
>> ასე რომ, დღემდე, ჩვენ წერილობით პროგრამებს C
რომ გამოიყურებოდეს პატარა მსგავსი რამ აქ.
ამიტომ, ჩვენ მივიღეთ რამდენიმე მკვეთრი მოიცავს ზედა.
ჩვენ მივიღეთ int, მთავარი, ბათილად, და შემდეგ რაღაც უნდა გავაკეთოთ შუა,
გარკვეულ კოდი შიგნით რომ ფუნქცია.
მაგრამ მთავარი იყო ის ფაქტი, რომ ჩვენ ვამბობდით, ბათილად აქ.
ასე რომ, ბათილად, მთელი ამ დროის განმავლობაში, განსაზღვრავს რომ ეს პროგრამა, როდესაც აწარმოებს,
შესაძლებელია მხოლოდ აწარმოებს მეშვეობით მისი სახელი.
თქვენ არ შეგიძლიათ აკრიფოთ ნებისმიერი სხვა სიტყვები ან ციფრები, შემდეგ პროგრამის სახელი, როდესაც
გაშვებული იგი.
ასე, მაგალითად, თუ პროგრამა არ იყო შედგენილი ფაილი მოუწოდა hello,
თქვენ შეიძლება არ მიესალმები, მაგრამ ეს არის ის.
>> ერთადერთი გზა, რომ თქვენ ვერ შეყვანის ამ პროგრამის
არის მოუწოდებენ ფუნქცია.
მაგალითად, რა ფუნქცია ვყოფილვართ გამოყენებით დღემდე
მიიღოს შეიტანენ შესახებ?
>> აუდიტორია: მიიღეთ სიმებიანი.
დავით Malan: იმისათვის რომ სიმებიანი, მიიღეთ int, ან თქვენ მინახავს სხვები,
მაშინაც კი, თუ თქვენ არ გამოიყენება მათ ჯერ კიდევ, მოსწონს მიიღოს ხანგრძლივი და ასე შემდეგ.
მაგრამ დავუშვათ, რომ ჩვენ რეალურად გვინდა დავიწყოთ
წერილობით პროგრამებს, რომლებიც უფრო მრავალმხრივი და, სიმართლე გითხრათ, ცოტა უფრო მეტი
როგორიცაა ბრძანებები, რომ თქვენ მიღების, იმედია,
ცოტა მიეჩვია.
Like cd ფართი Dropbox.
ეს, რა თქმა უნდა, ცვლილებები თქვენი დირექტორია, ვთქვათ,
თქვენ ჯონ ჰარვარდის მთავარი დირექტორია, თქვენი Dropbox საქაღალდეში.
იმავდროულად, ბრძანება მოსწონს ეს ქმნის ახალ დირექტორია მოუწოდა pset2,
როგორც თქვენ ალბათ უკვე ან მალე პრობლემა კომპლექტი ორი.
რათა Hello, რა თქმა უნდა, არის ბრძანება, რომ აშენებს პროგრამა მოუწოდა hello
ფაილის მოუწოდა hello dot გ.
და თითოეულ ამ შემთხვევაში, ახლა, ჩვენ გვქონდა
გთავაზობთ არგუმენტი ე.წ. ბრძანების, მოციმციმე სწრაფი,
ასე რომ მიიღოს იცის რა უნდა ავაშენოთ, და ასე რომ mkdir იცის, რა ფოლდერში შექმნას,
და ისე, რომ cd იცის სადაც გსურთ წასვლა.
მაგრამ დღემდე, ჩვენ აიტაცეს , რომ მთავარი, თქვენი რა ფუნქცია,
აქვს ბათილად გამოხატვის შიგნით იმ ფრჩხილებში,
რაც იმას ნიშნავს, რომ ის არ შეიძლება რაიმე არგუმენტები.
>> ასე რომ, დღეიდან, ის, რაც ჩვენ ვაპირებთ, რომ გავაკეთოთ
ეს არის, ჩვენ ვაპირებთ დავიწყოთ მხარდამჭერი მსგავსი რამ კიდევ.
ფაქტობრივად, ამ შემთხვევაში, რომელიც თქვენ არ ითხოვენ ხელით აკრიფოთ,
რათა უკვე აკეთებს ამ ჩვენთვის არ არსებობს
ერთი, მაგრამ ერთი, ორი, სამი strings შემდეგ პროგრამის დაასახელა
clang.
ასე რომ, როგორ მივაღწიოთ ამას?
>> ისე, დღეიდან, იმ შემთხვევებში, როდესაც ჩვენ გვინდა
რათა შეყვანის მეშვეობით ე.წ. ბრძანების,
ჩვენ ვაპირებთ დავიწყოთ დასძინა აქ რა არის yellow--
შეცვლის ბათილად int argc მძიმით სიმებიანი argv ღია bracket ახლოს bracket.
ახლა ეს არის საინტერესო რამდენიმე მიზეზის გამო.
ერთი, ის აპირებს მოდით დავწეროთ პროგრამები, რომლებიც ცოტა უფრო დინამიური.
მაგრამ, უფრო compellingly, ის აპირებს გახსნას
ახლა საუბარი, როგორც რა კოლექტორები ნამდვილად
გამოყენებული უნდა იქნას, თუ რა სიმებიანი მართლაც ქვევმოთ hood,
სანამ მომავალ კვირას, როდესაც ჩვენ ვიწყებთ diving კიდევ ღრმა თუ როგორ მანქანა
მიღების ყველა ამ პერსონალის მუშაობა.
მაგრამ ახლა, მოდით დავხატოთ, ალბათ, სურათი.
>> როდესაც ვწერთ პროგრამა ძირითადი განაცხადა
ამ გზით, ისეთი, რომ მთავარი იღებს ორი არგუმენტები, int
and-- რა ტიპის მონაცემის არის მეორე არგუმენტი?
>> აუდიტორია: Array.
დავით Malan: Array.
ასე გამოიყურება ერთი შეხედვით მოსწონს ეს სიმებიანი, მაგრამ შეამჩნია კვადრატულ ფრჩხილებში.
შეგახსენებთ, რომ ბოლო დროს ჩვენ გააცნო ცნება მასივი.
და კოლექტორები გამოიყენოთ კვადრატულ ფრჩხილებში რამდენიმე კონტექსტში.
თქვენ შეიძლება გამოიყენოთ კვადრატულ ფრჩხილებში წასვლას მასივი
და მიიღოს კონკრეტული ელემენტის, როგორიცაა bracket 0 ან bracket 1 ან bracket 2.
მაგრამ ჩვენ ვნახეთ, თუ მოკლედ, გასულ კვირას, რომ თქვენ ასევე
გამოიყენოს ეს კვადრატულ ფრჩხილებში განაცხადოს ზომის მასივი,
თუ იცით, წინასწარ რამდენი ints ან რამდენი strings ან რასაც თქვენ
ნამდვილად გინდათ.
გამოდის, რომ იქ მესამე კონტექსტში აქ
რომ არ აქვს ნომერი შიგნით კვადრატული ფრჩხილები.
როცა დააკონკრეტა, როგორც მე აქ, სახელი რაღაც argv,
რომელიც მხოლოდ ლამაზი გზა განაცხადა, რომ არგუმენტი ვექტორი, რომელიც
კიდევ ერთი ლამაზი გზა ამბობდა მასივი არგუმენტები,
ღია bracket ახლო bracket მხოლოდ იმას ნიშნავს, რომ თქვენ არ არის აუცილებელი
წინასწარ იცოდეს, თუ რამდენად დიდი მასივი იქნება,
მაგრამ თქვენ იცით, იქნება მასივი.
ასე რომ, თუ თქვენ არ იცით, ნომერი არ დააყენოს ის არსებობს,
ღია bracket ახლო bracket იმას ნიშნავს, რომ argv არ არის ტექსტი,
მაგრამ მასივი სტრიქონები.
ასე რომ, სინტაქსურად, თუ ვფიქრობ, გასულ კვირას,
ეს ძალიან ჰგავს ამბობდა რაღაც int ასაკის ღია bracket,
და მაშინ რაიმე შემდგომ.
ასე რომ, რას ჰგავს?
მოდით რეალურად მიაპყროს სურათი.
ასე რომ, როდესაც თქვენ აწარმოებს ამ პროგრამის მთავარი რომელმაც ორი არგუმენტები განსაზღვრული შიგნით
იმ ფრჩხილებში, თქვენ არსებითად, სულ მცირე, ორი მოცულობით
მეხსიერების გადმოგცეს ქვევმოთ hood.
ერთი, როგორც მე ამახვილებს, რადგან ეს მართკუთხედი, აპირებს ეწოდოს argc.
და ისევე, როგორც სწრაფი recap, რა არის მონაცემები ტიპის argc?
ასე რომ, ეს int.
ასე რომ, რიცხვი აპირებს წავიდეს argc-- მონაცვლეობით
რომ დგას არგუმენტი რაოდენობა.
იმავდროულად, მე შედგენილი argv როგორც მასივი.
და მე არ ვიცი, , რამდენი ხანი იქნება,
ასე დღევანდელი მიზნებისათვის dot dot dot.
შესაძლოა, კიდევ ზოგიერთი სიგრძე.
მაგრამ მე სურათები აქ მინიმუმ ოთხი ოთხკუთხედს.
ასე argv ბლოკი მეხსიერება, რომელიც ინახავს string string string dot dot dot,
და argc არის მხოლოდ ერთი ბლოკი მეხსიერების რიცხვი.
>> ახლა, მოდით, ცოტა უფრო ზუსტი.
თუ, როდესაც მაქვს strings ამ მასივი, მოუწოდა
argv, მინდა კიდევ მათ ინდივიდუალურად, ისევე, როგორც გასულ კვირას,
ჩვენ ვაპირებთ გამოვიყენოთ notation როგორიცაა argv bracket 0
მიიღოს პირველი, რაც მასივი.
Argv bracket 1 მისაღებად მეორე რამ, და ასე შემდეგ.
აქ მთავარია, რომ ჩვენ ჯერ კიდევ 0 indexed-- ჩვენ მაინც დათვლის საწყისი 0.
ასე რომ, ახლა მოდით რეალურად დააყენა რაღაც ამ.
თუ მე უნდა შეადგინონ პროგრამა მოუწოდა გამარჯობა ფაილი სახელად hello dot c,
და მაშინ აწარმოებს, რომ პროგრამა ერთად dot slash hello,
რას აკეთებს ჩემი კომპიუტერი, ჩემი ლეპტოპი, ჰგავს ქვეშ hood
ამ მომენტში მე აწარმოებს dot slash მიესალმები და დააჭიროთ?
აი, ეს არის, ალბათ, რაც ჩვენ ვერ აღწერს
შინაარსი თქვენი კომპიუტერის მეხსიერება, ან RAM-- წვდომის მეხსიერება.
სხვა სიტყვებით, კომპიუტერი, რატომღაც თქვენ magically,
აყენებს ნომერი 1 argc, AKA argcount, და ეს აყენებს ფაქტიურად სიმებიანი
მიესალმები in argv bracket 0.
მე არ ვიცი, გულწრფელად რომ ვთქვათ, რა არის in argv bracket 1 ან 2 ან 3,
იმიტომ, რომ, თუ მომხმარებელს არ აქვს აკრეფილი არაფერი გარდა Hello,
ჩვენ ვაპირებთ, რომ ვივარაუდოთ, რომ ამ ყველაზე მეტად სავარაუდოა, ნაგვის ღირებულებებს,
ასე ვთქვათ.
იმ მოცულობით მეხსიერება არსებობს, მაგრამ ეს არ არის ჩვენთვის,
შევხედოთ მათ, იმიტომ, რომ argcount მხოლოდ ერთი.
>> ახლა კი, ამ დროს, თუ მე წერენ აწარმოებს კიდევ ერთი პროგრამა,
cd, რაც უფრო სწორად ბრძანება, თქვენი მოციმციმე prompt-- cd ფართი
Dropbox-- როდესაც მე აწარმოებს, რომ, ფაქტობრივად, როდესაც cd პროგრამის გაშვება, argc,
შიგნით ჩემი კომპიუტერის მეხსიერებაში, არის ყველაზე წამიერი მეორე ნომერი 2.
და შემდეგ argv bracket o აქვს cd, argv bracket 1 აქვს Dropbox,
და, რა თქმა უნდა ბრძანება ასრულებს, ასე რომ ყველა ამ მეხსიერების
არსებითად მიდის და გამოიყენება რაღაც.
და ამიტომაც ვამბობ მხოლოდ გაყოფილი მეორე.
>> ამასობაში, თუ ჩვენ mkdir pset2, სურათზე ჩანს თითქმის იგივე,
მაგრამ სხვადასხვა strings შიგნით argv.
თუ ამის გაკეთება clang dash მიესალმები კომენტარი dot c, იგივე იდეა.
უფრო პერსონალის შევსებული argv, და argc, რა თქმა უნდა, არის 4.
ასე რომ, სხვა სიტყვებით, მიუხედავად იმისა, რომ ამ მასივი
შეიძლება dot dot dot, ზოგიერთი ცვლადი სიგრძის, ასე ვთქვათ,
თქვენ ყოველთვის ვიცი სად ბოლოს იგი , იმიტომ, რომ argc აპირებს გითხრათ
რა მომენტში თქვენ უნდა შეწყვიტოს ეძებს ელემენტების argv.
თქვენ შეგიძლიათ მხოლოდ შევხედოთ ოთხი სულ ამ შემთხვევაში.
>> მოდით ახლა შევხედოთ, ალბათ, მარტივი პროგრამა.
ერთი, რომ მხოლოდ ამბობს hello ვინმე მოსწონს Zamyla.
ასე, რომ აცხადებენ, მე ვაპირებ წერენ პროგრამა რაღაც მომენტში მეშვეობით, რომელიც მე ვერ გავაკეთებ
მიესალმები ფართი Zamyla, და შემდეგ მინდა ჩემი პროგრამა ამობეჭდოთ რაღაც
სუპერ მარტივია როგორც "Hello, Zamyla".
ახლა წარსულში ჩვენ გამოიყენება GetString.
იგი წარსულში, თუნდაც თქვენ ახალი პროგრამირების,
შანსი თქვენ შეიძლება whip up პროგრამა, რომელიც იყენებს GetString
და შემდეგ იყენებს printf ვთქვა, hi to Zamyla.
მაგრამ მოდით არ გამოიყენოს getString ამ დროს.
ნება მომეცით ნაცვლად წასვლას Appliant და არ მოიცავს სტანდარტული I O dot h.
მიადევნე თვალი ასევე მოიცავს CS50 dot h.
ახლა int ძირითადი, და ახლა მე ვარ ამის გაკეთებას არ აპირებს ბათილად დღეს.
ამის ნაცვლად, მე აპირებს int argc სიმებიანი argv ღია bracket ახლო bracket,
არ აკონკრეტებენ ნომერი.
და ახლა აქ არის ჩემი ე.წ. უნდა გააკეთოს.
ის, რაც მე ვაპირებ ახლა, მე ვარ ვაპირებ ცოტა ნახტომი რწმენის,
მე ვაპირებ ვივარაუდოთ, რომ მომხმარებლის მიერ აპირებს გამოიყენოს ეს პროგრამა სწორად,
და მე უბრალოდ აპირებს არ printf hello,% sn.
ასე რომ არაფერი ახალი იქ.
მაგრამ მე მინდა ახლა უკვე რასაც სიტყვა პროფაილი სახის შემდეგ პროგრამის სახელი.
ასე რომ, თუ მიესალმები ფართი Zamyla, I მინდა როგორმე პროგრამულად ხელმისაწვდომობა
ციტირებას unquote "Zamyla". ასე რომ, შეიძლება წასვლას ჩემი არგუმენტი ვექტორი,
ჩემი მასივი სიმები, და თუ ბრძანება, კვლავ, მიესალმები ფართი Zamyla,
რა რაოდენობის მინდა დასვა argv აქ?
აუდიტორია: 1.
დავით Malan: 1, იმიტომ, bracket 0 გამოდის
იქნება პროგრამის სახელი, როგორც დავინახეთ.
ასე bracket 1 პირველი სიტყვა რომ მე, შესახებ, არ აკრეფილი.
მე ვაპირებ წავიდეთ წინ და გადარჩენა ამ.
მე ვაპირებ წასვლას ჩემი ფოლდერი სადაც მე განთავსებული ამ ფაილის.
მე ვაპირებ მიიღოს hello 3.
Comp IO ს OK.
მიესალმები Zamyla შეიყვანეთ.
რა გავაკეთო არასწორი?
მე მოულოდნელი თავს მხოლოდ ერთი წუთით არ არსებობს.
რა გავაკეთო არასწორი?
>> აუდიტორია: სახელი.
>> DAVID Malan: ფაილის ფაქტობრივად მოუწოდა hello3.c.
და მე, რომ მხოლოდ თანმიმდევრულობა, რადგან ჩვენ
ჰქონდა hello.c წელს წარსულში ონლაინ კოდი.
მოდით დაფიქსირება ამ მიესალმები bracket dash 3 Zamyla.
შევა.
და ახლა ჩვენ გვაქვს hello, Zamyla.
ამასობაში, მე შეიძლება შეცვალოს ეს შეიძლება Rob, ან მართლაც ნებისმიერ სხვა სიტყვა.
>> მაგრამ განვიხილოთ კუთხეში შემთხვევაში.
რა შეიძლება ველოდოთ მოხდება თუ მე არ აკრიფოთ არავის სახელი ყველა?
>> აუდიტორია: Error.
>> დავით Malan: შეცდომა გარკვეული, ალბათ.
ვნახოთ.
შევა.
Null.
ამიტომ printf, რომელიც ფაქტობრივად იმყოფება პატარა დამცავი us
აქ, და სიტყვასიტყვით ბეჭდვა ღია paren null, მაგრამ უარესი რამ შეიძლება მოხდეს.
და მხოლოდ იმის დემონსტრირება, რაღაც აბსოლუტურად
არ უნდა გავაკეთოთ, მოდით წავიდეთ აქ და დაიწყოს გააღიზიანოს გარშემო.
არა?
თუ ვიცი, რომ სურათზე მეხსიერება, არსებითად, ეს,
argv bracket 1 აქვს Zamyla, argv bracket 0 აქვს Hello, ან მიესალმები-3.
რა არის bracket 2?
ასე რომ, შემიძლია გითხრათ, რომ ეჭვქვეშ თავს, არა?
შემიძლია უბრალოდ შეცვალოს 1 2.
მე შემიძლია recompile მიესალმები 3, ./hello3 მოდით მიუახლოვდით და დააჭიროთ.
Whoops.
არარის ბრჭყალები.
საინტერესო.
ასე რომ, ერთგვარი მაგარი ვნახოთ რა არის აქ.
>> ასე რომ, რა არის შიგნით ჩემი ლეპტოპი?
გადავარჩინოთ იგი bracket 3.
რათა hello3, მიესალმები-3.
საინტერესო.
და ახლა მოდით კიდევ მართლაც bold-- 50.
ასე რომ, ეს ნამდვილად diving ღრმად ჩემს კომპიუტერის მეხსიერებაში.
50 ინდექსები.
ასე რომ hello 3 მიესალმები-3.
საინტერესო.
ყველა უფლება, ახლა მე მხოლოდ აპირებს მიიღოს უგუნური.
წამო 5,000.
ყველა უფლება.
ნება მომეცით, recompile.
რათა hello3, მიესალმები-3.
OK.
ახლა ზოგიერთი თქვენთაგანი, შეიძლება შეიძლება ნათურა აპირებს off.
რამდენი გაქვთ ჩანს ეს მესიჯი ადრე?
OK.
ასე რომ, რატომ?
>> Odds are-- და იქ სხვადასხვა რამ შეიძლება გამოიწვიოს ეს,
და აშკარად თქვენ კარგ company-- ჩვენ გვაქვს მკაფიოდ
გამოიწვია, რასაც სეგმენტაცია ბრალია.
და მოკლედ დღეს მე არ შეეხო სეგმენტი მეხსიერება
რომ მე არ უნდა ჰქონდეს.
სადაც სეგმენტი მხოლოდ იმას ნიშნავს, რომ ბლოკი მეხსიერების რომ მე არ უნდა ჰქონდეს.
ახლა კომპიუტერი გარანტიას, რომ I აწარმოებს ./helloZamyla, რომ მე შეიძლება შეეხოთ argv
შეიძლება bracket 0 და argv bracket 1.
მაგრამ argc ღირებულების 2, რაც იმას ნიშნავს, რომ მე ვარ მხოლოდ allowed-- ეს ერთგვარი პატივი
system-- შეეხოთ bracket 0 და bracket 1.
თუ მე რაიმე შემდგომი, არსებობს აბსოლუტურად იქნება მეხსიერებაში არსებობს.
ჩემი RAM არსებობს ფიზიკურად კომპიუტერი.
მაგრამ ვინ იცის, რა არის იქ?
რა თქმა უნდა, მე გაშვებული მრავალჯერადი პროგრამები ერთ დროს.
მე შეიძლება seen-- თუ მე არ ამით მე Appliant
მაგრამ ჩემს Mac ან PC-- მე შეიძლება ჩანს შინაარსი ელ.
ალბათ მინახავს მყისიერი გაგზავნა მე გაგზავნილი ამ ბოლო პერიოდში.
არაფერი რომ შეიძლება იყოს ხანგრძლივი გარშემო მეხსიერების
შეიძლებოდა ყოფილიყო ხელმისაწვდომი გზით ამ თვითნებური კვადრატული ფრჩხილი ნოტაცია.
ან, უარესი არ არის, რომ თქვენ შეიძლება ჰქონდეს ი ერთი ჩემი პაროლები
რომ მე ცოტა ხნის წინ აკრეფილი, რომ პროგრამა ინახება მეხსიერებაში ისე,
სინამდვილის ჩემთვის, და მაშინ უბრალოდ სახის დატოვა ეს
in RAM სანამ მე წავედი, რომ პროგრამა.
>> და მართლაც, ეს არის ერთ ერთი საფრთხე და ერთი უფლებამოსილება
გამოყენებით ენა, როგორიცაა C. თქვენ უნდა სამორინეში
მთელი შინაარსი პროგრამის მეხსიერებაში,
და რა ცუდები შეგიძლიათ კი ამის გაკეთება იმ შემთხვევა
განსაკუთრებით მაშინ, როდესაც მისაღებად ვებ პროგრამირების
მიმართ სემესტრის ბოლოს, ჩვენ დავუბრუნდეთ ამ topic-- არის poke გარშემო,
პოტენციურად, ვინმეს კომპიუტერის მეხსიერება და იპოვოს ისეთი ცნობისმოყვარე რამ
როგორც დავინახეთ, არსებობს.
ან უარესი არ არის, პაროლები, რომ მას შეუძლია შემდეგ გამოიყენოთ ცუდი რამ.
>> ასე ნათლად არ უნდა გაკეთდეს, იმის გამო, რომ უცნაური ამბები ხდება.
რა თქმა უნდა, ეს არის პროგრამა, crashing.
ეს იქნება ექვივალენტი of Mac OS ან Windows
პროგრამა ფანჯარა მხოლოდ გაქრობა.
მოულოდნელი შეცდომა.
ბრძანების ხაზი გარემო ჩვენ ვხედავთ რაღაც მსგავსი.
მაგრამ სწორედ ამიტომ, არის მე უბრალოდ ეხება მეხსიერება რომ არ მეკუთვნის.
>> ასე რომ, მოდით დასაცავად წინააღმდეგ ცოტა სხვაგვარად
შევხედავთ ამ პროგრამის აქ.
ასე რომ, კიდევ ერთხელ, ჩონჩხი ჩვენ ვნახეთ ადრე
და მე ხაზგასმით ამ დროს int.
და მთელი ამ ხნის მთავარ მართლაც დაბრუნდა ღირებულება.
მიუხედავად იმისა, რომ ყველაზე მეტად ჩვენს ლექცია მაგალითები ჩვენ არასოდეს ერთხელ გამოიყენა
დაბრუნდნენ არაფერს მთავარ.
ჩვენ უბრალოდ დაწერა printf ახლოს Curly გაუწიოს და ეს არის ის.
მაგრამ უფასოდ, რა შემდგენელი აკეთებს თქვენთვის,
ეფექტურად, ბრუნდება 0 თქვენ.
თურმე აღმოჩნდა და ეს პატარა counterintuitive-- რომ 0 არის კარგი.
ეს იმას არ ნიშნავს ცრუ თავისთავად.
0 არის კარგი, და ნებისმიერი არასამთავრობო 0 ღირებულება, მსოფლიო გადაწყვიტა,
შეიძლება ნიშნავდეს შეცდომა.
ასე რომ, თუ თქვენ ოდესმე არევა რაღაც up თქვენს კომპიუტერში,
ან პროგრამის ახლახანს გარდაიცვალა თქვენ და თქვენ შემოსული ზოგიერთი მცდარი window
თქვენს ეკრანზე და განაცხადა, რომ შეცდომა უარყოფითი 49 ან შეცდომა 23--
ერთი შეხედვით თვითნებური value--, რომ ის, რადგან პროგრამისტი მყარი კოდირებული
ღირებულება, როგორიცაა უარყოფითი 49 ან დადებითი 23 წარმოადგენს ნებისმიერი ნომერი, ვთქვათ,
საქართველოს 4 მილიარდი შესაძლო რამ რომ შეიძლება არასწორია პროგრამა.
>> ასე როგორ შეიძლება მე მიიღოს უპირატესობა ამ თავს?
ასევე, ნება მომეცით გახსენით პროგრამა რომ დავწერე წინასწარ,
და poke გარშემო ონლაინ მოუწოდა hello 4.
და ეს თითქმის იდენტურია, გარდა იმ მისი მივიღე ცოტა შეცდომის შემოწმება.
ამ შემთხვევაში, მე კიდევ ერთხელ განაცხადა, მთავარ როგორც აღების ორი არგუმენტები,
მაგრამ ამ დროს, on line 17, ცნობა მე ვაკეთებ ცოტა საღი აზრის ქვითარი.
მე დარწმუნებული ვარ, რომ argc უდრის უდრის 2.
იმიტომ, რომ თუ ის არის, რომ იმას ნიშნავს, რომ შეგიძლიათ უსაფრთხოდ
შეეხოთ არა მხოლოდ bracket 0, მაგრამ bracket 1.
და მე წავიდეთ წინ და ამობეჭდოთ, ამ შემთხვევაში, Zamyla ან რობ
ან რასაც სიტყვა მე აკრეფილი გარეთ.
და ახლა მხოლოდ მისაღებად ცოტა უფრო სწორად,
მე ვაპირებ მკაფიოდ დაბრუნების 0 ნიშნავდეს, რომ ყველაფერი კარგად იქნება.
არაფერი ცუდი მოხდა.
>> მაგრამ კონვენციის, მე ვაპირებ დაბრუნდებიან 1, ან გულწრფელად ნებისმიერი არასამთავრობო 0 ღირებულება,
თუ რაღაც წავიდა არასწორი.
ახლა მომხმარებელს არ აპირებს ნამდვილად შეამჩნია, რა ხდება.
მართლაც, თუ მე წასვლას ამ დირექტორიაში, ჩვენ მიუახლოვდით და მიიღოს hello 4,
მიესალმები-4 Zamyla იქცევა როგორც ველოდები.
მაგრამ თუ მე ნაცვლად არ აკრიფოთ არაფერი, არაფერი ჩანს, უნდა მოხდეს,
მაგრამ ეს არ მისაწოდებლად.
და თუ მე ნაცვლად, რომ რამე როგორც რობ არის proctor
in Thayer-- გაზიარება თვითნებური ინფორმაცია.
მაგრამ შეამჩნია, argv 1, 2, 3, 4, 5 უნდა არსებობდეს მეხსიერებაში.
რომ, ძალიან, არ არის ჩემი პროგრამა მოელის,
იმიტომ, რომ მე შემოწმდება თუ არა argc უდრის უდრის 2 თუ არა.
ასე რომ, მე ახლა იცავდა წინააღმდეგ.
>> ახლა, როგორც განზე, ჩვენ programmer-- უფრო სწორად, ჩვენ users--
არასოდეს, რომ 0 ან 1, მაგრამ გამოყენებით ინსტრუმენტი მოუწოდა Debugger, ან სხვა ინსტრუმენტები,
როგორც ვნახავთ, სანამ ხანგრძლივი, პროგრამისტი
შეგიძლიათ რეალურად ვხედავთ, თუ რა შეიძლება იყოს მიდის არასწორი შიგნით თქვენი პროგრამა.
>> ასე რომ, ნებისმიერი შეკითხვა argc?
Yeah.
>> აუდიტორია: მე ვნახე, სადაც ისინი არ მქონდა ხასიათი, [INAUDIBLE]
უბრალოდ განაცხადა, string ვარსკვლავი d, როგორიცაა ხასიათი ვარსკვლავი მძიმით.
არიან ისინი ექვივალენტი აქ?
>> დავით Malan: ისინი.
ასე რომ, კითხვა, თქვენ უნდა ზოგჯერ ჩანს პროგრამები
ასე რომ არ ამბობენ სიმებიანი argv bracket
მაგრამ ნაცვლად ამბობენ, რომ რაღაც როგორიცაა char ვარსკვლავი argv bracket.
და იქ კიდევ სხვა ვარიანტი, რომ თქვენ შეიძლება ვხედავთ.
ისინი მართლაც ექვივალენტი.
ახლა, ჩვენ გვაქვს ამ სახის ტრენინგი დისკები
on სახით სიმებიანი CS50 ბიბლიოთეკა, მაგრამ მხოლოდ ერთი კვირის
ანუ ჩვენ ვაპირებთ აღმოფხვრის ხელის შეშლა საერთოდ და, ფაქტობრივად,
შეხედეთ რა char და ვარსკვლავი , და როგორ იმ ეხება მეხსიერება
წარმომადგენლობა ზოგადად.
ასე რომ, ჩვენ დავბრუნდებით რომ.
>> სხვა შეკითხვებს ჩვენი argv ან argc?
Yeah.
აუდიტორია: რატომ დაბრუნდნენ შეცდომა [INAUDIBLE]?
დავით Malan: რატომ დაბრუნდეს შეცდომა only-- oh!
წინა შემთხვევაში, როდესაც ჩვენ იყო futzing გარშემო მეხსიერება,
რატომ მხოლოდ დაბრუნდება შეცდომა როდესაც მე ნამდვილად აკრეფილი დიდი რაოდენობით?
მოკლე პასუხი არის, ჩვენ უბრალოდ გაუმართლა.
ზოგადად, კომპიუტერის გამოყოფს მეხსიერება მოცულობით,
და ეს მომცა დიდი საკმარისი ბლოკი, რომ მე მივიღე მოშორებით, გარეშე შენიშნეს,
ეხება bracket 2, bracket 3, bracket 50, მაგრამ, როგორც კი მივიღებთ
ჩემი გისურვებთ, მე გასცდა საზღვრების ბლოკი მეხსიერება
ოპერაციული სისტემა მომცა.
და მაშინ, როდესაც ეს დაამხო და განაცხადა, რომ არ არის.
სეგმენტაცია შეცდომა.
Yeah.
>> აუდიტორია: როგორ კომპიუტერული ვიცი argc?
>> დავით Malan: როგორ კომპიუტერული ვიცი argc?
როდესაც თქვენ აწარმოებს პროგრამა, რომელიც პროგრამის, ბუნების მოციმციმე სწრაფი,
ჩააბარეს მასივი სიტყვა, რომლებიც აკრეფილი
ზოლზე, რომ იყო აკრეფილი ბრძანებათა ზოლზე.
ასე რომ, ეს არის თქვენი ოპერაციული სისტემა, რომელიც არსებითად
populates მთავარი არგუმენტები თქვენთვის.
ასე რომ, ეს ერთი მომსახურება რომ თქვენ, ერთგვარი ფარულად
ქვევმოთ hood of ოპერაციული სისტემა.
გაქვთ სხვა კითხვები?
Yeah.
>> აუდიტორია: რა ძირითადი ნაგავსაყრელი ნიშნავს?
დავით Malan: რა ძირითადი ნაგავსაყრელი ნიშნავს?
ასე რომ, ეს კარგი კითხვაა.
და ნება მომეცით დაბრუნდეს ეს ჩამონათვალი აქ.
და თქვენ შეამჩნევთ, რომ მაქვს ახალი ფაილი არ არსებობს.
ეს მართლაც მოუწოდა ძირითადი, და ეს რეალურად, როგორც წესი, ღირსეული ზომის ფაილი.
რომელიც არსებითად ფოტოგრაფია შინაარსი ჩემი პროგრამის მეხსიერებაში
ან RAM როდესაც ის შეეჯახა.
და ეს იქნება სასარგებლო, პოტენციურად, დიაგნოსტიკური,
ერთხელ ვსაუბრობთ მომავალი ლექცია და მონაკვეთის შესახებ გამართვის,
იმიტომ, რომ თქვენ შეგიძლიათ რეალურად გავაკეთოთ ეკვივალენტი ციფრული გაკვეთის
რომ ფაილი, რათა დაეხმაროს გაერკვნენ რა გააკეთეთ თქვენ არასწორი თქვენი პროგრამა.
Yeah.
>> აუდიტორია: არის argc ბრძანება თავად, ან თუ შეგიძლიათ, დაასახელოთ ის არაფერი?
>> დავით Malan: კარგი კითხვაა.
არის argc ბრძანება თავად, ან შეიძლება თქვენ დაარქვით რამე?
ეს ნამდვილად არ იყო მოთხოვნა.
ეს უბრალოდ ცვლადი სახელი ან არგუმენტი სახელი,
და ასე აბსოლუტურად ჩვენ შეიძლება მოუწოდოს ამ foo,
შეგვეძლო გვეწოდებინა ბარი, რომელიც, როგორც წესი, უნდა იყოს go-to სიტყვები, რომ კომპიუტერული
მეცნიერი მიდის.
მაგრამ კონვენციის, ჩვენ ვიყენებთ argc და argv.
მაგრამ ეს მხოლოდ ადამიანის კონვენცია, მეტი არაფერი.
ყველა უფლება.
ასე რომ, თურმე, მე უკვე ვეუბნებოდი ცოტა თეთრი lie--
და გულწრფელად ვამბობ, მომავალში, თქვენ ნახავთ ჩვენ ვეუბნებით სხვა თეთრი ტყუილი.
მაგრამ ახლა, ჩვენ ვაპირებთ კანი უკან ერთი მათგანი.
ამ შემთხვევაში აქ როცა მე ადრე გაიქცა პროგრამა მოსწონს მიესალმები ან მიესალმები-3
Zamyla, ჩვენ გვქონდა შინაარსი ჩემი კომპიუტერის მეხსიერებაში ეძებს დაახლოებით მოსწონს
ეს.
მაგრამ გავიხსენოთ, თუ რა სიმებიანი.
რა ვამბობთ, რომ ერთი კვირის წინ, რა სიმებიანი რეალურად ქვევმოთ hood?
აუდიტორია: Array სიმბოლო.
დავით Malan: ეს მასივი სიმბოლო, არა?
ასე რომ, ჩვენ შეიძლება მასივი strings, მაგრამ, თავის მხრივ, მხოლოდ
მასივი სიმბოლო.
ასე რომ, თუ მე ნამდვილად მინდა, რომ იყოს anal, როდესაც მე ასეთი სურათი,
მე ნამდვილად უნდა ხატვის ეს პატარა, როგორც ეს,
რომლის დროსაც თითოეული ამ ინდექსები ჩემი argv მასივი,
არსებობს თავისთავად მთელი სიმებიანი რაც თავისთავად მასივი.
და ახლა თეთრი ტყუილი ჩვენ ვეუბნებით დღეს
არის, რომ სურათზე არ გამოიყურება საკმაოდ მსგავსი.
ფაქტობრივად, პატარა მოედნები როგორც წესი, გარეთ დიდი მართკუთხედების
არსებობს.
მაგრამ ჩვენ დავბრუნდებით, რომ ხანგრძლივი.
მაგრამ ეს მიესალმები წარმატებული 0, , რომ სპეციალური ხასიათის, რომ
demarcates ბოლოს სიმებიანი, და ჩვენ მივიღეთ კიდევ ერთი შემდეგ
Zamyla სახელი.
ასე რომ, რას ნიშნავს ეს?
>> ასევე, ნება მომეცით წავიდეთ წინ და გახსენით ორი სხვა მაგალითები
, რომლებიც ხელმისაწვდომი ამჟამად.
ეწოდება argv1.c და სხვა არის argv2.
ეს სუპერ მარტივი პროგრამა, რომელიც განსხვავდება წარსულში პროგრამები
და ახლა მე გამოყენებით argc და argv აქ.
და ახლა მე ინტეგრირება მარყუჟის ხაზი 18, საწყისი i = 0 on მდე argc.
და რა ვარ მე აპირებს ამ ხაზი კოდი აქ?
ინგლისურ ენაზე.
ეს აშკარად მეტყველებს გამოყენების argc.
მაგრამ ინგლისურ, რას ეს გავაკეთო, თუ მე აწარმოებს ამ პროგრამის?
ჰო?
>> აუდიტორია: ეს აპირებს ბეჭდვა თქვენი ეკრანზე, როგორც არაერთხელ, როგორც თქვენ გსურთ.
DAVID Malan: ზუსტად.
ასე რომ, რასაც სიტყვა I ტიპის სწრაფი, ეს
აპირებს regurgitate მათ ჩემთვის ერთი თითო ხაზზე.
მოდით წავიდეთ წინ და ამის გაკეთება.
ნება მომეცით წასვლას ჩემი დირექტორია და მიიღოს argv1 ./argv1.
და ახლა, მოდით შენარჩუნება ეს მარტივი.
მოდით არაფერი პირველი.
ეს მოხდა ამობეჭდოთ ერთი რამ, და რომ მართლაც პროგრამის დასახელება,
იმიტომ, რომ ამ bracket 0.
თუ მე ახლა ვიტყვი, foo, ის აპირებს ამ ორ, და თუ ვიტყვი, foo ბარი,
ის აპირებს ამბობენ, რომ სამი რამ.
ახლა, რომ გარკვეულწილად საინტერესო, ალბათ.
მაგრამ გავიხსენოთ, რომ argv არის მასივი სტრიქონები,
მაგრამ სიმებიანი მასივი სიმბოლო, ასე შეგვიძლია რამ up მაღალი დონის
და ვრცელდება, ძირითადი ლოგიკა და კოდი, რომელიც
გამოიყურება ცოტა მეტი cryptic, მართლაც.
მაგრამ, რომელსაც აქვს წყობილი loop, რაღაც akin
რა შეიძლება გავიხსენოთ Mario, მაგალითად, თუ ეს გზა.
>> ამიტომ ახლა შეამჩნია on line 19, მე ერთხელ iterating მეტი ჩემი არგუმენტები,
საწყისი 0 on მდე argc.
და ახლა ხაზი 21-- ვარ სესხების შეასრულა გასულ კვირას
მე ვუყურებ, თუ რა არის სიგრძის argv bracket i.
მე შენახვის, რომ პასუხი n.
და მაშინ მე ინტეგრირება საწყისი j on მდე n, სადაც j ინიციალიზაცია რომ 0.
ასე რომ, კონვენციის დათვლა.
მას შემდეგ, რაც თქვენ გამოიყენება i, თუ თქვენ გაქვთ წყობილი მარყუჟის, თქვენ ვერ გამოიყენებს მე კიდევ ერთხელ,
წინააღმდეგ შემთხვევაში, თქვენ clobber, პოტენციურად, ღირებულება გარეთ შიდა loop.
ამიტომ მე გამოყენებით j კონვენციას.
ჩვენ შეიძლება გამოვიყენოთ k.
თუ თქვენ გაქვთ ერთზე მეტი k, ალბათ, აქვს ძალიან ბევრი მობუდარი, როგორც წესი.
მაგრამ ახლა შეამჩნია ჩემი printf ხაზი ოდნავ განსხვავებული.
მე არ დაბეჭდვის% s, მე ბეჭდვის% c, რომელიც, რა თქმა უნდა,
არის placeholder for char.
>> და ახლა შეამჩნია ეს სინტაქსი.
ახალი.
ჩვენ არ მინახავს ადრე.
მაგრამ ლოგიკურად, ეს მხოლოდ იმას ნიშნავს, მიიღეთ შ სიმებიანი argv
და მიიღეთ jth რა?
აუდიტორია: Character.
დავით Malan: პერსონაჟი რომ სიმებიანი.
ასე გამოყენებით კვადრატულ ფრჩხილებში მოყვება კვადრატულ ფრჩხილებში,
ეს არის diving პირველი შევიდა argv ის სიმები,
და შემდეგ მეორე კვადრატულ ფრჩხილებში დავუკავშირდეთ j
არის diving შევიდა გმირები რომ კონკრეტულ სიმებიანი argv.
და მაშინ, მხოლოდ კარგი ღონისძიება, მე დაბეჭდვის ახალი ხაზი აქ.
ახლა ნება მომეცით წავიდეთ წინ და გახსნა up ოდნავ უფრო window
ასე რომ, ჩვენ ვხედავთ, ამ მოქმედებაში.
ნება მომეცით წასვლას, რომ საქაღალდეში.
და ახლა ამის გაკეთება argv-2-- whoops-- რათა argv-2, ./argv 2.
შევა.
და ეს ცოტა რთული წაკითხვის ვერტიკალურად,
მაგრამ ეს მართლაც სახელი პროგრამა, რომელსაც მოყვება ცარიელი ხაზი.
ახლა ნება მომეცით წავიდეთ წინ და ამის გაკეთება foo.
ასეთივე მძიმე წასაკითხი, მაგრამ ეს მართლაც დაბეჭდვის ერთი ხასიათი თითო ხაზზე.
და თუ ბარი, ეს არის ბეჭდვის იმ ხაზს.
ამიტომ takeaway აქ არ არის იმდენად რომ, wow, შევხედოთ ამ neat ახალი ხრიკი
სადაც შეგიძლიათ მიიღოთ შინაარსი მასივი კონკრეტული პერსონაჟი,
არამედ, თუ როგორ ჩვენ აღების ეს ძირითადი იდეები, როგორიცაა ინდექსირებას შევიდა მასივი,
და შემდეგ ინდექსირებას შევიდა მასივი, რომელიც იყო, რომ მასივი,
და მხოლოდ გამოყენებით იგივე იდეები ოდნავ უფრო დახვეწილი მაგალითები.
მაგრამ საფუძვლები ნამდვილად არ შეიცვალა, მაშინაც კი, მას შემდეგ, რაც გასულ კვირას.
>> ახლა ეს არის ერთგვარი დროული, რომ, გავიხსენოთ, რომ კვირის ნულოვანი
ჩვენ ითამაშა, რომელზეც სატელეფონო წიგნი მოსწონს ეს.
და მიუხედავად იმისა, რომ ეს არის აშკარად ფიზიკური ცალი ქაღალდის,
შეგიძლიათ სახის ვფიქრობ სატელეფონო წიგნი, როგორც მასივი.
რა თქმა უნდა, თუ იყო reimplement ამ ცალი ამ ცალი ქაღალდის
კომპიუტერი, ალბათ, თქვენ უნდა გამოიყენოთ რაღაც
მასივი შესანახად ყველა იმ სახელები და ნომრები ყველა გზა
მეშვეობით ზ ასე რომ, ეს არის ლამაზი, რადგან ეს საშუალებას გვაძლევს შესაძლებლობას,
ალბათ, განიხილოს, თუ როგორ შეიძლება რეალურად განახორციელოს რამე მაგდაგვარს.
როგორც მთელი რიგი კარი აქ.
ასე რომ, თუ მე could-- ჩვენ გვჭირდება ერთი მოხალისე მოდის up.
ვნახოთ.
უცხო სახე, ალბათ, უცხო სახე ალბათ.
როგორ შესახებ ნარინჯისფერი?
აქ.
ფორთოხალი პერანგი, მოდის up.
>> მოდით წავიდეთ წინ არის და ეს ნაბიჯი ამ კარს მხარეზე,
გადაადგილება ამ გზას მომენტში.
რა გქვია?
>> Ajay:
>> დავით Malan: Ajay.
დავით.
კარგია თქვენთან შეხვედრა.
ყველა უფლება.
ასე რომ, ჩვენ გვაქვს უკან ამ ექვსი კარი ციფრული ეკრანზე
ან, უფრო სწორად, შვიდი კარი ეკრანზე მთელი bunch of ნომრები.
და მე გითხარით, არაფერი in advance-- შეთანხმდნენ?
Ajay არაფერი წინასწარ.
დავით Malan: ყველა მინდა, რომ ამის გაკეთება ახლა ის არის, ჩემთვის, ჩვენთვის,
მართლაც, ნომერი 50, ერთი ნაბიჯი იმ დროს.
>> Ajay: პუნქტების 50?
>> DAVID Malan: ნომერი 50.
და შეგიძლიათ გამოვლენა რა არის უკან თითოეულ ამ კარს
უბრალოდ ეხება ეს თითი.
რა იგი. [სიცილი]
>> [ტაში]
>> ძალიან კარგად გაკეთდეს.
OK.
ჩვენ გვაქვს მშვენიერი საჩუქარი პრიზი აქ.
თქვენი არჩევანი ფილმები ჩვენ განიხილეს გასულ კვირას.
>> Ajay: Oh, man.
Oh, მე მინახავს Spaceballs.
>> დავით Malan: Spaceballs.
ყველა უფლება.
ასე გამართავს მხოლოდ ერთი მომენტი.
How-- მოდით ეს ვსწავლობთ მომენტში
როგორ წავიდეთ შესახებ მოძიებაში ნომერი 50?
Ajay: მე აირჩია შემთხვევით.
DAVID Malan: ასე რომ თქვენ აირჩია შემთხვევით და გაუმართლა.
Ajay: დიახ.
დავით Malan: OK.
შესანიშნავი.
ასე რომ, ახლა, რომ თქვენ არ მიღებული გაუმართლა, რა
შეიძლება მომხდარიყო უკან ეს კარები?
ასე რომ, თუ მე წავიდეთ წინ და გამოვლენა ამ ნომრებზე აქ,
ისინი რეალურად არიან შემთხვევითი მიზნით.
და საუკეთესო თქვენ შეიძლება გაკეთდეს, სიმართლე გითხრათ, არის ის, რომ, საბოლოო ჯამში,
უარეს შემთხვევაში, შემოწმების მათ ყველა.
ასე რომ თქვენ გაქვთ სუპერ გაუმართლა, რომელიც არ არის ის რაც ჩვენ გვინდა მოვუწოდებთ ალგორითმი.
დიახ, congrats.
მაგრამ ახლა let's-- იუმორი ჩემთვის, თუ შეიძლება.
მოდით წავიდეთ ამ tab აქ.
და აქ ნომრები ნათლად რაც, როგორც ჩანს შემთხვევითი მიზნით,
და იყვნენ ისინი.
მაგრამ ახლა თუ მე ნაცვლად სარჩელის რომ უკან ამ კარს
ნომრები, რომლებიც დალაგებულია.
მიზანი არის ის, რომ ასევე მოგვაგნოთ ნომერი 50.
მაგრამ ამის გაკეთება algorithmically და გვეუბნებიან, თუ როგორ ვაპირებთ ამის შესახებ.
და თუ თქვენ მას, თქვენ გაქვთ ფილმი.
თქვენ ვერ იპოვით მას, მისცეს მას უკან.
Ajay: ამიტომ, მე ვაპირებ, რათა შეამოწმოს მთავრდება პირველი, რათა დადგინდეს, თუ there's--
[სიცილი და ტაში]
დავით Malan: აი.
მოდით შევხედოთ ერთი საქართველოს Ajay მისი წინამორბედების მსგავსად,
Sean, რომელიც იყო საკმაოდ გაუმართლა.
OK, ასე რომ თქვენი ამოცანა აქ, Sean, არის შემდეგი.
მე არ იმალება უკან ამ კარები ნომერი შვიდი,
მაგრამ მოახერხა მოშორებით ზოგიერთი კარები ასევე არიან სხვა არასამთავრობო უარყოფითი რიცხვები.
და თქვენი მიზანია, რომ ვიფიქროთ ამ ზედა გრაფაში ნომრები მხოლოდ მასივი.
ჩვენ უბრალოდ თანმიმდევრობა ცალი ქაღალდი ნომრები მათ უკან.
და თქვენი მიზანია, მხოლოდ გამოყენებით დაბრუნება მასივი აქ, ჩემთვის ნომერი შვიდი.
და ჩვენ შემდეგ ვაპირებთ კრიტიკა როგორ წავიდეთ შესახებ ვაკეთებთ.
მოგვაგნოთ ნომერი შვიდი, გთხოვთ.
პოსტები
5, 19, 13.
ეს არ შეასრულა კითხვაზე.
1.
ამ ეტაპზე თქვენი ანგარიში არ არის ძალიან კარგი, ასე რომ თქვენ შეიძლება ასევე შენარჩუნებას აპირებს.
3.
გაგრძელდება.
სიმართლე გითხრათ, მე ვერ დაეხმარება, მაგრამ საინტერესოა, რა თქვენ კი ფიქრი.
>> SEAN: მე შეუძლია მიიღოს მხოლოდ ყველაზე ზედიზედ.
დავით Malan: მხოლოდ ყველაზე ზედიზედ.
ასე რომ თქვენ გაქვთ სამი მარცხენა.
ასე რომ, მე 7.
>> [აუდიტორია შეძახილებით წინადადებები]
ასე რომ, ორივე მათგანი იყო გასაოცარი ძალიან განსხვავებული მიზეზის გამო.
ასე რომ, ჩვენ შეჩერდით მომენტში წინ,
და გასაღები ინსაითი აქ იყო ეს კარი გვქონდა ნომრები
მათ უკან რომ იყო დახარისხებული, იდეალური takeaway, რომელიც არის ის, რომ თქვენ ამის გაკეთება
ფუნდამენტურად უკეთესი მეორე example--
და, მართლაც, რომ იყო შონ პირველი მცდელობა ერთად შემთხვევითი რიცხვების
ისევე როგორც ადრე, მაგრამ, როგორც კი როგორც ეს ციფრები დახარისხებული,
ისევე როგორც სატელეფონო წიგნი, რა შეგიძლიათ აშკარად გაკეთება?
ან როგორ შეიძლება თქვენ ბერკეტი, რომ ცოდნა?
Yeah.
>> აუდიტორია: თქვენ წასვლა შუა ნაწილამდე იყვნენ [INAUDIBLE].
DAVID Malan: ჰო.
ზუსტად.
ასე რომ, Ajay პირველადი ინსტიქტი იყო რათა შეამოწმოს მთავრდება, როგორც მახსოვს,
და მაშინ ჩვენ ერთგვარი მზა მაგალითად სწრაფად.
მაგრამ თუ ჩვენ დავიწყეთ ამის გაკეთება უფრო მეთოდურად ერთად იმ ხაზები,
მაგრამ დაწყებული ალბათ, შუა, რადგან ისინი დახარისხებული,
როგორც კი ჩვენ გამოავლინოს ნომერი 16, ამიტომ ვიცი
და მოდით ზუსტად that-- ჩვენ ამიტომ ვიცი, რომ 50, დღევანდელ შემთხვევაში,
აქვს, მარჯვნივ.
ამიტომ ისევე როგორც კვირაში ნულოვანი როდესაც ჩვენ დაწყვეტილია ტელეფონი წიგნი ნახევარი
და დაუშინეს ნახევარში პრობლემა მოშორებით, იგივე იდეა აქ.
ჩვენ შეგვიძლია სახიფათოა ამ ტაიმში პრობლემა დაშორებით.
და, ალბათ, ის, რაც თქვენ შეიძლება გავაკეთოთ algorithmically,
ერთხელ თქვენ იცით, რომ 50 უნდა იყოს უფლება, თუ ის სადმე,
ცდილობენ იქ, შუა დარჩენილი კარი.
რა თქმა უნდა, 50 უმაღლესი მეტი 42, ასე რომ შეგიძლიათ
იმისათვის, რომ ეს დარჩენილი კვარტალში პრობლემა დაშორებით,
და ბოლოს, იდენტიფიცირება რაღაც 50.
მაგრამ, ისევე, როგორც სატელეფონო წიგნი, ამ ნომრებზე
გადაეცათ us უკვე დახარისხებული მიზნით, რომელიც ტოვებს ჩვენთვის
კითხვაზე, როგორ გინდა კიდევ რამ შევიდა დახარისხებული მიზნით?
და, სიმართლე გითხრათ, რა ღირებულება?
ეს არის ერთ ერთი რამ უნდა იყოს გადასცა სატელეფონო წიგნი
და შემდეგ შთაბეჭდილების თქვენს მეგობრებს მოძიებაში ტელეფონის ნომერი ნამდვილად სწრაფად, არა?
Tearing 32 გვერდებზე იმისათვის, რომ იპოვოს ადამიანს 4 მილიარდი გვერდები,
ჩვენ ვთქვით, იყო ერთი უკიდურესი მაგალითი.
მაგრამ რამდენ დროს დასჭირდა Verizon დასალაგებლად რომ სატელეფონო წიგნი?
რამდენი დრო დასჭირდა us დასალაგებლად ამ შვიდი ნომრები?
ეს არის საკითხი, რომელიც ჩვენ დღემდე სრულიად იგნორირებულია.
>> ასე რომ, მოდით ამ კითხვაზე პასუხის გაცემა ახლა.
და ჩვენ ყველა იმ ფილმების ახლა, მაგრამ ჩვენ გვაქვს გარკვეული სტრესი ბურთები.
თუ, ვთქვათ, რვა მოხალისეები არ იბადება შემოგვიერთდება აქ?
მოდით წავიდეთ წინ და ამის გაკეთება, რა ოთხ თქვენ, სამი აქ?
კიდევ რამდენიმე ახალი სახეები.
და ოთხი იქ?
და ახლა მოდით არ კომპენსაცია აქ და რვა მეტი აქ ბოლომდე.
მოდის up.
ყველა უფლება.
რა გვაქვს აქ თითოეული თქვენგანი ნომერი.
თუ გსურთ წასვლა წინ, მიიღოს ამ ნომერზე.
რა გქვია?
>> ARTIE: Artie.
>> დავით Malan: Artie, okay.
თქვენ ნომერი 1.
>> ამინ: ამინ.
დავით Malan: ამინ.
დავით.
თქვენ ნომერი 2.
და წავიდეთ წინ, რადგან მე გადასცემს თქვენ ფურცლებზე,
გამოდიან საკუთარი თავი თვალწინ მუსიკა დგას იმავე მიზნით, როგორც იქ.
>> ANDY: Hi, Andy.
>> დავით Malan: Andy, ეს არის ლამაზი, რომ ნახოთ თქვენ.
ნომერი 3.
>> JACOB: Jacob.
>> დავით Malan: იაკობი, ნომერი 4.
სტუმარს ბორტზე.
GRANT: Grant.
დავით Malan: Grant.
ნომერი 5.
>> Alanna: Alanna.
>> დავით Malan: Alanna, ნომერი 6.
>> FRANCES: ფრენსის.
დავით Malan: საფრანგეთი, ნომერი 7.
და?
>> RACHEL: Rachel.
>> დავით Malan: Rachel, ნომერი 8.
ყველა უფლება.
წავიდეთ წინ და მიიღოს თავს ამ მიზნით.
ნება მიბოძეთ ერთი დარჩენილი მუსიკა სტენდი ადგილი.
სადაც თქვენ უნდა დავდგეთ?
OK.
წავიდეთ წინ და მხოლოდ თქვენს ნომრები , სადაც დამსწრე შეგიძლიათ ნახოთ მათ,
მუსიკა დავდგეთ წინაშე გარე.
და იმედია, ჩვენი პირველი საღი აზრის ქვითარი აქ 4, 2, 6.
Oh-oh.
დაველოდოთ წუთში.
ჩვენ არ გვაქვს 8.
მე უნდა გამოსახლება თქვენ მაგალითად რატომღაც.
პოსტები
არა, OK.
ვნახოთ.
ჩვენ შეგვიძლია ამის გაკეთება.
დგას.
იქ ჩვენ წავიდეთ.
სწორი.
ყველა უფლება.
ასე რომ, ახლა ჩვენ გვაქვს 8, 1, 3, 7, 5.
OK.
შესანიშნავი.
>> ასე რომ, კითხვა ხელთ არის, რა ღირებულება, და მეშვეობით, რაც საშუალებას,
ჩვენ რეალურად ახარისხებენ ნომრები აქ ასე რომ, ჩვენ შეგვიძლია სახის მუშაობა უკან,
საბოლოო ჯამში, და decide-- ეს ნამდვილად შთამბეჭდავი, ნამდვილად ეფექტური,
რომ მე შემიძლია გაყოფა და დაპყრობა სატელეფონო წიგნი?
ეს ნამდვილად ეფექტური, რომ შემიძლია გათიშე და დაიპყროთ
ის ციფრული ცალი ქაღალდის დაფაზე,
თუ შესაძლოა, ის აპირებს ეღირება us ბედი დრო და ენერგია, ან CPU ციკლები
რეალურად მიიღონ ჩვენი მონაცემებით გარკვეული დახარისხებული მიზნით?
ასე რომ, მოდით ამ შეკითხვას.
>> ასე რომ, პირველ რიგში, ამ ნომრებზე საკმაოდ ბევრი შემთხვევითი მიზნით,
და მე ვაპირებ შესთავაზოს ერთი ალგორითმი ან პროცესის
ჩვენ შეგვიძლია დასალაგებლად ეგ.
მე ვაპირებ მივუდგეთ ეს საკმაოდ გულუბრყვილოდ.
და მე ვაპირებ აღიაროს ის, რომ ასეთი ბევრი ჩემთვის
გადაიტანოთ ჩემი აზრით გარშემო მთელი მონაცემთა მითითებული ერთდროულად.
მაგრამ იცით რა?
მე ვაპირებ, რომ გარკვეული ძალიან მარტივია ზღვრული აფიქსირებს.
4 და 2 მწყობრიდან, თუ მიზანია წასვლა 1 მდე 8.
ასე რომ თქვენ იცით, რა?
მე ვაპირებ, რომ თქვენ ბიჭები სვოპ, თუ თქვენ ჩართოთ
ფიზიკური პოზიციები და ცალი ქაღალდის.
ახლა 4 და 6, ამ მიზნით.
მე ვაპირებ დატოვოს ის იყოს.
6 და 8, იმ მიზნით.
აპირებს დატოვოთ უპასუხოდ.
8 and1, მწყობრიდან.
თუ ორი არ იბადება შევცვალე.
ახლა 8 და 3,, თუ თქვენ ბიჭები შეიძლება მოკლე.
8 და 7, თუ თქვენ ბიჭები შეიძლება მოკლე.
და 8, 5,, თუ თქვენ ბიჭები შეიძლება მოკლე.
>> ახლა, მე გაკეთდეს?
არა, რა თქმა უნდა.
მაგრამ მე მივიღე ვითარების უკეთ, არა?
რა იყო თქვენი სახელით კიდევ ერთხელ, ნომერი 8?
>> RACHEL: Rachel.
დავით Malan: ასე რეიჩელ აქვს ეფექტურად bubbled up საკმაოდ შორს,
ყველა გზა ბოლომდე ჩემი მასივი ნომრები აქ.
და ისე, რომ პრობლემა არის სახის მოგვარდება.
ახლა, აშკარად, 2 მაინც უნდა გადავიდეს ცოტა, 4 და 6 და 1.
მაგრამ, როგორც ჩანს, მიღებული პატარა დაახლოება გადაწყვეტა.
ასე რომ, მოდით გამოიყენოს ეს იგივე გულუბრყვილო ევრისტიკული ერთხელ.
2 და 4, OK.
4 და 6, OK.
6 და 1 მმ მმ.
მოდით swap.
6 და 3 მმ მმ.
მოდით swap.
6 და 7 OK.
7 და 5, nope.
მოდით swap.
და ახლა 7 და 8.
და რა არის თქვენი სახელი კვლავ?
FRANCES: ფრენსის.
დავით Malan: Frances.
ასე რომ, ახლა Frances არის კიდევ უკეთესი პოზიცია, რადგან ახლა, 7 და 8
სწორად bubbled up დაბრუნება.
ასე რომ 2 და 4, OK.
4 და 1, მოდით swap.
4 და 3, მოდით swap.
4 და 6, თქვენ OK.
6 და 5, მოდით swap.
და ახლა ბიჭები არიან კარგი.
ჩვენ თითქმის არ არსებობს.
2 და 1, მწყობრიდან, ასე რომ სვოპ.
და ახლა ნება მომეცით გავაკეთოთ საღი აზრის ქვითარი.
2 და 3, 3 და 4, 4 და 5, 5 და 6, 6 და 7, 8.
OK, ასე რომ ჩვენ გავაკეთეთ.
>> მაგრამ რა ღირებულება არ მინდა ახარისხებენ, აქ?
ისე, რამდენი ნაბიჯები საერთოდ მე პოტენციურად მიიღოს, როდესაც დახარისხება ეგ?
ასევე, ჩვენ დავბრუნდებით ამ კითხვაზე.
მაგრამ, სიმართლე გითხრათ, თუ თქვენ გაქვთ ცოტა შეწუხებული, რომ ის,
სახის გამოვლენის, რომ ეს არ იყო შესაძლოა, ყველაზე ეფექტური ალგორითმი.
და მართლაც, სიმართლე გითხრათ, მე ოფლიანობა მით უფრო, ფეხით უკან და მეოთხე.
რომ არ გრძნობს, განსაკუთრებით ეფექტური.
მოდით ცდილობენ რაღაც.
თუ ბიჭები აღადგინოთ თავი ამ რვა ღირებულებებს.
კარგ საქმეს.
>> მოდით შევხედოთ ელექტრონულად, მხოლოდ ერთი წუთით ადრე, ჩვენ ვცდილობთ, რაღაც,
რა მოხდა.
აქ, თქვენ შესახებ, რომ ნახოთ ვიზუალიზაცია ამ რვა ადამიანი
რომლის დროსაც ლურჯი და წითელი ბარები წარმოადგენს ნომრები.
გრძელია ბარი, მით უფრო დიდია რიცხვი.
მოკლე ბარი, პატარა ნომერი.
და რას ვაპირებთ, რომ არის შემთხვევითი მიზნით, რვა მათგანი.
თქვენ ვაპირებთ, ამ ბარები მიღების დალაგებულია, რომ იმავე ალგორითმი,
ან მითითებული ინსტრუქციები, რომელიც ჩვენ მოვუწოდებთ ამიერიდან bubble sort.
ასე, ყოველ მეორე ან ასე, ორი ბარები განათების წითელი,
მიმდინარეობს შედარებით კომპიუტერი.
და მაშინ, თუ დიდი ბარი და პატარა ბარი მწყობრიდან,
ისინი მიმდინარეობს გაცვალეს ჩემთვის.
>> ახლა ეს არის ძალიან tedious უყურებს ამ, რა თქმა უნდა,
ძალიან დიდი ხნის განმავლობაში, მაგრამ შეამჩნევს takeaway-- დიდი ბარები გადასვლის უფლება,
პატარა ბარები გადასვლის მარცხენა.
მოდით შეწყვეტთ ამ პროცესში და დაჩქარდეს ეს
უნდა იყოს ბევრად უფრო სწრაფად, ასე რომ შეგიძლიათ მიიღეთ მაღალი დონის გრძნობა რა,
მართლაც, bubble sort აკეთებს.
რა თქმა უნდა, ეს bubbling მდე მარჯვენა მხარეს სიაში,
ან მასივი, დიდი ბარი.
და პირიქით, პატარა ბარები bubbling მათი გზა ქვემოთ მარცხენა,
თუმცა უფრო დიდი ტემპით ვიდრე ჩვენ ადრე გააკეთა.
ასე რომ, რთული ვხედავ ადამიანებს, მაგრამ ვიზუალურად ეს მართლაც რა
ხდებოდა.
>> მაგრამ მოდით ცდილობენ ფუნდამენტურად განსხვავებული მიდგომა არის.
შევეცადოთ სხვადასხვა ალგორითმი, რომლითაც ჩვენ თქვენ
ბიჭები დაიწყოს ეს ორიგინალური პოზიციებზე, რომელიც ამ მიზნით აქ.
და მოდით წავიდეთ წინ არის.
და მე ვაპირებ, რომ რამე თუნდაც მარტივი, არა?
ამ დროის განმავლობაში შევცვალე pairwise ერთხელ და ისევ, თითქმის პატარა ჭკვიანი.
მოდით კიდევ უფრო გულუბრყვილოდ, სადაც, თუ მინდა დასალაგებლად ამ FOLKS,
ნება მომეცით უბრალოდ შეინახოს ეძებს პატარა ელემენტს.
ასე რომ, ახლა, არის 4 ყველაზე პატარა ნომერი მე ვნახე.
მე ვაპირებ გვახსოვდეს, რომ.
არა, 2 არის უკეთესი, და გვახსოვდეს, რომ.
1 კი პატარა.
3, 7, 5.
OK.
One-- რა არის თქვენი სახელი კვლავ?
>> ARTIE: Artie.
>> დავით Malan: Artie.
ასე რომ, Artie, წავიდეთ წინ.
მე ვაპირებ გაიყვანოს თქვენ გარეთ ხაზი.
თუ თქვენ ვერ დავბრუნდებით აქ.
და მე უნდა მიიღოს ოთახი მისთვის.
ჩვენ გვაქვს გადაწყვეტილება წერტილი აქ.
როგორ შეგვიძლია ოთახი Artie აქ დასაწყისში, სადაც ნომერი 1 ამოცნობა?
>> აუდიტორია: Shift.
>> დავით Malan: OK, ჩვენ შეგვეძლო გადაეტანა ყველას.
მაგრამ შესთავაზოს ოპტიმიზაცია.
რომ გრძნობს, ცოტა შემაშფოთებელი ჩემთვის ვთხოვო ოთხი ადამიანი
გადატანა ყველა გზა down.
რა შეიძლება გავაკეთო?
>> აუდიტორია: Switch მათ.
>> დავით Malan: Switch მათ.
და რა არის თქვენი სახელი კვლავ?
>> JACOB: Jacob.
დავით Malan: იაკობი, გადაადგილება.
ბევრად უფრო ეფექტური მხოლოდ აქვს Jacob swap ადგილას Artie,
როგორც ეწინააღმდეგებოდა აიძულა ოთხივე ეგ,
დიდი მადლობა, რომ მათი სწორი პოზიცია.
რა არის ლამაზი შესახებ Artie ახლა, ის თავის სწორი პოზიცია.
მოდით ეს კიდევ ერთხელ გავაკეთოთ.
2, რომ მცირე რაოდენობის მე ვნახე.
3, 7, 5.
OK.
2 ნამდვილად პატარა.
არ აქვს რაიმე სამუშაოს.
მოდით ეს კიდევ ერთხელ.
6.
პატარა?
8.
Nope.
4?
Ooh.
მიადევნე თვალი მახსოვს 4.
3.
მიადევნე თვალი მახსოვს 3.
7, 5.
ყველაზე პატარა ნომერი მე ჩანს ეს უღელტეხილი 3.
თუ გსურთ გამოდი.
სადაც ჩვენ უნდა დააყენოს თქვენ?
და რა გქვია?
>> Alanna: Alanna.
>> დავით Malan: Alanna, ჩვენ აპირებთ უნდა გამოსახლება თქვენ.
მაგრამ ეს არის უფრო ეფექტური, მხოლოდ სვოპ ორი ადამიანი,
ვიდრე რამდენიმე ადამიანი რეალურად იტყვის მეტი.
ახლა მოდით ეს კიდევ ერთხელ გავაკეთოთ.
მე ვაპირებ აირჩიოთ 4, ისე გამოდი.
და ვინ უნდა გადავიდეს?
ნომერი 8, რა თქმა უნდა.
თუ მე ახლა 5 ნომერი, გამოდი.
ნომერი 8 აპირებს მიიღოს გამოასახლეს ერთხელ.
მე ახლა აპირებს იპოვოს ნომერი 6 ადგილი.
7 ადგილი.
8 ადგილი.
>> რაც ჩვენ გავაკეთეთ ახლა არის რაღაც მოუწოდა შერჩევის დალაგების,
და თუ ჩვენ ვიზუალიზაციისთვის, ეს არის აპირებს ვგრძნობ ცოტა განსხვავებული.
მოდით წავიდეთ წინ და ამ მენიუ აქ, ამ visualization--
მოდით შეცვალოს ეს, რომელთა მიზანია მოდის, Firefox.
მოდით შეცვალოს ეს შერჩევის ჯიშია.
და მოდით დაჩქარდეს, როგორც ადრე, და დაიწყოს ვიზუალიზაცია არის.
და ეს ალგორითმი აქვს სხვადასხვა ფიქრობს იგი.
თითოეულ iteration, სიმართლე გითხრათ, ეს კიდევ უფრო მარტივია.
მე უბრალოდ შერჩევის პატარა ელემენტს.
ახლა, სიმართლე გითხრათ, მე მივიღე ცოტა გაუმართლა, რომ დროს, რომ ეს დახარისხებული სუპერ სწრაფი.
ელემენტები იყო შემთხვევითი.
ეს არ არის, როგორც ჩვენ საბოლოოდ ვხედავ, ფუნდამენტურად სწრაფად.
მაგრამ ვნახოთ, მესამე და საბოლოო მივუდგეთ აქ, რა ხდება.
მოდით წავიდეთ წინ და აღადგინოთ თქვენ ბიჭები ერთი საბოლოო დრო უნდა იყოს ამ მიზნით აქ.
>> და ახლა, მე ვაპირებ ცოტა უფრო ჭკვიანი,
უბრალოდ გარშემო ჩვენი ალგორითმები.
მე ვაპირებ ამის გაკეთება.
მე ვაპირებ წასვლა არ უკან და მეოთხე იმდენად.
სიმართლე გითხრათ, მე ვარ დაღლილი ყველა ამ traversing.
მე უბრალოდ აპირებს მიიღოს ის, რაც მე ვარ მოცემულია დასაწყისში სიაში,
და მე ვაპირებ დასალაგებლად რომ მაშინ და იქ.
ასე რომ აქ ვართ.
ნომერი 4.
მე ვაპირებ ჩადეთ ნომერი 4 შევიდა დახარისხებული სია.
კეთდება.
I აცხადებენ, და მხოლოდ იმისათვის, რომ ეს კიდევ უფრო ნათელია, ეს ნაწილი ჩემი სია დალაგებულია.
ეს სახის სულელური პრეტენზია, მაგრამ ნამდვილად 4 დალაგებულია სიაში ზომა ერთი.
ახლა, მე აპირებს ნომერი 2.
ნომერი 2, მე ახლა აპირებს ჩადეთ ადგილას.
ასე რომ სად 2 ეკუთვნის?
ცხადია, მეტი აქ.
ასე რომ წავიდეთ წინ და გადავა უკან, თუ ეს შესაძლებელი იქნებოდა.
და რატომ არ ბიჭებს უბრალოდ მიიღოს თქვენი მუსიკა დგას ამ დროს.
და მოდით იძულებით ჩადეთ თქვენ შევიდა დასაწყისში სიაში.
ასე რომ ცოტა უფრო მეტი მუშაობა.
მე უნდა გადავიდეს Jacob გარშემო, და რა გქვია?
>> ამინ: ამინ.
>> დავით Malan: ამინ.
მაგრამ მაინც მე არ წავიდეთ უკან და მეოთხე.
მე უბრალოდ აღების რამ როგორც მე.
მე უბრალოდ ჩასმა მათ სწორი ადგილი.
6, ეს არის რეალურად საკმაოდ მარტივია.
მოდით ჩადეთ თქვენ იქ, თუ უბრალოდ სურდა გადაადგილება ოდნავ.
ნომერი 8, ასევე საკმაოდ მარტივია.
აი აქ.
რა იგი.
ნომერი 1, ჩვენ შეგვიძლია არა მხოლოდ სვოპ Amin აქ,
იმიტომ, რომ ის აპირებს არეულობას up მიზნით.
ამიტომ, ჩვენ უნდა ვიყოთ უფრო ჭკვიანი.
ასე რომ, Artie, თუ შეიძლება უკან up მომენტში.
მოდით წავიდეთ წინ და გადაიტანოს ახლა, განსხვავებით ჩვენი წინა ალგორითმები,
იმისათვის, რომ ოთახი Artie სწორედ აქ დასაწყისში.
ასე რომ, დღის ბოლომდე, მე სახის აკეთებს იმას, რაც მინდოდა, რათა თავიდან ავიცილოთ ადრე.
და ჩემი ალგორითმი არის ერთგვარი საქართველოს შეცვალა, ინტელექტუალურად
საწყისი რაც თავდაპირველად იყო.
მე უბრალოდ აკეთებს გადასვლის სხვადასხვა წერტილი.
ახლა მე 3.
ოჰ, რა.
ჩვენ ყველაფერი უნდა გავაკეთოთ უფრო მეტი მუშაობა კვლავ.
ასე რომ, მოდით დააყენებს თქვენ გარეთ.
მოდით გადაადგილება 8, 6, 4 oh oh-- და 3 აპირებს წავიდეს უფლება არსებობს.
ასე რომ მინიმუმ მცირე დანაზოგების ამ დროს.
7, არ არის ძალიან ბევრი სამუშაოა ჩასატარებელი.
ასე რომ, თუ გსურთ პოპ უკან, მოდით ჩადეთ თქვენ.
და ბოლოს, 5, თუ თქვენ გსურთ პოპ უკან,
უნდა გადაიტანოს თქვენ, თქვენ, სანამ მეხუთე ადგილი.
>> ასე რომ, ახლა, რომ ეს ერთი მაღალი დონის გრაფიკული,
მოდით ეს ალგორითმი ვიზუალიზაცია ერთი დამატებითი დრო.
ასე რომ, ეს უნდა მოვუწოდებთ Insertion ჯიშია.
ჩვენ აწარმოებს მას, ისევე როგორც სწრაფი და დაიწყოს აქ.
და ეს, ძალიან, აქვს სხვადასხვა შეგრძნებას.
ეს ერთგვარი უკეთესობისაკენ და უკეთესი, მაგრამ ეს არასოდეს არ არის სრულყოფილი
სანამ მე წასვლა და გლუვი ის ხარვეზი.
რადგან, კიდევ ერთხელ, მე მხოლოდ აღების რა მე უტარდება მარცხნიდან მარჯვნივ.
ასე რომ, მე არ მიიღოს ისე გაუმართლა რომ ყველაფერი იყო სრულყოფილი.
სწორედ ამიტომ, ჩვენ გვქონდა ამ პატარა mispositions რომ ფიქსირებული დროთა განმავლობაში.
>> ასე რომ, ყველა ამ ალგორითმები, როგორც ჩანს, აწარმოებს ოდნავ განსხვავებული ტემპით.
დაკავშირებით, რომელიც იტყვით არის საუკეთესო და უსწრაფესი აქამდე?
Bubble sort, პირველი?
შერჩევის დალაგების, მეორე?
Insertion დალაგების, მესამე?
მე მესმის გარკვეული შერჩევის ჯიშები.
სხვა აზრები?
>> გამოდის, რომ ყველა ამ ალგორითმები
ფუნდამენტურად ისევე, როგორც ეფექტური როგორც თითოეულ other-- ან, პირიქით, ისევე როგორც
არაეფექტური და ერთმანეთს, იმიტომ, რომ ჩვენ ფუნდამენტურად
უკეთესია, ვიდრე სამივე ეს ალგორითმები.
და რომ ცოტა თეთრი ტყუილი, ძალიან.
როდესაც ვამბობ, რომ, როგორც ეფექტური ან, როგორც არაეფექტური,
ეს არის ის, როგორც მინიმუმ, სუპერ დიდი ღირებულებები n.
როდესაც ჩვენ გვაქვს მხოლოდ რვა ადამიანი აქ, ან იქნებ 50 ან იმდენად ბარები ეკრანზე,
თქვენ აბსოლუტურად შეამჩნევთ განსხვავებები მათ შორის სამი ალგორითმები.
მაგრამ, როგორც N, იმ ადამიანების რიცხვი, ან რაოდენობის ნომრები,
ან რაოდენობის ხალხი ტელეფონი წიგნი, ან რაოდენობის ვებ გვერდები
in Google-ის მონაცემთა ბაზაში იღებს უფრო დიდი და უფრო დიდი,
ჩვენ ვხედავთ, რომ სამივე ალგორითმები საკმაოდ ცუდი.
და ჩვენ შეგვიძლია გავაკეთოთ ფუნდამენტურად უკეთესად რომ.
>> მოდით შევხედოთ, საბოლოოდ, რა ეს ალგორითმები შეიძლება
ჟღერს, როგორც იმ კონტექსტში რამდენიმე სხვა
ასევე გზა ამ ვიზუალიზაციის
რომ გააცნობს გვაძლევს პუნქტების ალგორითმები.
მოდით წავიდეთ წინ და მივულოცო ჩვენი მონაწილეების აქ, ვინც
დახარისხებული თავს ძალიან კარგად.
თუ გსურთ მიიღოს მოსაყვანად საჩუქრად მიართვა.
თქვენ შეგიძლიათ შეინახოთ თქვენი ისევე.
და რას დავინახავთ, უფრო სწორად, გვესმის, ახლა,
ის არის, რომ ჩვენ ამით ხმები თითოეულ ამ ბარები
და გაიგივებას პროგრამული უზრუნველყოფა, სხვადასხვა სიხშირის ხმა,
შეგიძლიათ გადაიტანოთ თქვენი გონება უფრო audioly დაახლოებით რა თითოეული ეს ყველაფერი
ჰგავს.
პირველი, რაც Insertion დალაგების
>> [ტონა]
>> ეს არის bubble sort.
>> [ტონა]
>> შერჩევის ჯიშია.
>> [ტონა]
>> რაღაც მოუწოდა შერწყმა ჯიშია.
>> [ტონა]
>> Gnome ჯიშია.
>> [ტონა]
>> სწორედ ეს CS50.
ვნახავთ თქვენ ოთხშაბათს.
>> მთხრობელი: და ახლა, "Deep აზრები "მიერ Daven Farnham.
რატომ არის იგი for loop?
რატომ არ უკეთესი?
მინდა მიიღოს ხუთი loop.
>> [სიცილი]