DAVID MALAN: Bine.
Deci, acest lucru este CS50, iar acest lucru este acum începutul săptămânii trei.
>> Deci, până acum, ne-am scris programe în C
care să arate un pic ceva de genul asta aici.
Deci avem un cuplu de ascuțite include în partea de sus.
Avem int, principal, gol, și apoi ceva de făcut în mijloc,
unele pic de cod în interiorul de această funcție.
Dar cheie a fost faptul că ne-am spus nul aici.
Deci gol, tot acest timp, specifică că acest program, atunci când a alerga,
poate fi rulat numai prin numele său.
Nu puteți introduce orice cuvânt sau Numerele după numele programului, atunci când
conduce.
Astfel, de exemplu, în cazul în care programul ar compilat într-un fișier numit salut,
ai putea face ./hello, dar asta este.
>> Singurul mod în care ar putea furnizarea de informații pentru acest program
este de asteptare o funcție.
De exemplu, ce funcție am fost, folosind până acum
pentru a obține de intrare de la utilizator?
>> Audiența: Ia șir.
DAVID MALAN: Pentru a obține șir, sau te int, sau le-ați văzut pe alții,
chiar dacă nu le-ați folosit încă, ca primi lung, lung și altele asemenea.
Dar să presupunem că ne-am de fapt, doresc să înceapă
scriere a programelor care sunt puțin mai mult versatil, și, sincer, un pic mai mult
ca comenzile pe care le-ați primit, sperăm,
un pic obișnuiți să.
Ca spațiu cd Dropbox.
Acest lucru, desigur, schimbări directorul, presupunând
tu ești în casa John Harvard director, în folderul Dropbox.
Între timp, o comandă de genul asta creează un nou director numit pset2,
cum este posibil să aveți deja sau curând pentru problema va stabili două.
Asigurați-Bună ziua, desigur, este o comandă care construiește un program numit salut
dintr-un fișier numit salut punct c.
Și în fiecare din aceste cazuri, acum, am avut
oferă un argument cu privire la așa-numitele linie de comandă, prompt clipește,
astfel încât face ceea ce știe să construiască, și așa că mkdir știe ce dosar pentru a crea,
și astfel încât cd știe în cazul în care vrei să mergi.
Dar până acum, ne-am tot spun că, funcția principală implicit,
are o expresie gol în interiorul acestor paranteze,
ceea ce înseamnă că nu pot lua nici un argument.
>> Deci incepand de astazi, ceea ce vom face
este, vom începe sprijinirea lucruri de genul asta chiar.
De fapt, în acest caz, pe care o Nu în mod obișnuit de tip manual,
Asigurați-a făcut acest lucru pentru noi, nu există
un dar unul, doi, trei suplimentare siruri de caractere de la programul pe nume
zăngănit.
Deci, cum putem realiza acest lucru?
>> Ei bine, incepand de astazi, în cazul în care ne-o dorim
pentru a oferi introducere prin intermediul așa-numita linie de comandă,
vom începe adăugarea aici ceea ce este în yellow--
înlocuirea gol cu ​​int argc virgulă șir argv suport deschis suport aproape.
Acum, acest lucru este interesant pentru un cuplu de motive.
O, o să să ne scrie programe, care sunt un pic mai dinamică.
Dar, mai convingător, se va deschide
acum o conversație cu privire la ce matrice poate într-adevăr
fi utilizată, de ce un șir într-adevăr este sub capota,
până săptămâna viitoare, când vom începe scufundări în chiar mai profundă cu privire la modul în care aparatul este
a face toate de acest lucru lucruri.
Dar pentru moment, să elaboreze, probabil, o imagine.
>> Când scrii un program de cu principal declarat
în acest fel, astfel încât principala are două argumente, un int
si-- ce tip de date este al doilea argument?
>> Audiența: Array.
DAVID MALAN: Array.
Deci, se pare, la prima vedere ca este o string, dar observa parantezele pătrate.
Reamintim ultima dată când am introdus noțiunea de matrice.
Și matrice utiliza paranteze pătrate într-un cuplu de contexte.
S-ar putea utiliza în piața paranteze pentru a merge într-o matrice
și a obține un anumit element, cum ar fi suport 0 sau 1 suport sau suport 2.
Dar am văzut, dacă pentru scurt timp, saptamana trecuta, pe care le, de asemenea,
folosi aceste paranteze pătrate până la declara dimensiunea unei matrice,
dacă știi în avans câte int sau cât de multe siruri de caractere sau orice
de fapt vrei.
Deci, se dovedește nu există un al treilea context aici
care nu are număr interior din parantezele pătrate.
Când specificați, așa cum am aici, numele de ceva de genul argv,
care este doar un mod fantezist de spunând vector argument, care
este un alt mod fantezist de spune o serie de argumente,
Suport deschis suport aproape la fel înseamnă că tu nu faci neapărat
știe în avans cât de mare matrice va fi,
dar știi că va fi un tablou.
Deci, dacă nu știi număr nu-l pune în acolo,
pentru suport deschis suport aproape înseamnă că argv nu este un șir de caractere,
dar o serie de siruri de caractere.
Deci, punct de vedere sintactic, dacă cred că înapoi săptămâna trecută,
este foarte similar cu a spune ceva de genul varsta cuprinsa intre int placuta deschis,
și apoi ceva după aceea.
Deci, ce face acest lucru arata ca?
Să trage de fapt, o imagine.
Deci, atunci când rula acest program cu Main după două argumente definit în interiorul
de aceste paranteze, tu au, în esență, cel puțin două bucăți
de memorie predat la tine sub capota.
O, cum voi atrage ca acest dreptunghi, va fi numit argc.
Și, la fel ca o recapitulare rapidă, ceea ce este tipul de date de argc?
Deci, este un întreg.
Deci, un număr se va pentru a merge în rând argc--
faptul că vine de la numărul de argument.
Între timp, am atras argv ca o matrice.
Și eu nu știu cu adevărat cât timp o să fie,
deci în scopuri de astăzi dot dot dot.
S-ar putea obține din unele lungime.
Dar am imaginat aici cel puțin patru dreptunghiuri.
Deci, argv o bucată de memorie care stochează șir șir șir dot dot dot,
și argc este doar o bucată de memorie pentru un număr întreg.
>> Deci, acum, hai sa fim un pic mai precis.
În cazul în care, atunci când am siruri de caractere în această matrice, numit
argv, vreau să ajung la ele individual, la fel ca săptămâna trecută,
vom folosi notația ca suport argv 0
pentru a obține primul lucru pe care un tablou.
Argv suport 1 pentru a obține al doilea lucru, și așa mai departe.
Cheia aici fiind încă suntem 0 indexed-- suntem încă de numărare de la 0.
Deci, acum hai de fapt a pus ceva în acest sens.
Dacă ar fi să alcătuiască un program numit salut dintr-un fișier numit salut punct c,
și apoi am rulat acest program cu punct slash salut,
ceea ce face computerul meu, laptop-ul meu, arata ca sub capotă
momentul în care am alerga dot slash salut și apăsați Enter?
Ei bine, aceasta este, probabil, ceea ce am putea descrie
ca conținutul computerului memorie, sau memorie RAM-- Random Access.
Cu alte cuvinte, calculatorul, într-un fel pentru tine magic,
pune numărul 1 în argc, AKA argcount, și se pune literalmente șirul
./hello în suport argv 0.
Habar n-am, sincer, ce-i în consolă argv 1 sau 2 sau 3,
pentru că în cazul în care utilizatorul nu are scris nimic în afară de ./hello,
vom presupune că aceste sunt valori de gunoi, cel mai probabil,
ca să spunem așa.
Aceste bucăți de memorie există, dar nu depinde de noi
să se uite la ei, pentru că argcount este doar unul.
>> Acum, între timp, dacă am Trimite rula un alt program,
cd, care este mai corect o comandă, în intermitent spațiu CD prompt--
Dropbox-- când am rulat că, în mod eficient, atunci când programul este rulat cd, argc,
în interiorul memoriei calculatorului meu, este pentru cel mai mai scurte de-al doilea numărul 2.
Și apoi argv o consolă are cd, suport argv 1 are Dropbox,
și apoi, desigur comenzii completează, astfel încât toate acestea memorie
în esență, dispare și este folosit pentru altceva.
Și de aceea spun doar o fracțiune de secundă.
>> Între timp, dacă facem mkdir pset2, imaginea arata aproape la fel,
dar cu diferite siruri de caractere în interiorul argv.
Dacă aș face zăngănit de bord salut salut punct c, aceeași idee.
Mai multe lucruri se completează pentru argv, și argc, desigur, este de 4.
Cu alte cuvinte, chiar dacă această matrice
s-ar putea dot dot dot, unora lungime variabilă, ca să spunem așa,
stii mereu unde la sfârșitul anului acesta este, pentru că argc este de gând să-ți spun
la ce moment trebuie sa te opresti uita la elemente în argv.
Poti sa te uiti doar la patru în total, în acest caz.
>> Așa că haideți să acum o privire la, probabil, un program simplu.
Una care spune doar salut pentru cineva ca Zamyla.
Deci, eu pretind am de gând să scrie un program într-un moment prin care am putea face
./hello spațiu Zamyla, și apoi vreau programul meu de a imprima ceva
super-simplu ca "Bună ziua, Zamyla."
Acum, în trecut, am folosit getstring.
Astfel, în trecut, chiar dacă sunteți nou la programare,
șansele sunt ați putea bici un program care utilizează getstring
si apoi foloseste printf la salut la Zamyla.
Dar să nu folosească getString acest moment.
Lasă-mă în schimb merge în Appliant și includ standard de I O dot ore.
Permiteți-mi să includă, de asemenea, CS50 punct de ore.
Acum int principal, iar acum sunt nu va face nule azi.
În schimb, am de gând să fac int argc șir argv suport deschis suport aproape,
nu specifica un număr.
Și acum aici este meu de așa-numita să facă.
Ceea ce am de gând să fac acum este, eu sunt de gând să faci un pic de un salt de credință,
Am de gând să-și asume faptul că utilizatorului de gând să folosească acest program în mod corect,
și eu pur și simplu o să face printf salut, sn%.
Deci, nimic nou acolo.
Dar eu vreau să pun acum orice cuvânt tipuri de utilizatori, după numele programului.
Deci, dacă am face ./hello spațiu Zamyla, am vrei sa într-un fel programatic acces
citez, "Zamyla." așa că am poate intra în vector meu argument,
matrice mea de siruri de caractere, iar în cazul în care comanda, din nou, a fost ./hello spațiu Zamyla,
ce număr nu vreau pentru a pune în argv aici?
Audiența: 1.
DAVID MALAN: 1, deoarece Suport de 0 dovedește
va fi Numele programului, așa cum am văzut.
Deci, suport 1 este primul cuvânt că eu, utilizatorul, s-au tastat.
Am de gând să mergeți mai departe și de a salva aceasta.
Am de gând să merg în dosarul meu unde am pus acest dosar.
Am de gând să fac să salut 3.
OK comp IO.
./hello Zamyla Enter.
Ce am gresit?
Am fost luat prin surprindere mă pentru o clipă acolo.
Ce am gresit?
>> Audiența: Nume.
>> DAVID MALAN: fișierului de fapt numit hello3.c.
Și am făcut asta doar pentru consistență, pentru că ne-am
au avut hello.c în trecut în codul de on-line.
Așa că haideți să repare această ./hello Suport bord 3 Zamyla.
Enter.
Și acum avem salut, Zamyla.
Între timp, eu pot schimba acest lucru la fi Rob, sau într-adevăr orice alt cuvânt.
>> Dar să ia în considerare un caz colț.
Ce te-ar putea aștepta se va întâmpla în cazul în care Nu introduceți numele cuiva, la toate?
>> Audiența: Eroare.
>> DAVID MALAN: O eroare de un anumit fel, poate.
Să vedem.
Enter.
Null.
Deci, printf este, de fapt fiind un pic de protecție de noi
aici, și literalmente de imprimare paren deschise nul, dar lucrurile chiar mai rău se poate întâmpla.
Și doar pentru a demonstra tu ceva absolut
nu ar trebui să facă, să mergem în aici și începe bage nasul.
Corect?
Dacă aș ști că imaginea în memorie este, în esență aceasta,
argv suport 1 are Zamyla, argv Suport de 0 are ./hello, sau ./hello-3.
Ce este in suport 2?
Deci, eu pot răspunde eu întrebarea, nu?
Pot schimba doar 1 la un 2.
Pot să recompilați acum salut 3, ./hello3 Să măriți și apăsați Enter.
Ne pare rău.
Nici un semn citat.
Interesant.
Deci, asta e un fel de rece la vedem ce mai este aici.
>> Deci, ce altceva este în interiorul laptop-ul meu?
Să-l salveze cu suport 3.
Asigurați-hello3, ./hello-3.
Curios.
Și acum să trecem într-adevăr bold-- 50.
Deci, asta e într-adevăr scufundari în memoria calculatorului meu.
50 de indici în.
Deci, asigurați salut 3 ./hello-3.
Curios.
Bine, acum sunt doar mergi la a lua nesăbuit.
Să mergem la 5.000.
În regulă.
Așa că lasă-mă să recompilați.
Asigurați-hello3, ./hello-3.
OK.
Acum, unii dintre voi, acolo s-ar putea fi un bec merge off.
Câți dintre voi au văzut acest mesaj înainte?
OK.
Deci, de ce?
>> Cote esti-- și nu e diferit lucruri care pot provoca aceasta,
și în mod clar că ești în bine company-- avem în mod clar
a provocat ceea ce se numește o eroare de segmentare.
Și pe scurt pentru ziua de azi, am au atins un segment de memorie
că eu nu ar trebui să aibă.
În cazul în care un segment înseamnă doar o bucată de memorie pe care eu nu ar trebui să aibă.
Acum, computerul garantează că, dacă am rula ./helloZamyla care pot atinge argv
fi suport 0 și argv suport 1.
Dar argc este valoarea 2, înseamnă că eu sunt numai allowed-- e un fel de onoare
system-- la atingere suport 0 și suport 1.
Dacă aș merge mai departe, nu e absolut va fi memoria acolo.
RAM mea există fizic în calculator.
Dar cine stie ce-i acolo?
Într-adevăr, eu sunt difuzate mai multe programe la un moment dat.
S-ar putea avea seen-- dacă nu aș fi fost face acest lucru pe Appliant
dar pe Mac-ul meu sau PC---ar putea avea văzut conținutul unui e-mail.
S-ar putea fi văzut-o clipă Mesaj Am trimis recent.
Orice lucru care ar putea fi persistent în jurul în memorie
ar fi putut fi accesate prin intermediul acest arbitrar pătrat notație suport.
Sau, mai rău încă, este posibil să aveți a găsit una dintre parolele mele
că aș scris recent în, că o Programul a fost stocat în memorie, astfel încât
la mine autentifica, și atunci doar un fel de a plecat
în RAM, până când am renunțat acest program.
>> Și într-adevăr, aceasta este una dintre pericolul și cel puterile
de a folosi un limbaj cum ar fi C. Aveți acces neîngrădit
la întregul conținut de memorie a unui program,
și ce baietii rai poate chiar face în aceste cases--
mai ales atunci când ne-am ajunge la programare web
spre sfârșitul semestrului, vom revizita acest topic-- se scormoni în jurul,
potențial, e cineva calculatorului memorie și pentru a găsi astfel de lucruri curioase
după cum am văzut acolo.
Sau chiar mai rău încă, parole pe care el sau ea poate apoi folosi pentru a face lucruri rele.
>> Deci, în mod clar că nu ar fi făcut acest lucru, pentru că lucruri ciudate încep să se întâmple.
Într-adevăr, acesta este un program de crashing.
Acest lucru ar fi echivalent de sistem de operare Mac sau Windows
o fereastră de program doar dispar.
A apărut o eroare neașteptată.
În mediul de linie de comandă vom vedea ceva de genul asta.
Dar de aceea, este pur și simplu mă ating memorie care nu-mi aparține.
>> Așa că haideți să ne apărăm împotriva acestei un pic într-un mod diferit
uitandu-se la acest program aici.
Deci, din nou, scheletul că am văzut earlier--
și am subliniat acest moment int.
Și în tot acest timp principal are într-adevăr, a revenit o valoare.
Chiar dacă în cele mai multe dintre prelegere noastre Exemple ne-am folosit niciodată dată
reveni nimic în principal.
Tocmai am scrie printf aproape acoladă și asta e tot.
Dar pentru gratuit, ceea ce compilator făcut pentru tine,
în mod eficient, se întoarce 0 pentru tine.
Se pare out-- și e un pic counterintuitive-- că 0 este bun.
Aceasta nu înseamnă fals în sine.
0 este bun, și orice non-0 valoare, lumea a decis,
poate semnifica o eroare.
Deci, dacă v-ați stricat vreodată ceva de pe computerul dumneavoastră,
sau un program de tocmai a murit pe tine și ați ajuns niște fereastră eronate
pe ecran, eroare spunând negativ 49 sau eroare 23--
unele value-- aparent arbitrar care este pentru că un programator a greu cu coduri de
o valoare negativă ca 49 sau pozitiv 23 pentru a reprezenta orice număr, îndrăznesc să spun,
de 4 miliarde de lucruri posibile care ar putea merge prost într-un program.
>> Deci, cum s-ar putea să iau avantaj al acestei mine?
Ei bine, lasă-mă să deschid un program de că am scris în avans,
și scormoni în jurul online numit salut 4.
Și e aproape identic, cu excepția faptului că sa primit un pic de eroare de verificare.
În acest caz, am declarat din nou principal ca având două argumente,
dar de data aceasta, pe linia 17, o notificare Fac un pic de un control bun-simț.
Fac sigur că argc este egal este egal cu 2.
Pentru că dacă este, ca înseamnă că pot în condiții de siguranță
atinge nu numai suport de 0, dar suport 1.
Și am merge mai departe și tipări, în acest caz, Zamyla sau Rob
sau orice cuvânt am scris afară.
Și acum doar pentru a obține un pic mai buna,
Am de gând să se întoarcă în mod explicit 0 pentru a semnifica totul este bine.
Nu sa întâmplat nimic rău.
>> Dar, prin convenție, am de gând să întoarcă 1, sau sincer orice-0 non valoare,
în cazul în care ceva nu a mers bine.
Acum, utilizatorul nu este de gând să într-adevăr observa ce se întâmplă.
Într-adevăr, dacă am intra în acest director, ne-am mări și fac salut 4,
./hello-4 Zamyla se comportă ca ma astept.
Dar dacă în loc să nu tastați nimic, nimic nu pare să se întâmple,
dar nu se prăbuși.
Și dacă eu fac schimb ceva ca Rob este un Proctor
în schimbul de Thayer-- Informații arbitrar.
Dar notificare, argv 1, 2, 3, 4, și 5 ar trebui să existe acum în memorie.
Aceasta, de asemenea, nu ceea ce este programul meu așteaptă,
pentru că am verificat dacă argc este egal este egal cu 2 sau nu.
Deci, eu sunt acum apărarea împotriva acestui lucru.
>> Acum, ca o paranteza, am programmer-- sau, mai degrabă ne-am users--
nu se vedea că 0 sau 1, dar folosind un instrument numit Debugger, sau alte instrumente,
cum vom vedea, înainte de mult timp, tu programator
se poate vedea de fapt, ceea ce ar putea fi merge greșit în interiorul programului dumneavoastră.
>> Deci, orice întrebări cu privire la argc?
Da.
>> Audiența: Am văzut în cazul în care nu au avut caracterul, [inaudibil]
a spus doar stele șir d, cum ar fi caracter asterisc virgulă.
Sunt echivalent aici?
>> DAVID MALAN: Ei sunt.
Deci, întrebarea este, aveți programe de văzut ocazional
ca asta, care nu face spune Suport șir argv
dar spune în schimb ceva cum ar fi char suport argv stele.
Și există chiar și alte Variantele pe care le-ar putea vedea.
Ele sunt într-adevăr echivalente.
Pentru moment, avem aceste un fel de roți de formare
pe sub formă de șir în CS50 bibliotecă, dar în doar peste o săptămână
sau așa vom elimina că obstrucție cu totul și de fapt
uita-te la ceea ce char și steaua sunt, și cum cei care se referă la memorie
reprezentare mai general.
Deci, vom reveni la asta.
>> Alte întrebări cu privire la argv nostru sau argc?
Da.
Audiența: De ce a returna o eroare [inaudibil]?
DAVID MALAN: De ce a făcut-o returna o eroare only-- oh!
În cazul anterior, atunci când ne au fost multa munca cu memorie,
de ce a returna doar o eroare când am scris într-adevăr un număr mare?
Răspunsul scurt este, doar am avut noroc.
În general vorbind, un calculator alocă memorie în bucăți,
și mi-a dat o bucată destul de mare, care Am scăpat, fără a fi observat,
de atingere suport 2, suport 3, Suport 50, dar de îndată ce am împins
norocul meu, m-am dus dincolo granițele bucată de memorie
sistemul de operare mi-a dat.
Și atunci se prinse în jos și a spus, nu.
Eroare de segmentare.
Da.
>> Audiența: Cum calculator cunosc valoarea argc?
>> DAVID MALAN: Cum calculator cunosc valoarea argc?
Când rulați un program, acel program, prin natura prompt clipește,
este înmânat matrice de cuvinte care au fost tastate
la prompt, care a fost tastat la prompt.
Și așa este de operare tău sistem care, în esență,
populează argumente principale pentru tine.
Deci, asta e unul dintre serviciile de pe care le obține, un fel de secret
sub capota un sistem de operare.
Alte intrebari?
Da.
>> Audiența: Ce groapa de bază înseamnă?
DAVID MALAN: Ce groapa de bază înseamnă?
Deci, asta este o întrebare bună.
Și lasă-mă să mă întorc în acest director aici.
Și veți observa că Am un nou dosar acolo.
Se numește într-adevăr de bază, și este de fapt, de obicei, un fișier decent de dimensiuni.
Aceasta este, în esență, un instantaneu de conținutul de memorie de program meu
sau RAM cand sa prabusit.
Și acest lucru va fi util, potențial, diagnostic,
odată ce vom vorbi într-un viitor curs și secțiunea despre depanare,
pentru ca poti face, de fapt, echivalent cu o autopsie digitale
pe care dosar pentru a ajuta dau seama ce ai făcut greșit în programul tău.
Da.
>> Audiența: Este argc o comandă în în sine, sau poate ai numi asta ceva?
>> DAVID MALAN: Bună întrebare.
Este argc o comandă în sine, sau poate ai numi asta ceva?
Nu este cu siguranta o comandă.
Este pur și simplu o variabilă de numele sau denumirea unui argument lui,
și așa absolut noi ar putea numi acest foo,
am putea numi acest bar, care tind a fi-du-te la cuvintele pe care un calculator
om de stiinta merge la.
Dar, prin convenție, vom folosi argc și argv.
Dar asta e doar un om convenție, nimic mai mult.
În regulă.
Deci se dovedește, am fost spune un pic de o lie-- alb
și sincer, în viitor, veți vedea ne-am spus alte minciuni albe.
Dar pentru moment, vom de coaja, unul din acestea.
În acest caz, aici, când am anterior a fugit un program ca ./hello sau ./hello-3
Zamyla, am avut conținutul meu memoria calculatorului caută aproximativ ca
aceasta.
Dar amintesc ce un șir este.
Ce am spus în urmă cu o săptămână ce o string este de fapt sub capota?
Audiența: Array de caractere.
DAVID MALAN: Este un matrice de caractere, nu?
Deci, am putea avea o serie de siruri, dar, la rândul său, un șir
este o matrice de caractere.
Deci, dacă eu chiar vreau să fie anal când am trage această imagine,
Eu ar trebui să fie într-adevăr de desen un pic mai mult ca aceasta,
prin care în fiecare dintre acestea indici de matrice mea argv,
există în sine un șir întreg care se află într-o matrice.
Și acum minciuna albă ne spune astăzi
este că imaginea nu arata destul de genul asta.
De fapt, cele mai mici pătrate sunt de obicei, in afara de dreptunghiuri mari
acolo.
Dar vom reveni la asta înainte de mult timp.
Dar acest lucru este ./hello backslash 0, că fiind caracterul special pe care
delimitează sfârșitul unui șir, și ne-am luat un alt unul după
Numele Zamyla lui.
Deci, ce înseamnă asta?
>> Ei bine, lasă-mă să mergeți mai departe și deschide alte două exemple
care sunt disponibile on-line.
Unul se numește argv1.c și celălalt este argv2.
Este un program de super-simplu, care este diferit de programele anterioare
în care acum eu sunt, folosind argc și argv aici.
Și acum integrarea cu o buclă de în linia 18, de la i = 0 la până la argc.
Și ceea ce am de gând să fac cu această linie de cod aici?
În limba engleză.
Acest lucru demonstrează în mod evident, utilizarea de argc.
Dar, în limba engleză, ceea ce face se face în cazul în care am rulat acest program?
Da?
>> Audiența: Va imprima ta ecran ori de câte ori doriți.
DAVID MALAN: Exact.
Deci, indiferent de cuvintele pe care le tastați la prompt, e
O să regurgiteze le la mine câte unul pe fiecare linie.
Deci, să mergem mai departe și de a face acest lucru.
Lasă-mă să intru în directorul meu și de a face să ./argv1 argv1.
Și acum, hai să-l păstrați simplu.
Să facem nimic la început.
A făcut imprima un singur lucru, și că este, într-adevăr numele programului,
pentru că în consolă 0.
Dacă spun acum foo, se va face cei doi, iar dacă spun bar foo,
se va spune aceste trei lucruri.
Acum, că e oarecum interesant, poate.
Dar amintesc că argv este o matrice de siruri de caractere,
dar un șir este o matrice de caractere, astfel încât să putem lua lucrurile la un alt nivel
și se aplică ca bază logică și face cod care
arata un pic mai criptic, desigur.
Dar, printr-un imbricate buclă, ceva înrudit
a ceea ce s-ar putea retrage de la Mario, de exemplu, dacă ați făcut-o în acest fel.
>> Deci, acum observa pe linia 19, sunt din nou iterarea peste argumentele mele,
de la 0 la până la argc.
Și acum, în linie 21-- sunt împrumut un truc de la ultima week--
Sunt verificarea ceea ce este lungime de suport argv i.
Am depozitarea că răspunsul la n.
Și apoi am integrare de la j la pana la n, unde j este inițializată la 0.
Deci, convenție pentru numărare.
După ce l-am folosit, dacă aveți o bucla imbricate, nu i se poate folosi din nou,
altfel vei rescrie, potențial, valoarea afara buclei interioare.
Deci, eu sunt, folosind j de convenție.
S-ar putea folosi k.
Dacă aveți mai mult de k, probabil au prea mult cuiburi, de obicei.
Dar acum, observa printf meu linie este ușor diferită.
Eu nu imprimă% s, eu sunt imprimarea% c, care, desigur,
este un substituent pentru un char.
>> Și acum observa acest lucru sintaxă.
New.
Nu l-am mai văzut până acum.
Dar în mod logic, acest lucru înseamnă doar obține șirul i-lea în argv
și pentru a obține j ce?
Audiența: caractere.
DAVID MALAN: caractere în acel șir.
Deci, prin utilizarea paranteze pătrate urmat de paranteze pătrate,
aceasta este prima scufundare în siruri de caractere argv lui,
și apoi a doua paranteze pătrate, cu j
este scufundări în caracterele că șir special în argv.
Și apoi, doar pentru o bună măsură, Am imprimarea unei noi linii de aici.
Deci, acum lasă-mă să merg mai departe și deschide o fereastră ușor mai mare
astfel încât să putem vedea acest lucru în acțiune.
Lasă-mă să intru în acel dosar.
Și acum nu face argv-2-- whoops-- face-argv 2, ./argv 2.
Enter.
Și e un pic cam greu pentru a citi vertical,
dar asta e într-adevăr numele Program, urmat de un rând liber.
Acum, lasă-mă să merg mai departe și face foo.
La fel de greu de citit, dar e într-adevăr, imprimarea unui caracter pe linie.
Și dacă eu fac bar, e acum imprimarea cei linie cu linie.
Deci, Takeaway aici nu este atât de mult că, wow, uita-te la acest nou truc elegant
în cazul în care puteți obține la conținutul de caractere specifice unei matrice, a
ci mai degrabă modul în care luăm aceste de bază idei, cum ar fi indexarea într-o matrice,
și apoi indexarea într-un matrice care a fost în această matrice,
și doar aplicând aceleași idei la exemple ceva mai sofisticate.
Dar elementele de bază într-adevăr nu au sa schimbat, chiar de săptămâna trecută.
>> Acum, acest lucru este un fel de timp, în care, reamintim, în săptămâna zero,
ne-am jucat cu o carte de telefon de genul asta.
Și chiar dacă acest lucru este în mod evident bucăți fizic de hîrtie,
vă puteți gândi un fel de a o carte de telefon ca o matrice.
Desigur, dacă ar fi să reimplementeze acest bucati aceste bucăți de hârtie
într-un calculator, probabil v-ar folosi ceva
ca o matrice pentru a stoca toate de cei nume și numere de pe o până la capăt
prin Z. Deci, aceasta este frumos, pentru că ea ne permite o oportunitate,
probabil, să ia în considerare modul în care s-ar putea să pună în aplicare de fapt ceva de genul asta.
Ca și în cazul unei serii de uși aici.
Deci, dacă am putea-- avem nevoie de un voluntari pentru a veni în sus.
Să vedem.
O fata nefamiliare poate, față necunoscut, probabil.
Ce zici de culoarea portocalie?
Aici.
Shirt Orange, haide sus.
>> Să mergem mai departe acum și mișcare aceste uși pe la partea,
muta aceste din drum pentru o clipă.
Care e numele tău?
>> AJAY:
>> DAVID MALAN: Ajay.
David.
Mă bucur să te cunosc.
În regulă.
Deci, avem în spatele acestor șase usi electronic pe screen--
sau, mai degrabă, șapte uși pe screen-- o grămadă de numere.
Și v-am spus nimic în acord advance--?
AJAY: Nimic în avans.
DAVID MALAN: Tot ce vreau să faci acum este de a găsi pentru mine, și pentru noi,
într-adevăr, numărul 50, un pas la un moment dat.
>> AJAY: Numărul 50?
>> DAVID MALAN: numărul 50.
Și tu poți descoperi ce-i în spatele fiecare dintre aceste uși
pur și simplu prin atingerea cu un deget.
La naiba. [Râsete]
>> [Aplauze]
>> Foarte bine făcut.
OK.
Avem un cadou minunat premiu pentru tine aici.
Alege de filme noi discutat săptămâna trecută.
>> AJAY: Oh, omule.
Oh, n-am mai văzut Spaceballs.
>> DAVID MALAN: Spaceballs.
În regulă.
Deci, stai doar o clipă.
Cum-- să facă acest o moment-- docil
cum ai merge cu privire la găsi numărul 50?
AJAY: Am ales la întâmplare.
DAVID MALAN: Deci ai ales aleatoriu și a avut noroc.
AJAY: Da.
DAVID MALAN: OK.
Excelent.
Deci, acum, nu ai avut ajuns norocos, ce altceva
s-ar fi întâmplat în spatele acestor uși?
Deci, dacă am merge mai departe și dezvălui aceste numere de aici,
sunt în realitate, în ordine aleatorie.
Și cel mai bun ai putea avea făcut, sincer, este de, în cele din urmă,
în cel mai rău caz, verificarea-le pe toate.
Deci ai super-norocos, care nu este ceea ce am numi un algoritm.
Da, felicitări.
Dar acum let's-- umor mă, dacă ai putea.
Să mergem la această filă aici.
Și aici sunt numerele în mod clar ceea ce pare a fi o ordine aleatoare,
și ei au fost.
Dar acum, dacă în loc să mă cerere că în spatele acestor uși
sunt numere care sunt sortate.
Scopul este acum de asemenea, ne găsi numărul 50.
Dar o fac algoritmic, și spune-ne cum te duci despre asta.
Și dacă vi se pare, tu ține filmul.
Nu se pare, l-ai da înapoi.
AJAY: Deci, am de gând să verific capetele în primul rând, pentru a determina dacă este--
[Râsete și aplauze]
DAVID MALAN: Poftim.
Să aruncăm o privire la un de predecesorii lui Ajay,
Sean, care nu a fost destul de norocos ca.
OK, deci sarcina dumneavoastră aici, Sean, este următoarea.
Am ascuns în spatele acestor usi numărul șapte,
dar ascuns în unele dintre aceste uși precum și alte numere non-negative.
Și obiectivul tău este să se gândească la acest lucru rândul de sus de numere ca doar un tablou.
Suntem doar o secvență de piese de hârtie cu numere din spatele lor.
Iar obiectivul dvs. este, folosind doar partea de sus matrice aici, găsește-mi numărul șapte.
Și noi sunt apoi merge la critica cum te duci despre a face aceasta.
Găsiți-ne la numărul șapte, vă rog.
Nu
5, 19, 13.
Nu este o întrebare capcană.
1.
În acest moment scorul dvs. nu este foarte bun, asa ca s-ar putea, de asemenea continua.
3.
Du-te mai departe.
Sincer, nu pot să nu mă întreb la ce te gândești chiar.
>> SEAN: eu pot lua de la doar rândul de sus.
DAVID MALAN: Doar rândul de sus.
Deci, ai trei din stânga.
Deci, mă găsească 7.
>> [Audienta strigăte SUGESTII]
Deci, atât din acestea au fost uimitoare pentru diferite motive.
Deci, aceasta este în cazul în care ne-am rămas în urmă o clipă,
și a perspectivei cheie aici a fost aceste uși a avut numere
în spatele lor, care au fost sortate, idealul Takeaway pentru care este că ai putea face
schimbă în mai bine în acest al doilea exemplu--
și, într-adevăr, că a fost a lui Sean Prima încercare de numere aleatoare
la fel de devreme--, dar cât mai curând ca aceste numere sunt sortate,
la fel ca cartea de telefon, ceea ce se poate face în mod evident?
Sau cum poți să impulsioneze această cunoaștere?
Da.
>> Audiența: Du-te la jumătatea drumului [neauzit].
DAVID MALAN: Da.
Exact.
Deci instinctul inițial Ajay a fost pentru a verifica capete, așa cum îmi amintesc,
și apoi ne-am cam terminat exemplul repede.
Dar dacă am început să facem acest lucru mai mult metodic de-a lungul acestor linii,
dar începând, probabil, în de mijloc, deoarece acestea sunt clasificate în funcție,
de îndată ce ne dezvăluie număr de 16, de aceea ne-am stiu--
și să facem exact asta-- noi Prin urmare, știm că 50 de ani, în cazul de astăzi,
a ajuns să fie la dreapta.
Deci, la fel ca in saptamana zero, atunci când am rupt cartea de telefon în jumătate
și a aruncat jumătate din problemă departe, aceeași idee aici.
Putem arunca această jumătate a problemei departe.
Și, probabil, ceea ce s-ar putea face algoritmic,
o dată ce știi că 50 trebuie să fie la dreapta, în cazul în care e oriunde,
este să încercați acolo, în mijlocul din ușile rămase.
Desigur, este mai mare de 50 decât 42, astfel încât să putem
arunca acest rămasă sfert a problemei departe,
și, în cele din urmă, identificarea ceva de genul 50.
Dar, la fel ca și în cazul carte de telefon, aceste numere
s-au dat la noi deja în Pentru sortate, care ne lasă
cu întrebarea, cum a face tu a lua lucrurile în ordine sortată?
Și, sincer, la ce costuri?
Este un lucru să fie înmânat cartea de telefon
și apoi impresiona prietenii tăi de găsirea un număr de telefon într-adevăr rapid, corect?
Ruperea 32 de pagini pentru a găsi un persoană din 4 miliarde de pagini,
am spus a fost un exemplu extrem.
Dar cât de mult timp a fost nevoie Verizon pentru a sorta cartea de telefon?
Cât timp a ne lua a sorta aceste șapte numere?
Aceasta este o întrebare pe care ne-am până acum complet ignorate.
>> Așa că haideți să răspundă la această întrebare acum.
Și suntem cu toții din filmele acum, dar avem niste bile de stres.
În cazul în care, să zicem, opt voluntari nu m-ar deranja cu noi aici?
Să mergem mai departe și de a face, cum despre voi patru, trei dintre voi aici?
Ia niște fețe noi.
Și voi patru acolo?
Și acum-- să nu de părtinire aici-- și număr de opt pe aici, pe la sfârșitul anului.
Hai sus.
În regulă.
Deci, ce avem aici pentru fiecare dintre voi este un număr.
Dacă doriți să mergeți înainte, să ia acest număr.
Care e numele tău?
>> ARTIE: Artie.
>> DAVID MALAN: Artie, bine.
Tu ești numărul 1.
>> AMIN: Amin.
DAVID MALAN: Amin.
David.
Tu ești numărul 2.
Și dă-i drumul, cum am mână tu foile de hârtie,
linia-vă în fața muzicii se află în aceeași ordine ca acolo sus.
>> ANDY: Bună, Andy.
>> DAVID MALAN: Andy, mă bucur să te văd.
Numărul 3.
>> JACOB: Jacob.
>> DAVID MALAN: Jacob, numărul 4.
Bine ai venit la bord.
GRANT: Grant.
DAVID MALAN: Grant.
Numărul 5.
>> Alanna: Alanna.
>> DAVID MALAN: Alanna, numărul 6.
>> Frances: Frances.
DAVID MALAN: Frances, numărul 7.
Și?
>> RACHEL: Rachel.
>> DAVID MALAN: Rachel, numărul 8.
În regulă.
Du-te și du-te în această ordine.
Lasă-mă să pun un rămasă muzica sta in loc.
În cazul în care aveți nevoie de un stand?
OK.
Du-te și pune doar numerele în cazul în care publicul le poate vedea pe,
muzica stea cu fața spre exterior.
Și sperăm, primul nostru cec bun-simț aici-- 4, 2, 6.
Oh-oh.
Așteaptă un minut.
Nu avem un 8.
Am nevoie de a vă evacua din exemplul cumva.
Nu
Nu, e în regulă.
Să vedem.
Putem face acest lucru.
Stand de.
Acolo mergem.
Corect.
În regulă.
Deci, acum avem 8, 1, 3 7, 5.
OK.
Excelent.
>> Deci, intrebarea la îndemână este, la ce costuri, și prin ce metodă,
putem sorta de fapt, aceste numere aici astfel încât să putem tip de muncă înapoi,
în cele din urmă, și decide-- este într-adevăr impresionant, este într-adevăr eficient,
pe care le pot împărți și cuceri o carte de telefon?
Este într-adevăr eficient, care Eu pot diviza și cuceri
aceste piese digitale de hârtie pe bord,
dacă poate o să ne coste o avere în timp sau cicluri de energie sau CPU
pentru a obține de fapt, datele noastre în unele ordine sortate?
Deci, haideți să cerem această întrebare.
>> Deci primul rând, aceste numere sunt în ordine aleatorie destul de mult,
și am de gând să propună unul algoritm, sau un proces
prin care putem rezolva acesti oameni.
Am de gând să se apropie acest destul de naiv.
Și am de gând să recunoască că e un fel de mult pentru mine
să-și încheie în jurul mintea mea Date întregul set dintr-o dată.
Dar știi ce?
Am de gând să facă ceva remedieri marginale foarte simple.
4 și 2 sunt în ordine, dacă este Scopul este de a merge de la 1 la până la 8.
Deci, stii ce?
Am de gând să aveți baieti schimba, dacă veți comuta
punct de vedere fizic poziții și piesele tale de hârtie.
Acum 4 și 6, acestea sunt în ordine.
Am de gând să plece celor fi.
6 și 8, acestea sunt în ordine.
Pleca le fie.
8 și1, din ordin.
Dacă voi doi nu ar deranja schimbarea.
Acum 8 și 3, în cazul în care voi putea schimba.
8 și 7, în cazul în care voi putea schimba.
Și 8 și 5, în cazul în care voi putea schimba.
>> Acum, am am făcut?
Nu, evident că nu.
Dar am făcut situație mai bună, nu?
Care era numele tău, numărul 8?
>> RACHEL: Rachel.
DAVID MALAN: Deci, Rachel are barbotează în mod eficient până destul de departe,
tot drumul până la sfârșitul anului matrice mea de numere aici.
Și astfel încât problema este un fel de rezolvat.
Acum, în mod clar, 2 mai trebuie încă muta un pic, și 4 și 6 și 1.
Dar mi se pare a fi ajuns un mai aproape de soluție.
Deci, să se aplice același euristică naiv din nou.
2 și 4, OK.
4 și 6, OK.
6 și 1, mm-mm.
Să swap.
6 și 3, mm-mm.
Să swap.
6 și 7 este OK.
7 și 5, nope.
Să swap.
Iar acum 7 și 8.
Și ce e numele tău?
Frances: Frances.
DAVID MALAN: Frances.
Deci, acum, Frances este chiar și o mai bună poziție, pentru că acum 7 și 8
sunt bule corect până la partea de sus.
Deci, 2 și 4, OK.
4 și 1, de swap Să.
4 și 3, de swap Să.
4 și 6, tu ești OK.
6 și 5, de swap Să.
Și acum tipii ăia sunt buni.
Suntem aproape acolo.
2 și 1, în ordine, așa schimba.
Și acum să-mi fac un control bun-simț.
2 și 3, 3 și 4, 4 și 5, 5 și 6, 6 și 7, 8.
OK, deci am terminat.
>> Dar cu ce preț am făcut sorta aceste numere de aici?
Ei bine, câți pași am făcut potențial ia atunci când sortarea acesti oameni?
Ei bine, ne vom întoarce la această întrebare.
Dar, sincer, dacă ai un pic plictisit, asta e
fel de revelatoare în care acest lucru nu a fost poate cel mai eficient algoritm.
Și într-adevăr, sincer, eu transpir cu atât mai mers înainte și înapoi.
Asta nu se simt deosebit de eficient.
Deci, haideți să încercăm altceva.
Dacă voi putea reseta vă la aceste opt valori.
Bună treabă.
>> Să aruncăm o privire digital, pentru doar o clipă înainte de a încerca altceva,
la ceea ce sa întâmplat.
Până aici, tu esti pe cale de a vedea o vizualizare a acestor opt oameni
prin albastru și roșu baruri reprezintă numere.
Mai înalt bar, cu atât mai mare numărul.
Mai scurtă bara, mai mic numărul.
Și ce ai de gând pentru a vedea este în ordine aleatorie mai mult de opt.
Vei vedea aceste bare obtinerea clasificate în funcție de același algoritm,
sau un set de instrucțiuni, care vom numi de acum înainte, cu bule de sortare.
Deci observați, fiecare al doilea sau cam asa ceva, două bare sunt iluminate în roșu,
sunt comparate de către calculator.
Și apoi, dacă bara de mare și bar mic sunt în ordine,
acestea sunt schimbate pentru mine.
>> Acum, acest lucru este incredibil de plictisitor pentru a viziona acest lucru, cu siguranță,
pentru foarte mult timp, dar observați takeaway-- baruri mari se deplasează la dreapta,
mici baruri se deplasează la stânga.
Să abandona acest proces și grăbi
a fi mult mai rapid, astfel încât să putem a obține un sentiment la nivel înalt a ceea ce,
într-adevăr, cu bule de sortare este de a face.
Într-adevăr, este barbotare până la partea dreapta a listei,
sau matrice, barele mai mari.
Și invers, micile barele sunt barbotare se extindă în jos la stânga,
deși într-un ritm mai rapid decât am făcut-o deja.
Deci, mai greu pentru a vedea cu oamenii, dar vizual asta e într-adevăr ceea ce
se întâmpla.
>> Dar să încercăm o fundamental diferit de abordare acum.
Să încercăm un alt algoritm prin care putem avea
băieți începe în aceste originală poziții, care a fost această ordine aici.
Și să mergem mai departe acum.
Și am de gând să fac ceva chiar simplu, nu?
În retrospectivă, schimbarea din nou pe perechi și din nou, aproape un pic inteligent.
Să facem lucruri chiar mai naiv, unde dacă vreau să sortați acești oameni,
permiteți-mi să continui să cauți pentru cel mai mic element.
Deci, chiar acum, 4 este cel mai mic număr l-am văzut.
Am de gând să-mi amintesc asta.
Nu, 2 este mai bine, și amintiți-vă că.
1 este chiar mai mic.
3, 7, 5.
OK.
Unu care e numele tău?
>> ARTIE: Artie.
>> DAVID MALAN: Artie.
Deci, Artie, dă-i drumul.
Am de gând să vă scoate din linia.
Dacă ai putea să te întorci aici.
Și am nevoie pentru a face loc pentru el.
Avem un punct de decizie aici.
Cum am putea face loc pentru Artie aici la începutul unde numărul 1 parte?
>> Audiența: Shift.
>> DAVID MALAN: OK, ne-am ar putea schimba toată lumea.
Dar propune o optimizare.
Se simte un pic enervant pentru mine de a cere patru persoane
pentru a muta tot drumul în jos.
Ce altceva puteam face?
>> Audiența: Schimba-le.
>> DAVID MALAN: Schimba-le.
Și ce e numele tău?
>> JACOB: Jacob.
DAVID MALAN: Jacob, mutați.
Mult mai eficient doar pentru a avea Locuri de swap Jacob cu Artie,
spre deosebire de forțând Toate aceste patru oameni,
Vă mulțumesc foarte mult, la poziția lor corectă.
Ce este frumos despre Artie acum, el este în poziția corectă.
Să facem acest lucru din nou.
2, care este cel mai mic număr l-am văzut.
3, 7, 5.
OK.
2 este cu siguranta cel mai mic.
Nu trebuie să faci nici o lucrare.
Să o facem din nou.
6.
Cel mai mic?
8.
Nu.
4?
Ooh.
Permiteți-mi să amintesc 4.
3.
Permiteți-mi să amintesc 3.
7, 5.
Cel mai mic număr am vazute pe aceasta trecere este de 3.
Dacă ai fi venit pe afară.
În cazul în care avem de gând să te pun?
Și cum te cheamă?
>> Alanna: Alanna.
>> DAVID MALAN: Alanna, suntem Va trebui să te evacueze.
Dar asta este mult mai eficient, pentru a schimba doar doi oameni,
decât de a avea mai multe persoane se eschiva de fapt peste.
Acum, haideți să facem asta din nou.
Am de gând pentru a selecta 4, deci hai afară.
Și cine o să se mute?
Numărul 8, desigur.
Dacă aș găsi acum numărul 5, ieși afară.
Numărul 8 va fi evacuat din nou.
Acum voi să găsească numărul 6 în loc.
7 în loc.
8 în loc.
>> Ceea ce tocmai am făcut acum este ceva numit selecție de sortare,
și dacă vom vizualiza acest lucru, este O să se simtă un pic diferit.
Să mergem mai departe și din acest Meniul aici, acest visualization--
hai să schimbăm acest sa-- haide, Firefox.
Hai să schimbăm acest lucru la fel de selecție.
Și să-l accelereze ca înainte, și începe vizualizarea acum.
Și acest algoritm are un simt diferit la ea.
La fiecare iterație, sincer, e chiar mai simplu.
Eu doar selectând cel mai mic element.
Acum, sincer, am un pic de noroc, care timp, prin faptul că sortate super-rapid.
Elementele au fost aleator.
Nu este, cum vom în cele din urmă a se vedea, în mod fundamental mai repede.
Dar sa vedem un al treilea și ultimul se apropie aici de la ceea ce se întâmplă.
Așa că haideți să mergem mai departe și să resetați baieti pentru ultima oară să fie în această ordine aici.
>> Și acum, am de gând să fi un pic mai inteligent,
doar pentru a completa algoritmii noștri.
Am de gând să fac asta.
Am de gând să nu meargă înainte și înapoi atât de mult.
Sincer, m-am săturat de Toate acestea drumuiri.
Mă duc să iau ceea ce am dat la începutul listei,
și am de gând să rezolve că atunci și acolo.
Deci, iată-ne aici.
Numărul 4.
Am de gând să introduceți numărul 4 într-o listă sortată.
Efectuat.
Eu pretind acum, și doar pentru a face acest lucru mai mult clar, această parte din lista mea este sortat.
Este un fel de cerere stupid, dar într-adevăr 4 sunt sortate într-o listă de dimensiune unu.
Acum, am de gând să ia pe numărul 2.
Numărul 2 Eu acum merg la introduce în locul potrivit.
Deci, în cazul în care nu fac parte 2?
Evident, aici.
Deci, mergeți mai departe și pentru a muta înapoi, dacă ai putea.
Și de ce nu ia pur și simplu nu voi muzica stă cu tine de data asta.
Și să introduceți cu forța în prima parte a listei.
Deci, un pic mai mult de lucru.
A trebuit să se mute în jurul lui Iacov, și care e numele tău?
>> AMIN: Amin.
>> DAVID MALAN: Amin.
Dar cel puțin eu nu am mers înainte și înapoi.
Iau doar lucrurile cum merg.
Eu doar le introduce în locul potrivit.
6, aceasta este, de fapt destul de ușor.
Să te introduce acolo, dacă doar a vrut să se mute peste puțin.
Numărul 8, de asemenea, destul de ușor.
Chiar acolo.
La naiba.
Numărul 1 nu putem doar schimba cu Amin aici,
pentru că se întâmplă să distrugeți comanda.
Așa că trebuie să fie un pic mai inteligent.
Deci, Artie, dacă ai putea copii de rezervă pentru o clipă.
Să mergem mai departe și să schimbe acum, spre deosebire de algoritmi noastre anterioare,
pentru a face loc pentru Artie chiar aici, la început.
Deci, la sfârșitul zilei, eu sunt un fel de a face ceea ce am vrut, pentru a evita înainte.
Și astfel algoritmul meu este un fel a inversat, intelectual,
de la ceea ce a fost inițial.
Eu doar fac deplasarea într-un alt punct.
Acum sunt la 3.
Oh, la naiba.
Trebuie să facem din nou mai mult de lucru.
Așa că hai să te împinge afară.
Să mergem 8, 6, 4-- oh Oh-- și 3 este de gând să merg acolo.
Deci cel puțin ușoare economii de data asta.
7, nu prea mult de lucru de făcut.
Deci, dacă doriți să pop înapoi, să vă introduceți.
Și, în fine, 5, dacă doresc să pop înapoi, ne-am
Trebuie să-ți schimbe, tu, te, până când cinci este în loc.
>> Deci, acum, pentru a vedea acest lucru la o nivel înalt grafic,
hai sa facem acest algoritm vizualizare un timp suplimentar.
Deci aceasta vom numi inserare fel.
Vom alerga la fel de rapid, și ea începe aici.
Și, de asemenea, are un simt diferit.
Este un fel de a obține o mai bună și mai bine, dar niciodată nu e perfect
până când am merge în și neted în aceste lacune.
Pentru că, din nou, eu sunt doar a lua ceea ce Am fost dat de la stânga la dreapta.
Deci, eu nu am primit atât de norocos că totul a fost perfect.
De aceea am avut aceste mici mispositions că am fix în timp.
>> Așa că toate aceste algoritmi par să rula la ușor diferite ritmuri.
De fapt, ceea ce ați spune că este cel mai bun sau cel mai rapid până acum?
Bubble sort, primul?
Un fel de selecție, cea de a doua?
Un fel de inserție, a treia?
Am auzit că unele tipuri de selecție.
Alte gânduri?
>> Deci, se dovedește că toate aceste algoritmi
sunt fundamental la fel de eficient ca fiecare other-- sau, dimpotrivă, la fel cum
ineficient ca fiecare parte, pentru că putem face în mod fundamental
mai bine decât toate trei acestor algoritmi.
Și asta e un pic de o minciună albă, de asemenea.
cand spun ca eficient sau ca ineficiente,
că este, cel puțin pentru Valorile super-mari de n.
Când ne-am doar opt oameni aici, sau poate 50 sau cam asa ceva baruri de pe ecran,
veți observa absolut diferențe între aceste trei algoritmi.
Dar, așa cum n, numărul de persoane, sau numărul de numere,
sau numărul de persoane în telefon carte, sau numărul de pagini web
în baza de date Google devine mai mare și mai mare,
vom vedea că toate trei din acestea algoritmi sunt de fapt destul de slab.
Și ce putem face în mod fundamental mai mult decât atât.
>> Să aruncăm o privire, în cele din urmă, la ceea ce s-ar putea acești algoritmi
suna ca în context de alte câteva
precum prin intermediul acestui vizualizare aici
care ne va introduce în un număr de algoritmi.
Să mergem mai departe și să-l felicit participanții noștri de aici, toate de care
se sortate foarte bine.
Dacă doriți să luați un cadou de despărțire.
Puteți păstra numerele de asemenea.
Și ceea ce veți vedea, sau, mai degrabă auzi, acum,
este că așa cum ne-am pus sunete la fiecare dintre aceste bare
și se asociază cu software-ul, frecvență diferită de sunet,
puteți încheia mintea mai audioly ta jurul a ceea ce fiecare dintre aceste lucruri
arata.
Prima dintre care este insertie fel
>> [TONE]
>> Acest lucru este cu bule fel.
>> [TONE]
>> Un fel de selecție.
>> [TONE]
>> Ceva numit îmbinare fel.
>> [TONE]
>> Fel Gnome.
>> [TONE]
>> Asta e pentru CS50.
Ne vedem miercuri.
>> Narator: Și acum, "Deep Gânduri, "de Daven Farnham.
De ce este aceasta o pentru buclă?
De ce nu face mai bine?
Mi-ar face o buclă cinci.
>> [Râsete]