DAVID Malan: Në rregull. Pra, kjo është CS50, dhe kjo është tani fillimi i javës së tre. Pra, deri tani, ne kemi qenë i shkruar programe në C se duket pak diçka si kjo këtu. Pra, ne kemi marrë një çift të mprehtë përfshin në krye. Ne kemi marrë int, kryesor, i pavlefshëm, dhe pastaj diçka për të bërë në mes, disa pak e kodit brenda e atë funksion. Por kryesore ka qenë fakti se ne kemi qenë duke thënë pavlefshme këtu. Pra pavlefshme, të gjithë këtë kohë, specifikon se ky program, kur të drejtuar, mund të drejtohet vetëm përmes emrit të saj. Ju nuk mund të shtypni ndonjë fjalë të tjera ose numra pas emrin e programit kur drejtimin e tij. Kështu, për shembull, nëse programi ishin hartuar në një skedar të quajtur hello, ju mund të bëni ./hello, por kjo është ajo. 

Vetmja mënyrë që ju mund të të sigurojë të dhëna për këtë program është duke e quajtur një funksion. Për shembull, çfarë funksioni kemi qenë duke përdorur deri tani për të marrë të dhëna nga përdoruesit? 

Audienca: Get string. DAVID Malan: Për të marrë varg, ose merrni int, apo ju kam parë të tjerët, edhe në qoftë se ju nuk e kanë përdorur ato ende, si të marrë kohë të gjatë, të gjatë dhe si. Por mendoj se ne në të vërtetë duan të fillojnë shkrim programet që janë pak më të dhunti të shumta, dhe, sinqerisht, pak më shumë si komandat që ju keni qenë duke marrë, me shpresë, pak i mësuar me. Ashtu si hapësirë ​​cd Dropbox. Kjo, natyrisht, ndryshimet Lista tuaj, duke supozuar ju jeni në shtëpi John Harvardit directory, në dosjen tuaj Dropbox. Ndërkohë, një komandë si kjo krijon një directory të re të quajtur pset2, tashmë si ju mund të keni ose shpejt për problemin do të vendosur dy. Bëni Përshëndetje, sigurisht, është një komandë që ndërton një program të quajtur përshëndetje nga një skedar të quajtur përshëndetje dot c. Dhe në secilin prej këtyre raste, tani, ne kemi pasur sigurojnë një argument në të ashtuquajturat command line, keq të shpejtë, në mënyrë që të bëjë e di se çfarë për të ndërtuar, dhe kështu se mkdir di se çfarë dosje për të krijuar, dhe kështu që cd di ku ju doni të shkoni. Por deri tani, do të vazhdojmë duke thënë: që kryesor, funksioni juaj i parazgjedhur, ka një shprehje të pavlefshëm brenda këtyre kllapa, që do të thotë se ajo nuk mund të marrë argumente. 

Pra duke filluar nga sot, ajo që ne jemi duke shkuar për të bërë po, ne jemi duke shkuar për të filluar mbështetjen gjëra si kjo edhe. Në fakt, në këtë rast, të cilat ju mos zakonisht me dorë të tipit, Bëni ka bërë këtë për ne, nuk janë një por një, dy, tre shtesë vargjet pas programi të quajtur tingëllimë. Deri sa nuk kemi arritur këtë? 

E pra, duke filluar nga sot, në rastet kur ne duam për të siguruar të dhëna me anë të ashtuquajtura command line, ne jemi duke shkuar për të filluar duke shtuar këtu atë që në yellow-- zëvendësuar boshllëkun me int argc presje string argv kllapa hapur kllapa ngushtë. Tani kjo është interesante për disa arsye. Një, ajo do të na shkruani Programet që janë pak më dinamike. Por, më shumë imponuese, ajo do të hapë tani një bisedë si për çfarë vargjeve mund të vërtetë të përdoren, për atë që një varg me të vërtetë është nën kapuç, deri javën e ardhshme, kur ne fillojmë zhytjeje në edhe më thellë se si makinë është duke e bërë gjithë këtë punë sende. Por tani për tani, le të nxjerrë, ndoshta, një foto. 

Kur ju shkruani një program me kryesore deklaruar në këtë mënyrë, e tillë që kryesor merr dy argumente, një int and-- çfarë lloji të dhënave është argumenti i dytë? 

Audienca: Array. DAVID Malan: Array. Pra, duket në shikim të parë si ajo e një string, por njoftim kllapa katrore. Kujtojnë herë të fundit kemi futur nocioni i një grup. Dhe vargjeve përdorin kllapa katrore në disa kontekste. Ju mund të përdorni sheshin kllapa për të shkuar në një grup dhe për të marrë një element të veçantë, si kllapa 0 ose 1 ose kllapa kllapa 2. Por ne pamë, nëse shkurtimisht, javën e kaluar se edhe ju përdorin këto kllapa katrore të deklarojnë madhësinë e një grup, në qoftë se ju e dini që më parë se sa Ints ose sa vargjet ose çdo gjë që në të vërtetë dëshironi. Pra, rezulton se ka një kontekst të tretë këtu që nuk ka numër brenda nga kllapa katrore. Kur ju të specifikojë, pasi unë kam këtu, Emri i diçka si argv, e cila është vetëm një mënyrë e sofistikuar për të duke thënë vektor argument, i cili është një tjetër mënyrë e sofistikuar për të duke thënë se një grup të argumenteve, kllapa e hapur kllapa ngushtë vetëm do të thotë se ju nuk e bëni domosdoshmërisht dini që më parë se sa i madh grup do të jetë, por ju e dini se do të jetë një grup. Pra, nëse ju nuk e dini numër nuk e vënë atë në atje, për parantezë parantezë të hapur të ngushtë do të thotë se argv nuk është një varg, por një grup i strings. Pra sintaksore, në qoftë se ju mendoj përsëri javën e kaluar, kjo është shumë e ngjashme me thënë diçka si int moshave kllapa e hapur, dhe pastaj diçka pas kësaj. Pra, çfarë e bën këtë të duket si? Le të vërtetë të nxjerrë një foto. Pra, kur ju të drejtuar këtë program me Qendrori ka dy argumente të përcaktuara brenda nga ato kllapa, ju në thelb kanë të paktën dy chunks e kujtesës dorëzuar për ju nën kapuç. Një, si unë do të tërheq si ky drejtkëndësh, do të quhet argc. Dhe vetëm si një radhitje të shpejtë, çfarë është lloji i të dhënave argc? Pra, kjo është një int. Pra, një numër që po ndodh për të shkuar në kthen argc-- se qëndron për numërimin e argumentit. Ndërkohë, unë kam tërhequr argv si një grup. Dhe unë vërtetë nuk e di sa kohë do të jetë, kështu që për qëllime të sotme dot dot dot. Ajo mund të marrë nga ndonjë gjatësi. Por unë e kam foto këtu të paktën katër drejtkëndëshe. Pra argv një copë e kujtesës asaj dyqane string string string dot dot dot, dhe argc është vetëm një copë e kujtesës për një numër të plotë. 

Deri tani, le të jetë pak më të saktë. Nëse, kur unë kam strings në këtë grup, i quajtur argv, unë dua të të marrë me ta individualisht, ashtu si javën e kaluar, ne jemi duke shkuar për të përdorur simbol si argv kllapa 0 për të marrë gjëja e parë që një grup. Argv kllapa 1 për të marrë Gjëja e dytë, e kështu me radhë. Kyçe këtu qenit ne jemi ende 0 indexed-- ne jemi ende duke numëruar nga 0. Pra, tani le të vërtetë vënë diçka në këtë. Nëse unë do të hartojë një program të quajtur përshëndetje nga një skedar të quajtur përshëndetje dot c, dhe pastaj unë të drejtuar këtë program me dot çaj hello, ajo që e bën kompjuterin, laptop tim tim, duken si nën kapuç Momenti I drejtuar dot pakësojë përshëndetje dhe hit Enter? E pra, kjo është ndoshta ajo që ne mund të përshkruajnë si përmbajtjen e kompjuterit tuaj kujtesës, ose RAM-- Random Access Memory. Me fjalë të tjera, kompjuter, disi për ju magjike, vë numrin 1 në argc, AKA argcount, dhe kjo e vë fjalë për fjalë të vargut ./hello në argv kllapa 0. Unë nuk kam asnjë ide, sinqerisht, çfarë është në argv grupim 1 ose 2 ose 3, sepse në qoftë se përdoruesi nuk ka shtypur asgjë përveç ./hello, ne do të supozojmë se këto janë vlerat më të mundshme e plehrave, mënyrë që të flasin. Këto chunks e kujtesës ekzistojnë, por kjo nuk varet nga ne të shohin me ta, sepse argcount është vetëm një. 

Tani, ndërkohë, në qoftë se unë shkruaj drejtuar një program, cd, e cila është më e duhur një komandë, në ndriçon hapësirën prompt-- tuaj cd Dropbox-- kur kam drejtuar që, në mënyrë efektive, kur programi cd është drejtuar, argc, brenda kujtesën e kompjuterit tim, është për më më të shkurtër e dytë numri 2. Dhe pastaj argv kllapa o ka cd, argv kllapa 1 ka Dropbox, dhe pastaj natyrisht komanda përfundon, kështu që të gjithë këtë kujtesës në thelb shkon larg dhe është përdorur për diçka tjetër. Dhe kjo është arsyeja pse unë them vetëm një ndarje të dytë. 

Ndërkohë, në qoftë se ne bëjmë mkdir pset2, foto duket pothuajse i njëjtë, por me vargjet e ndryshme brenda argv. Nëse unë bëj tingëllim dash përshëndetje përshëndetje dot c, të njëjtën ide. Më shumë gjëra është e mbushur në për argv, dhe argc, natyrisht, është 4. Pra, me fjalë të tjera, edhe pse këtë koleksion mund të jetë dot dot dot, e disa gjatësi variabile, si të thuash, ju gjithmonë e di se ku në fund të tij është, për shkak argc do të ju tregojnë se në atë pikë që ju keni për të ndaluar duke kërkuar në elemente në argv. Ju mund të shikoni vetëm në katër në total, në këtë rast. 

Pra, le të marrë tani një vështrim në, ndoshta, një program i thjeshtë. Një që vetëm të thotë përshëndetje për dikë si Zamyla. Kështu që unë pretendojnë që unë jam duke shkuar për të shkruar një program në vetëm një moment me anë të cilën unë mund të bëj ./hello hapësirë ​​Zamyla, dhe pastaj unë dua Programi im për të shtypur nga diçka super-thjeshtë si "Hello, Zamyla." Tani në të kaluarën ne kemi përdorur getstring. Pra, në të kaluarën, edhe në qoftë se jeni të ri të programimit, shanset janë që ju mund të rrëmbej një program që përdor getstring dhe pastaj përdor printf për të thënë hi për Zamyla. Por le të mos e përdorin getstring këtë kohë. Më lejoni në vend të shkuar në Appliant dhe përfshijnë standarde unë o dot h. Më lejoni gjithashtu të përfshijë CS50 dot h. Tani int kryesore, dhe tani unë jam i nuk do të bëni pavlefshme sot. Në vend të kësaj, unë jam duke shkuar për të bërë int argc string argv kllapa hapur parantezë të ngushtë, nuk specifikon një numër. Dhe tani këtu është e mia të ashtu-quajtur për të bërë. Ajo që unë jam duke shkuar për të bërë tani është, unë jam duke shkuar për të bërë një grimë e një hap të besimit, Unë jam duke shkuar për të supozojmë se e përdoruesit do të përdorni këtë program të saktë, dhe unë jam thjesht duke shkuar për të bëjnë printf hello,% sn. Pra, asgjë të re atje. Por unë dua të tani të vënë çdo gjë fjala Llojet përdorues pas emrin e programit. Pra, në qoftë se bëj ./hello hapësirë ​​Zamyla, unë doni të disi programuar qasje citoj siç janë quajtur "Zamyla." kështu që unë mund të shkoni në vektor tim argumenti, array ime e vargjeve, dhe nëse komanda, përsëri, ishte ./hello hapësirë ​​Zamyla, atë numër nuk dua për të vënë në argv këtu? Audienca: 1. DAVID Malan: 1, sepse kllapa 0 rezulton do të jetë Emri i programit, siç e pamë. Pra kllapa 1 është fjala e parë që unë, përdoruesi, kanë shtypur. Unë jam duke shkuar për të shkuar përpara dhe për të shpëtuar këtë. Unë jam duke shkuar për të shkuar në dosjen time ku unë kam vendosur këtë fotografi. Unë jam duke shkuar për të bërë të bërë përshëndetje 3. OK comp io. ./hello Zamyla Enter. Çfarë të bëj gabim? Unë u kap në befasi veten për vetëm një moment atje. Çfarë të bëj gabim? 

Audienca: Emri. 

DAVID Malan: Dosja e quhet në të vërtetë hello3.c. Dhe unë e bëri që vetëm për qëndrueshmëri, sepse ne kemi kishin hello.c së në kaluara në kodin online. Pra, le të rregulluar këtë ./hello kllapa dash 3 Zamyla. Shkruani. Dhe tani ne kemi hello, Zamyla. Ndërkohë, unë mund të ndryshojë këtë për të të jetë Rob, apo me të vërtetë ndonjë fjalë tjetër. 

Por le të konsiderojmë një rast qoshe. Çfarë mund të prisni ju do të ndodhë nëse Unë nuk e shkruani emrin e askujt në të gjitha? 

Audienca: Gabim. 

DAVID Malan: Një gabim e disa lloj, ndoshta. Le të shohim. Shkruani. Null. Pra printf është në të vërtetë duke u një mbrojtës pak prej nesh këtu, dhe fjalë për fjalë shtypjen Paren hapura null, por gjërat edhe më keq mund të ndodhë. Dhe vetëm për të demonstruar diçka që ju absolutisht nuk duhet të bëjë, le të shkojë në këtu dhe të fillojnë poking rreth. E drejta? Në qoftë se unë e di se në foto memorie është në thelb kjo, argv kllapa 1 ka Zamyla, argv kllapa 0 ka ./hello, apo ./hello-3. Ajo që është në kllapa 2? Kështu që unë mund të përgjigjem se pyetje veten time, apo jo? Unë vetëm mund të ndryshojë në 1 me një 2. Unë tani mund të recompile përshëndetje 3, ./hello3 Le të zoom në dhe hit Enter. Uh. Asnjë shenjë kuotë. Interesante. Pra, kjo është lloj i ftohtë, për të parë se çfarë tjetër është këtu. 

Pra, çfarë tjetër është brenda laptop tim? Le të shpëtuar atë me kllapa 3. Bëni hello3, ./hello-3. Kurioz. Dhe tani le të marrë me të vërtetë bold-- 50. Pra, kjo është me të vërtetë zhytje të thellë në kujtesë të kompjuterit tim. 50 indekseve në. Pra, ti përshëndetje 3 ./hello-3. Kurioz. Në rregull, tani unë jam vetëm do të merrni pamatur. Le të shkojnë në 5,000. Të gjithë të drejtë. Pra më lejoni të përpiluar. Bëni hello3, ./hello-3. OK. Tani disa prej jush, nuk mund të jetë një llambë të lehta plaste. Sa e keni parë këtë mesazh para? OK. Pra, pse? 

Mosmarrëveshje are-- dhe nuk ka ndryshe gjëra që mund të shkaktojnë këtë, dhe në mënyrë të qartë që ju jeni në të mirë company-- ne kemi në mënyrë të qartë shkaktuar atë që quhet një defekt segmentimit. Dhe histori të gjatë të shkurtër për sot, unë kanë prekur një segment të kujtesës se unë nuk duhet të ketë. Kur një segment do të thotë vetëm një copë të e kujtesës që unë nuk duhet të ketë. Tani kompjuteri garanton se në qoftë se unë drejtuar ./helloZamyla që unë mund të prek argv jetë kllapa 0 dhe argv kllapa 1. Por argc është vlera 2, që do të thotë unë jam vetëm allowed-- kjo është lloj i nderit system-- për të prekur kllapa 0 dhe kllapa 1. Nëse unë shkoj më larg, nuk ka absolutisht do të jetë kujtesë atje. RAM im ekziston fizikisht në kompjuter. Por kush e di se çfarë është atje? Në të vërtetë, Unë jam duke shumta programe në një kohë. Unë mund të ketë seen-- nëse unë nuk ishin duke bërë këtë në Appliant por në Mac tim ose PC-- unë mund të ketë parë përmbajtjen e një e-mail. Unë mund të keni parë një çast Mesazhi që unë kam dërguar kohët e fundit. Çdo gjë që mund të jetë vazhdueshme rreth në kujtesën do të mund të arrihen me anë të kjo arbitrare katror simbol kllapa. Ose, më keq akoma, ju mund të keni takoi një nga fjalëkalimet e mia që unë do të shtypur kohët e fundit në, se një Programi kishte ruajtur në kujtesë në mënyrë që të vërtetoj mua, dhe atëherë vetëm lloj i lënë në RAM deri sa unë të lë atë program. 

Dhe në të vërtetë, kjo është një nga rreziku dhe një fuqitë e duke përdorur një gjuhë si C. Ju keni qasje të lirë për të gjithë përmbajtjen e kujtesës së një programit, dhe çfarë liq mund edhe ne ato cases-- sidomos kur ne merrni në programimin e web drejt përfundimit të semestrit, ne do të sërish këtë topic-- është thes rreth, potencialisht, dikush e kompjuterit kujtesës dhe për të gjetur gjëra të tilla kurioz siç e pamë atje. Ose edhe më keq akoma, fjalëkalimet që ai ose ajo pastaj mund të përdorni për të bërë gjëra të këqija. 

Pra, në mënyrë të qartë që unë nuk duhet të ketë bërë këtë, sepse gjërat pazakontë të fillojë të ndodhë. Në të vërtetë, kjo është një zhurmë e program. Kjo do të ishte ekuivalente i Mac OS ose në Windows një dritare program vetëm zhduken. Një gabim i papritur ka ndodhur. Në mjedisin e linjës së komandës ne shohim diçka si kjo. Por, kjo është arsyeja pse, po unë jam thjesht duke prekur kujtesës që nuk i përket mua. 

Pra, le të mbrojtur kundër kësaj a pak në një mënyrë të ndryshme duke shikuar në këtë program këtu. Pra, përsëri, skelet që pamë earlier-- dhe unë e kam theksuar këtë kohë int. Dhe e gjithë kjo kohë kryesore ka vërtetë u kthye një vlerë. Edhe pse në shumicën e ligjëratës tonë shembuj ne kurrë nuk kam përdorur një herë asgjë në kryesore të kthehen. Ne vetëm të shkruani ngushtë printf mbajtëse kaçurrel dhe kjo është ajo. Por për të lira, çfarë përpilues qenë duke bërë për ju, mënyrë efektive, është kthyer 0 për ju. Turns out-- dhe kjo është pak counterintuitive-- se 0 është e mirë. Kjo nuk do të thotë të rreme në vetvete. 0 është e mirë, dhe çdo jo-0 vlera, bota ka vendosur, mund të ditur një gabim. Pra, nëse ju keni messed ndonjëherë diçka deri në kompjuterin tuaj, ose një program ka vdekur vetëm për ju dhe ju keni marrë disa dritare të gabuar në ekranin tuaj, duke thënë gabim negative 49 apo gabim 23-- disa value-- dukje arbitrare që është sepse një programues ka vështirë-koduar një vlerë negative si 49 apo pozitiv 23 të përfaqësojnë ndonjë numër, guxoj të them, nga 4 miliardë gjërat e mundshme që mund të shkojnë keq në një program. 

Pra, si mund unë të marrë Avantazhi i kësaj veten time? E pra, më lejoni të hapur një program që kam shkruar më parë, dhe thes rreth në internet e quajtur Përshëndetje 4. Dhe kjo është pothuajse identike, përveç se e saj mori një pak e kontrollit të gabimeve. Në këtë rast, unë kam deklaruar sërish kryesore si duke marrë dy argumente, por këtë herë, on line 17, njoftim Unë jam duke bërë një grimë e një kontroll mendje e shëndoshë. Unë jam duke e bërë të sigurtë që argc barabartë është e barabartë me 2. Sepse në qoftë se ajo është, se do të thotë unë mund të sigurtë të prek jo vetëm kllapa 0, por kllapa 1. Dhe unë të shkojnë përpara dhe të shtypura nga, në këtë rast, Zamyla ose Rob apo çfarëdo fjalë i shtypur jashtë. Dhe tani vetëm për të marrë pak më të duhur, Unë jam duke shkuar për të kthyer në mënyrë të qartë 0 për të ditur të gjithë është i mirë. Asgjë nuk ka ndodhur e keqe. 

Por nga konventë, unë jam duke shkuar për të kthehen 1, apo sinqerisht çdo jo-0 vlera, nëse diçka shkoi keq. Tani përdoruesit nuk do të me të vërtetë vini re se çfarë po ndodh. Në të vërtetë, nëse unë shkoj në këtë directory, ne zoom në dhe të bëjnë përshëndetje 4, ./hello-4 Zamyla sillet si unë pres. Por në qoftë se unë në vend që nuk e tipit çdo gjë, asgjë nuk duket të ndodhë, por kjo nuk ka përplasje. Dhe në qoftë se unë në vend që të bëjë diçka si Rob është një kujdestar në ndarjen Thayer-- Informata arbitrare. Por njoftimi, argv 1, 2, 3, 4, dhe 5 tani duhet të ekzistojnë në memorie. Kjo, gjithashtu, nuk është çfarë programi im pret, sepse unë kam kontrolluar nëse argc barabartë është e barabartë me 2 ose jo. Kështu që unë jam tani mbrojtur kundër kësaj. 

Tani, si një mënjanë, ne programmer-- ose më mirë ne users-- kurrë nuk e shihni se 0 ose 1, por duke përdorur një mjet i quajtur Debugger, apo mjete të tjera, si ne do të shohim përpara të gjatë, ju programues fakt mund të shihni se çfarë mund të jetë do të gabuar brenda programit tuaj. 

Pra, ndonjë pyetje në argc? Po. 

Audienca: Unë e kam parë ku ata nuk kanë pasur karakterin, [e padëgjueshme] vetëm tha yll varg d, si karakter yll presje. A janë ata të barabartë këtu? 

DAVID Malan: Ata janë. Pra, pyetja është, ju keni Programet e parë herë pas here si kjo që nuk bëjnë thonë string argv kllapa por në vend të thonë diçka si char yll argv kllapa. Dhe ka edhe të tjera variante që ju mund të shihni. Ata janë me të vërtetë ekuivalente. Tani për tani, ne kemi këto lloj të rrotave të trajnimit on në formën e vargut në CS50 bibliotekë, por në pak më shumë se një jave ose kështu që ne jemi duke shkuar për të hequr se pengesë krejt e vërtetë Shikoni çfarë char dhe ylli janë, dhe se si ata i përkasin kujtesës Përfaqësimi në përgjithësi. Pra, ne do të kthehen me atë. 

Pyetje të tjera në argv tona ose argc? Po. Audienca: Pse e bëri atë të kthehet një gabim [padëgjueshme]? DAVID Malan: Pse e bëri atë kthehet një gabim only-- oh! Në rastin e mëparshëm, kur ne u futzing rreth me kujtesën, pse e bëri atë vetëm të kthehet një gabim kur unë me të vërtetë shtypur një numër të madh? Përgjigja e shkurtër është, ne e mori vetëm fat. Në përgjithësi, një kompjuter ndan kujtesës në chunks, dhe ai më dha një copë të madhe të mjaftueshme që I kam larg, pa u vënë re, i kllapa prekur 2, 3 kllapa, kllapa 50, por sa më shpejt që kam shtyrë fat e mi, unë shkova përtej Kufijtë e copë e kujtesës sistemi operativ i kishte dhënë. Dhe se kur ajo clamped poshtë dhe tha, jo. Gabim segmentimit. Po. 

Audienca: Si kompjuter di vlerën e argc? 

DAVID Malan: Si kompjuter e di vlerën e argc? Kur ju drejtuar një program, se programi, nga natyra e ndriçon, e shpejtë, është dorëzoi sërë fjalët që ishin shtypur në të shpejtë, që ishte shtypur në ftim. Dhe kështu kjo është operativ juaj sistem që në thelb populates argumentet kryesore për ju. Pra, kjo është një nga shërbimet që ju të merrni, lloj fshehurazi nën kapuç e një sistem operativ. Pyetje të tjera? Po. 

Audienca: Çfarë do të thotë thelbi hale? DAVID Malan: Çfarë do të thotë thelbi hale? Pra, kjo është një pyetje e mirë. Dhe më lejoni të kthehem në kjo dosje këtu. Dhe ju do të vëreni se Unë kam një fotografi të re atje. Është quajtur me të vërtetë thelbësore, dhe kjo është në fakt zakonisht një fotografi të mirë-sized. Kjo është në thelb një fotografi e përmbajtja e kujtesës programit tim ose RAM kur ajo u rrëzua. Dhe kjo do të jetë e dobishme, potencialisht, diagnostikuese, herë ne flasim në një leksion të ardhmen dhe seksioni për debugging, sepse në të vërtetë ju mund të bëni ekuivalent i një autopsi dixhitale në këtë dosje për të ndihmuar të kuptoj se çfarë keni bërë gabim në programin tuaj. Po. 

Audienca: A argc një komandë në vetë, ose mund të ju emrin ndonjë gjë? 

DAVID Malan: Pyetje e mirë. A është argc një komandë në vetvete, ose mund të ju atë emër ndonjë gjë? Kjo nuk është patjetër një komandë. Është thjesht një variabël të emrin ose emrin e një argument s, dhe kështu absolutisht ne mund të quajmë këtë foo, ne mund të quajmë këtë bar, të cilat kanë tendencë të jetë go-për të fjalëve që një kompjuter shkencëtar shkon për të. Por nga konventa, ne përdorim argc dhe argv. Por kjo është vetëm një njeri konventë, asgjë më shumë. Të gjithë të drejtë. Pra rezulton, unë kam qenë thënë pak e një lie-- bardhë dhe sinqerisht, në të ardhmen, ju do të shihni ne kemi qenë të thënë gënjeshtra të tjera të bardhë. Por tani për tani, ne jemi duke shkuar të zhvishem përsëri një nga këto. Në këtë rast këtu kur kam parë u zhvillua një program si ./hello ose ./hello-3 Zamyla, kemi pasur përmbajtjen e mia memorie kompjuterit kërkim afërsisht si këtë. Por kujtojnë çfarë një varg është. Çfarë të themi para një jave atë që një string në fakt është nën kapuç? Audienca: Array e karaktere. DAVID Malan: Kjo është një array e karaktere, e drejtë? Pra, ne mund të kemi një rrjet të vargjet, por, nga ana tjetër, një varg është një grup të karaktereve. Pra, nëse unë me të vërtetë duan të jenë të anal kur kam nxjerrë këtë foto, Unë duhet të vërtetë të tërhequr atë një pak më shumë si kjo, ku në secilën nga këto Indekset e array tim argv, ka në vetvete një varg të tërë që vetë është në një grup. Dhe tani gënjeshtër e bardhë ne jemi duke u thënë sot është se foto nuk ka duken krejt si kjo. Në fakt, sheshet e vogla janë zakonisht jashtë rectangles të mëdha atje. Por ne do të kthehen me atë para se të gjatë. Por kjo është ./hello backslash 0, se të jesh karakteri të veçantë që shënon fundin e një varg, dhe ne kemi marrë një tjetër pas Emri Zamyla-së. Pra, çfarë do të thotë kjo? 

E pra, më lejoni të shkoj përpara dhe të hapur dy shembuj të tjerë që janë në dispozicion online. Njëri është quajtur argv1.c dhe tjetri është argv2. Është një program super-thjeshtë që është i ndryshëm nga programet kaluara në se tani unë jam duke përdorur argc dhe argv deri këtu. Dhe tani unë jam duke integruar me një për lak në linjë 18, nga i = 0 në deri në argc. Dhe ajo që unë jam duke shkuar për të bërë me këtë linjë të kodit këtu? Në anglisht. Kjo padyshim tregon përdorimin e argc. Por në anglisht, ajo që e bën të bëjë nëse unë të drejtuar këtë program? Po? 

Audienca: Ajo do të shtypura tuaj ekran sa herë të doni. DAVID Malan: Pikërisht. Pra, çfarëdo fjalë I shkruani në ftim, është e do të derdh mbrapa ata në mua një për rresht. Pra, le të shkojnë përpara dhe të bëjë këtë. Më lejoni të shkoj në directory time dhe të bëjë të bëjë ./argv1 argv1. Dhe tani, le të mbani të thjeshtë. Le të bëjë asgjë në të parë. Ajo e bëri të shtypura nga një gjë, dhe kjo është me të vërtetë emri i programit, sepse kjo është në kllapa 0. Nëse unë tani them foo, ajo do të bëjë ata të dy, dhe në qoftë se unë them bar foo, ajo do të thonë këto tri gjëra. Tani që është disi interesante, ndoshta. Por kujtojmë se argv është një grup i strings, por një varg është një grup i karaktere, kështu që ne mund të marrë gjërat një nivel dhe të aplikojnë që themelore Logjika dhe të bëjë kodin që duket pak më i fshehtë, pa dyshim. Por duke pasur një mbivendosur loop, diçka e ngjashme me atë që ju mund të kujtojnë nga Mario, për shembull, në qoftë se ju e bëri atë në këtë mënyrë. 

Deri tani vini re on line 19, unë jam përsëri iterating mbi argumentet e mia, nga 0 deri ne argc. Dhe tani në linjë 21-- unë jam huamarrjes një mashtrim nga week-- fundit Unë jam duke kontrolluar se çfarë është Gjatësia e kllapa argv i. Unë jam klasifikoni përgjigje në n. Dhe atëherë unë jam i integruar nga j në deri n, ku J është nisur në 0. Pra, Konventa për numërim. Pasi të keni përdorur i, në qoftë se ju keni një loop mbivendosur, ju nuk mund të përdorni i përsëri, përndryshe ju do të plaçkë, potencialisht, vlera jashtë lak brendshme. Kështu që unë jam duke përdorur j nga konventa. Ne mund të përdorin k. Nëse ju keni më shumë se k, ju ndoshta kanë shumë shkatërroj fole, zakonisht. Por tani, vini re printf tim Linja është paksa e ndryshme. Unë nuk jam shtypjen% s, unë jam shtypjen% c, e cila, natyrisht, është një placeholder për një char. 

Dhe tani vini re këtë sintaksë. Re. Ne nuk e kemi parë atë më parë. Por logjikisht, kjo thjesht do të thotë merrni string me shërbimin në argv dhe për të marrë jth çfarë? Audienca: Karakteri. DAVID Malan: Karakteri në atë varg. Pra, duke përdorur kllapa katrore ndjekur nga kllapa katrore, kjo është zhytja e parë në vargjet argv-së, dhe pastaj dytë kllapa katrore me j është zhytja në personazhet e që string veçantë në argv. Dhe pastaj, vetëm për masë të mirë, Unë jam shtypjen e një linjë të re këtu. Deri tani më lejoni të shkoj përpara dhe të hapur up një dritare paksa më të madh kështu që ne mund të shohim këtë në veprim. Më lejoni të shkoj në atë dosje. Dhe tani do të bëjë argv-2-- whoops-- bëjnë argv-2, ./argv 2. Shkruani. Dhe kjo është një e vështirë pak për të lexuar vertikalisht, por kjo është me të vërtetë emri i program, e ndjekur nga një linjë bosh. Tani më lejoni të shkoj përpara dhe të bëjë foo. Në mënyrë të ngjashme e vështirë të lexohen, por është e vërtetë shtypjen një karakter për linjë. Dhe në qoftë se unë bëj bar, kjo është tani shtypjen ato rresht pas rreshti. Pra takeaway këtu nuk është aq shumë që, wow, shikoni në këtë mashtrim i zoti të ri ku ju mund të merrni në përmbajtjen e karaktereve të veçanta një grup-së, por më tepër se si ne jemi duke marrë këto themelore Idetë si indeksim në një grup, dhe pastaj indeksimin në një array që ishte në atë grup, dhe vetëm duke aplikuar të njëjtat ide të shembuj pak më të sofistikuara. Por bazat me të vërtetë nuk kanë ndryshuar, madje edhe pasi që javën e kaluar. 

Tani kjo është lloj i në kohë, ajo qe, mend, në javë zero ne kemi luajtur me një libër telefoni si kjo. Dhe, edhe pse kjo është e qartë copa fizike të letrës, ju mund të lloj të mendojnë për një libër telefon si një grup. Sigurisht, në qoftë se keni qenë për të reimplement kjo pjesë këto copa letre në një kompjuter, ndoshta ju do të përdorni diçka si një grup për të ruajtur të gjithë ata emrat dhe numrat nga një të gjithë rrugën përmes Z. Pra, kjo është e bukur, sepse kjo na lejon një mundësi, ndoshta, të marrin në konsideratë se si ju mund të edhe të implementojë diçka të tillë. Si me një seri të dyerve këtu. Pra, nëse unë could-- ne kemi nevojë për një të tillë vullnetarë të ardhur në dorë. Le të shohim. Një fytyrë të panjohura ndoshta, fytyra të panjohura ndoshta. Si për në portokalli? Këtu. Shirt Orange, eja lart. 

Le të shkojmë përpara tani dhe veprim këto dyer mbi në anën, lëvizin këto nga rruga për një moment. Si e keni emrin? 

AJAY: 

DAVID Malan: Ajay. David. Gëzohem që u njohëm. Të gjithë të drejtë. Pra, ne kemi pas këtyre gjashtë dyert digjitale në screen-- ose, në vend, shtatë dyert në screen-- një bandë e tërë e numrave. Dhe unë e kam thënë ju asgjë në pajtua advance--? AJAY: Asgjë paraprakisht. DAVID Malan: Të gjitha unë dua që ju të bëni tani është për të gjetur për mua, dhe për ne, me të vërtetë, numri 50, një hap në një kohë. 

AJAY: Numri 50? 

DAVID Malan: Numri 50. Dhe ju mund të zbulojë se çfarë është pas secili prej këtyre dyerve thjesht duke prekur atë me një gisht. Damn atë. [Qeshura] 

[Duartrokitje] 

Bërë shumë mirë. OK. Ne kemi një dhuratë të bukur Çmimi për ju këtu. Marr tuaj filmave ne diskutuar javën e kaluar. 

AJAY: Oh, njeri. Oh, unë kurrë nuk kam parë Spaceballs. 

DAVID Malan: Spaceballs. Të gjithë të drejtë. Pra, të mbajë në vetëm një moment. How-- le të bëjmë këtë një moment-- aftë për shkollë si e keni shkoni në lidhje me gjetja e numrit 50? AJAY: Unë zgjodha rastësisht. DAVID Malan: Pra keni zgjedhur rastësisht dhe mori me fat. AJAY: Po. DAVID Malan: OK. Excellent. Deri tani, kishte ju nuk marrë me fat, çfarë tjetër mund të ketë ndodhur pas këtyre dyerve? Pra, nëse unë shkoj përpara dhe të zbulojnë këto numra këtu, ata në të vërtetë janë në mënyrë të rastit. Dhe më të mirë që ju mund të ketë bërë, sinqerisht, është nga, në fund të fundit, në rastin më të keq, duke kontrolluar të gjithë. Kështu që ju mori super-fat, e cila nuk është ajo që ne do të thërrasë një algoritmi. Po, Congrats. Por tani let's-- Humor mua, nëse ju mund të. Le të shkojnë në këtë tab këtu. Dhe këtu janë numrat në mënyrë të qartë atë që duket të jetë një mënyrë të rastit, dhe ata ishin. Por tani në qoftë se unë në vend pretendim se pas këtyre dyerve janë numra që janë të renditura. Tani qëllimi është edhe na gjeni numrin 50. Por të bëjë atë algorithmically, dhe na tregoni se si ju jeni duke shkuar për të. Dhe në qoftë se ju të gjeni atë, ju mbani filmin. Ju nuk e gjeni atë, ju jepni atë. AJAY: Kështu që unë jam duke shkuar për të kontrolluar skajet së pari, për të përcaktuar nëse there's-- [Qeshura dhe duartrokitje] DAVID Malan: Këtu ju shkoni. Le të bëjmë një vështrim në një nga paraardhësit e Ajay, Sean, i cili nuk ishte mjaft si fat. OK, kështu detyrën tuaj këtu, Sean, është në vijim. Unë kam fshehur pas këto dyert numri shtatë, por tucked larg në disa nga këto dyer si dhe një numër të tjera jo-negative. Dhe qëllimi juaj është që të mendojnë për këtë rresht i lartë i numrave si vetëm një grup. Ne jemi vetëm një sekuencë e copa letër me numra pas tyre. Dhe qëllimi juaj është, vetëm duke përdorur të lartë array këtu, të gjetur me numrin shtatë. Dhe atëherë ne jemi duke shkuar për të kritikuar se si ju shkoni për të bërë atë. Na gjeni numrin shtatë, ju lutem. Nr 5, 19, 13. Kjo nuk është një pyetje mashtrim. 1. Në këtë pikë Rezultati juaj nuk është shumë e e mirë, kështu që ju mund edhe të mbajë. 3. Shkoni në. Sinqerisht, unë nuk mund të ndihmojnë por pyes veten çfarë jeni duke menduar për. 

SEAN: Unë mund të marrë nga vetëm rreshtin e lartë. DAVID Malan: Vetëm në radhën e lartë. Pra, ju keni marrë tre majtë. Pra gjeni më 7. 

[Audienca Thirrjet PROPOZIME] Pra, të dy ata ishin të mahnitshme për arsye shumë të ndryshme. Pra, kjo është ajo ku ne lënë jashtë një moment më parë, dhe depërtim kyç këtu ishte këto dyer kishte numrat pas tyre që ishin të renditura, ideal takeaway për të cilat është që ju mund të bëni krejtësisht më të mirë në kjo example-- dytë dhe, në të vërtetë, kjo ishte Sean së përpjekja e parë me numra të rastit po aq before-- por sa më shpejt pasi këto numra janë të renditura, shumë si librin e telefonit, çfarë mund të bëni të qartë? Ose, si mund të levave atë njohuri? Po. 

Audienca: Ju shkoni në gjysmë të rrugës [padëgjueshme]. DAVID Malan: Po. Pikërisht. Pra instinkti fillestar Ajay ishte për të kontrolluar në skajet, si unë kujtoj, dhe pastaj ne lloj përfunduar shembull shpejt. Por nëse kemi filluar ta bëjmë këtë më shumë metodike në këto linja, por duke filluar ndoshta në e mesme, sepse ata janë të renditura, sa më shpejt që ne të zbulojë numër 16, ne prandaj know-- dhe le të bëjë pikërisht that-- ne prandaj e dimë se 50, në rastin e sotme, ka marrë të jetë në të djathtë. Pra, ashtu si në javë zero kur ne grisi librin e telefonit në gjysmë dhe hodhën gjysmën e Problemi larg, të njëjtën ide këtu. Ne mund të hedhin në këtë pjesë e problemit larg. Dhe ndoshta ajo që ju mund të bëjë algorithmically, një herë ju e dini se 50 duhet të jenë të në të djathtë, nëse është e kudo, është të përpiqen atje, në mes e dyerve mbetur. Natyrisht, 50 është më e lartë shumë se 42, kështu që ne mund hedhin kjo e mbetur katërta e problemit larg, dhe, më në fund, për të identifikuar diçka si 50. Por ashtu si me librin e telefonit, këto shifra janë dhënë për ne tashmë në mënyrë të renditur, i cili na lë me pyetjen, si mund të marrë gjërat në mënyrë të renditura? Dhe, sinqerisht, me çfarë kosto? Kjo është një gjë që të jetë e dorëzoi librin e telefonit dhe pastaj të lë përshtypje miqtë tuaj duke gjetur një numër telefoni të vërtetë të shpejtë, e drejtë? Marramendës 32 faqe për të gjetur një Personi nga 4 miliardë faqe, kemi thënë ishte një shembull ekstrem. Por, se sa kohë u desh Verizon për të zgjidhur atë libër telefoni? Sa kohë u desh na për të zgjidhur këto shtatë numra? Kjo është një pyetje që ne kemi duke injoruar tani plotësisht. 

Pra, le të përgjigjen në këtë pyetje tani. Dhe ne jemi të gjithë nga filmat tani, por ne kemi disa topa stresit. Në qoftë se, të themi, tetë vullnetarë nuk do mend të na u bashkuar këtu? Le të shkojnë përpara dhe të bëjë, si për katër prej jush, tre nga ju këtu? Merr disa fytyra të reja. Dhe katër prej jush atje? Dhe now-- mos të paragjykim here-- dhe Numri tetë mbi këtu në fund. Eja lart. Të gjithë të drejtë. Pra, ajo që ne kemi këtu për çdo njëra është një numër. Nëse ju dëshironi të shkoni përpara, të marrë këtë numër. Si e keni emrin? 

Artie: Artie. 

DAVID Malan: Artie, në rregull. Ju jeni numri 1. 

AMIN: Amin. DAVID Malan: Amin. David. Ju jeni numër 2. Dhe të shkojnë përpara, si unë dorë ju fletët e letrës, vijë veten deri në frontin e muzikës qëndron në të njëjtën mënyrë si deri atje. 

Andy: Hi, Andy. 

DAVID Malan: Andy, është e mirë për të parë ju. Numri 3. 

Jacob: Jakobi. 

DAVID Malan: Jakobi, numër 4. Mirësevini në fluturake. GRANT: Grant. DAVID Malan: Grant. Numri 5. 

Alanna: Alanna. 

DAVID Malan: Alanna, numri 6. 

FRANCES: Frances. DAVID Malan: Frances, numër 7. Dhe? 

Rachel: Rachel. 

DAVID Malan: Rachel, numri 8. Të gjithë të drejtë. Shkoni përpara dhe për të marrë veten në këtë mënyrë. Më lejoni të vënë një e mbetur muzikë të qëndrojë në vend. Ku keni nevojë për një qëndrim? OK. Shkoni përpara dhe të vetëm të vënë numrat tuaj ku publiku mund të shohin ato në, muzikë qëndrojë përballet jashtëm. Dhe shpresojmë se, së pari ynë mendje e shëndoshë kontrolloni here-- 4, 2, 6. Oh-oh. Prisni një minutë. Ne nuk kemi një 8. Unë kam nevojë për të nxjerrë ju nga shembull disi. Nr Jo, kjo është në rregull. Le të shohim. Ne mund ta bëjmë këtë. Sehir. Ka ne do të shkojmë. Correct. Të gjithë të drejtë. Pra, tani ne kemi 8, 1, 3, 7 5. OK. Excellent. 

Pra, pyetja e parë është, në çfarë kosto, dhe me anë të asaj që metoda, mund të kemi në të vërtetë të zgjidhur këto numra këtu në mënyrë që ne mund të lloj të punojnë prapa, në fund të fundit, dhe decide-- është me të vërtetë mbresëlënëse, është me të vërtetë efikas, që unë mund të ndajnë dhe pushtuar një libër telefoni? A është me të vërtetë efikas se Unë mund të ndajnë dhe të pushtuar ato copa dixhitale e letrës në bord, në qoftë se ndoshta ajo do të na kushtojë një pasuri në kohë ose të energjisë ose CPU cikle që në fakt të marrë të dhënat tona në një mënyrë të renditura? Pra, le të pyes këtë pyetje. 

Off Pra, së pari, këto shifra janë në mënyrë që shumë e shumë të rastit, dhe unë jam duke shkuar për të propozuar një algoritmi, ose procesi nga të cilat ne mund të lloj këto folks. Unë jam duke shkuar për t'iu qasur kjo goxha naivitet. Dhe unë jam duke shkuar për të njohur se kjo është lloj i një shumë për mua të përfundojë mendjen time rreth dhënave të tëra të vendosur në të njëjtën kohë. Por ju e dini se çfarë? Unë jam duke shkuar për të bërë disa fixes shumë e thjeshtë margjinale. 4 dhe 2 janë jashtë rendit, nëse Qëllimi është për të shkuar nga 1 në deri në 8. Pra, ju e dini se çfarë? Unë jam do të ketë të djema bie në ujdi, nëse ju kaloni fizikisht pozicionet dhe copa tuaj të letrës. Tani 4 dhe 6, këto janë në rregull. Unë jam duke shkuar për të lënë ata të jenë. 6 dhe 8, ato janë në rregull. Duke shkuar për të lënë ata të jenë. 8 And1, prej të rendit. Në qoftë se ju të dy nuk do mend shkëmbejnë. Tani 8 dhe 3, në qoftë se ju djema mund të bie në ujdi. 8 dhe 7, në qoftë se ju djema mund të bie në ujdi. Dhe 8 dhe 5, në qoftë se ju djema mund të bie në ujdi. 

Tani, jam unë bërë? Jo, natyrisht jo. Por unë kam bërë Situata më e mirë, e drejtë? Cili ishte emri juaj përsëri, numri 8? 

Rachel: Rachel. DAVID Malan: Pra Rachel ka bubbled në mënyrë efektive deri goxha larg, gjithë mënyrë që fundi i array ime e numrave këtu. Dhe kështu që problemi është lloj i zgjidhur. Tani, në mënyrë të qartë, 2 ende ka nevojë për të lëvizë një grimë, dhe 4 dhe 6 dhe 1. Por unë duket të ketë marrë një pak më afër zgjidhjes. Pra, le të aplikojnë këtë njëjtë deduktive naive përsëri. 2 dhe 4, OK. 4 dhe 6, OK. 6 dhe 1, mm-mm. Le të swap. 6 dhe 3, mm-mm. Le të swap. 6 dhe 7 është rregull. 7 dhe 5, Jo. Le të swap. Dhe tani 7 dhe 8. Dhe çfarë është emri juaj përsëri? FRANCES: Frances. DAVID Malan: Frances. Deri tani Frances është edhe një më të mirë pozita, për shkak se tani 7 dhe 8 janë bubbled saktë deri në majë. Pra, 2 dhe 4, OK. 4 dhe 1, shkëmbim le. 4 dhe 3, shkëmbim le. 4 dhe 6, ju jeni OK. 6 dhe 5, shkëmbim le. Dhe tani ata djemtë janë të mira. Ne jemi pothuajse atje. 2 dhe 1, jashtë funksionit, kështu që bie në ujdi. Dhe tani më lejoni të bëj një kontroll mendje e shëndoshë. 2 dhe 3, 3 dhe 4, 4 dhe 5, 5 dhe 6, 6 dhe 7, 8. OK, kështu që ne jemi duke bërë. 

Por në çfarë kosto bëri I zgjidhur këto numra këtu? E pra, sa hapa bëri I potencialisht marrë kur zgjidhja e këtyre folks? E pra, ne do të kthehen në këtë pyetje. Por, sinqerisht, në qoftë se ju mori një mërzitur pak, kjo është lloj zbuluar në se kjo nuk ishte e ndoshta algorithm më efikase. Dhe me të vërtetë, sinqerisht, unë jam djersitje të gjithë më këmbë mbrapa dhe me radhë. Kjo nuk e ka ndier veçanërisht efikase. Pra, le të provojmë diçka tjetër. Nëse ju djema mund të rishkruhet veten për këto tetë vlerave. Punë të mirë. 

Le të bëjmë një vështrim digjitale, për vetëm një moment para se të provoni diçka tjetër, në atë që ka ndodhur vetëm. Deri këtu, ju jeni gati për të parë një vizualizimi i këtyre tetë njerëzve ku blu dhe të kuqe bare përfaqësojnë numrat. Shtatlartë bar, më e madhe numri. Shkurtër bar, më i vogël numri. Dhe atë që ju jeni duke shkuar për të parë është në mënyrë të rastësishme më shumë se tetë prej tyre. Ju jeni duke shkuar për të parë këto bare duke u renditur nga e njëjta algorithm, ose grup i udhëzime, të cilat ne do të thërrasë tani e tutje flluskë lloj. Pra njoftim, çdo i dyti apo më shumë, dy bare janë të ndezjes së dritave të kuqe, janë duke u krahasuar nga kompjuteri. Atëherë, nëse bar i madh dhe pak bar janë nga e rendit, ata janë duke u swapped për mua. 

Tani kjo është tepër e lodhshme për të parë këtë, sigurisht, për shumë kohë, por njoftim takeaway-- bare mëdha lëvizin në të djathtë, bare pak lëvizin në të majtë. Le të ndërpresin shtatzëninë këtë proces dhe shpejtuar këtë ide të jetë shumë më të shpejtë, kështu që ne mund të marrë një kuptim të nivelit të lartë të asaj që, në të vërtetë, flluskë lloj është duke bërë. Në të vërtetë, kjo është bubbling deri në djathtë anën e listës, ose array, baret më të mëdha. Dhe anasjelltas, bare pak janë bubbling rrugën e tyre poshtë në të majtë, megjithëse me një ritëm më të shpejtë se ne e parë e bëri. Pra, më e vështirë për të parë me njerëzit, por vizualisht kjo është me të vërtetë se çfarë po ndodhte. 

Por le të përpiqemi një krejtësisht qasje të ndryshme tani. Le të provoni një tjetër algorithm ku ne kemi të djemtë fillojnë në këto origjinal pozicione, e cila ishte ky urdhër këtu. Dhe le të shkojë përpara tani. Dhe unë jam duke shkuar për të bërë diçka edhe më të thjeshta, e drejtë? Në retrospektivë, shkëmbejnë pairwise përsëri dhe përsëri, pothuajse pak i zgjuar. Le të bëjë gjëra edhe më shumë naivitet, ku në qoftë se unë dua të zgjidhur këto folks, më lejoni vetëm të vazhdoni të kërkoni për të elementit të vogël. Deri tani, 4 është Numri më i vogël i kam parë. Unë jam duke shkuar për të kujtuar se. Jo, 2 është më e mirë, dhe mos harroni se. 1 është edhe më i vogël. 3, 7, 5. OK. One-- si e ke emrin përsëri? 

Artie: Artie. 

DAVID Malan: Artie. Pra, Artie, të shkojnë përpara. Unë jam duke shkuar për t'ju tërhequr nga linjë. Nëse ju mund të kthehet këtu. Dhe unë duhet të bëjë vend për të. Ne kemi një pikë vendim këtu. Si mund ta bëjë vend për Artie këtu në fillim ku numri 1 takon? 

Audienca: Shift. 

DAVID Malan: OK, ne mund të zhvendoset të gjithë. Por propozojë një optimization. Që ndihet pak i bezdisshëm për mua të pyes katër persona për të lëvizur të gjithë rrugën poshtë. Çfarë tjetër mund të bëj? 

Audienca: Switch ato. 

DAVID Malan: Switch ato. Dhe çfarë është emri juaj përsëri? 

Jacob: Jakobi. DAVID Malan: Jakobi, lëvizin. Shumë më të efektshme vetëm që të ketë Vende Jakobi swap me Artie, në krahasim me duke e detyruar të katër këto folks, ju faleminderit shumë, për të pozita e tyre e saktë. Çfarë është e mirë në lidhje me Artie tani, ai është në pozitën e tij të saktë. Le të bëjë këtë përsëri. 2, që është numri më i vogël që unë kam parë. 3, 7, 5. OK. 2 është padyshim më i vogël. A nuk duhet të bëni asnjë punë. Le të bëjë atë përsëri. 6. Më të vogël? 8. Jo. 4? Ooh. Më lejoni të kujtuar 4. 3. Më lejoni të kujtojmë 3. 7, 5. Numri më i vogël unë kam parë në këtë të kaluar është 3. Nëse ju do të dalë më jashtë. Ku do të shkojmë për të vënë ju? Dhe si e ke emrin? 

Alanna: Alanna. 

DAVID Malan: Alanna, ne jemi do të duhet të nxjerrë ju. Por kjo është më efikase, të vetëm të bie në ujdi dy persona, se sa të ketë njerëz të shumta në të vërtetë ngelet në bisht mbi. Tani le ta bëjmë këtë përsëri. Unë jam duke shkuar për të zgjedhur 4, kështu që eja jashtë. Dhe kush do të shkojë? Numri 8, natyrisht. Nëse unë tani gjeni numrin 5, eja jashtë. Numri 8 do të merrni dëbuar përsëri. Unë tani jam duke shkuar për të gjetur numrin 6 në vend. 7 në vend. 8 në vend. 

Ajo që ne vetëm e bëri tani është diçka që quhet përzgjedhje lloj, dhe në qoftë se ne e kujtoj këtë, është e do të ndjehen pak më ndryshe. Le të shkojnë përpara dhe nga kjo menu këtu, kjo visualization-- le të ndryshojë kjo to-- eja, Firefox. Le të ndryshojë këtë për të përzgjedhjes lloji. Dhe le të shpejtuar atë si më parë, dhe të fillojnë vizualizimi tani. Dhe kjo algorithm ka një të ndjehen të ndryshme për të. Në çdo përsëritje, sinqerisht, është edhe më i thjeshtë. Unë jam vetëm duke zgjedhur elementin më të vogël. Tani, sinqerisht, kam marrë një fat pak se kohë, në atë që zgjidhet super-shpejtë. Elementet ishin të rastit. Kjo nuk është, si ne do të përfundimisht shikoni, krejtësisht më të shpejtë. Por le të shohim një të tretë dhe të fundit qasje këtu se çfarë po ndodh. Pra, le të shkojnë përpara dhe të rivendosur djema një kohë final të jetë në këtë mënyrë këtu. 

Dhe tani, unë jam duke shkuar për të të jetë pak më të zgjuar, vetëm për të rrumbullakët algoritme tonë. Unë jam duke shkuar për të bërë këtë. Unë jam duke shkuar për të mos shkuar mbrapa dhe me radhë aq shumë. Sinqerisht, unë jam i lodhur nga e gjithë kjo traversing. Unë jam vetëm duke shkuar për të marrë atë që unë jam dhënë në fillim të lista, dhe unë jam duke shkuar për të zgjidhur që atëherë dhe atje. Pra, ja ku jemi. Numër 4. Unë jam duke shkuar për të futur numrin 4 në një listë të renditura. Done. Unë pretendojnë tani, dhe vetëm për të bërë këtë më shumë qartë, kjo pjesë e listës sime është renditura. Kjo është lloj i një pretendimi budallaqe, por me të vërtetë 4 është renditur në një listë të njëjtën masë. Tani, unë jam duke shkuar për të marrë në numrin 2. Numri 2 Unë tani jam duke shkuar për të futur në vendin e duhur. Pra, ku ka 2 takon? Natyrisht, mbi këtu. Kështu që të shkojnë përpara dhe për të shkuar mbrapa, në qoftë se ju mund. Pse nuk ju djema të marrë vetëm muzikë tuaj qëndron me ju këtë herë. Dhe le forcë futur ju në fillim të lista. Pra, pak më shumë punë. Unë kisha për të lëvizur përreth Jakobin, dhe si e ke emrin? 

AMIN: Amin. 

DAVID Malan: Amin. Por të paktën unë nuk ka shkuar mbrapa dhe me radhë. Unë jam vetëm duke marrë gjërat si të shkoj. Unë jam vetëm duke futur ato në vendin e duhur. 6, kjo është në të vërtetë shumë e lehtë. Le të futur ju atje, nëse ju vetëm për të kërkuar për të lëvizur gjatë pak. Numri 8, gjithashtu shumë e lehtë. E drejta atje. Damn atë. Numri 1 ne nuk mund vetëm të bie në ujdi me Amin këtu, sepse kjo do të bela deri rendit. Pra, ne duhet të jetë pak më të zgjuar. Pra, Artie, në qoftë se ju mund të mbështetur për një moment. Le të shkojnë përpara dhe të zhvendoset tani, ndryshe nga algoritme tona të mëparshme, për të bërë vend për Artie të drejtë këtu në fillim. Pra, në fund të ditës, unë jam natyrë e duke bërë atë që kam kërkuar për të shmangur para. Dhe kështu algoritmi im është lloj i kundërt, intelektualisht, nga ajo që ishte fillimisht. Unë jam vetëm duke bërë kalimin në një pikë të ndryshme. Tani unë jam në 3. Oh, mallkuar. Ne duhet të bëjmë më shumë punë përsëri. Pra, le të shtyjë jashtë. Le të lëvizin 8, 6, 4-- oh oh-- dhe 3 do të shkojë drejtë atje. Pra në kursime të paktën të vogla këtë herë. 7, jo shumë punë për të bërë. Pra, nëse ju dëshironi të pop prapa, le të futur ju. Dhe së fundi, 5, në qoftë se ju dëshironi të pop mbrapa, ne duhet të zhvendoset ju, ju, ju, deri në pesë është në vend. 

Deri tani për të parë këtë në një nivelit të lartë grafikisht, le të bëjmë këtë algoritëm vizualizimi një kohë shtesë. Pra, kjo do të thërrasë futje lloj. Ne do të drejtuar atë vetëm si të shpejtë, dhe të fillojnë këtu. Dhe, gjithashtu, ka një të ndjehen të ndryshme. Është lloj i shkojnë më mirë dhe më të mirë, por kjo nuk është e përsosur deri sa të shkoj në dhe të qetë në këto boshllëqe. Sepse, përsëri, unë jam vetëm duke marrë atë Unë jam duke u dhënë nga e majta në të djathtë. Kështu që unë nuk e kam marrë aq me fat se çdo gjë ishte e përkryer. Kjo është arsyeja pse kemi pasur këto pak mispositions që ne fikse me kalimin e kohës. 

Pra, të gjitha këto algoritme duket se drejtuar me ritme pak më të ndryshme. Në fakt, e cila do të ju thonë se është më të mirë apo më të shpejtë deri më tani? Lloj Bubble, i pari? Përzgjedhja lloj, e dyta? Lloj futje, i treti? Dëgjoj disa llojet e përzgjedhjes. Mendime të tjera? 

Pra, rezulton se të gjitha këto algoritme janë krejtësisht të po aq efikase sa çdo other-- ose, anasjelltas, ashtu si jo efikase si njëri tjetri, sepse ne mund të bëjmë në thelb më mirë se të tre nga këto algoritme. Dhe kjo është pak e një gënjeshtër të bardhë, too. kur them si efikase ose si joefikas, kjo është të paktën për Vlerat super-të mëdha të n. Kur ne kemi vetëm tetë njerëz këtu, apo ndoshta 50 apo më shumë bare në ekran, ju do absolutisht të vëreni dallimet në mesin e këtyre tre algoritme. Por si n, numri i njerëzve, ose numri i numrave, ose numri i njerëzve në telefon libër, ose numri i faqeve web në bazën e të dhënave të Google merr më të mëdha, ne do të shohim se të tre këto algoritme të vërtetë janë mjaft të varfër. Dhe ne mund të bëjmë në thelb më mirë se kaq. 

Le të bëjmë një vështrim, më në fund, në atë që këto algoritme mund tingëllojë si në Konteksti i disa të tjerë gjithashtu me anë të kësaj vizualizimi këtu që do të na njoftojë me një numër i algoritmeve. Le të shkojnë përpara dhe të përgëzoj Pjesëmarrësit tanë këtu, të gjithë prej të cilëve renditura veten shumë mirë. Nëse ju dëshironi të marrë një dhuratë lamtumire. Ju mund të mbani numrat tuaj si. Dhe ajo që ju do të shihni, ose më mirë dëgjojnë, tani, është se si ne të vënë tinguj me secilën nga këto bare dhe e lidhin atë me software, frekuenca të ndryshme të shëndoshë, ju mund të përfundojë mendjen tuaj më shumë audioly rreth asaj që secili nga këto gjëra duken si. Parë e cila është futje lloj 

[Tone] 

Kjo është flluskë lloj. 

[Tone] 

Përzgjedhja lloj. 

[Tone] 

Diçka quajtur bashkojë lloj. 

[Tone] 

Lloj Gnome. 

[Tone] 

Kjo është ajo për CS50. Ne do të ju shohim të mërkurën. 

Transmetuesi: Dhe tani, "Deep Mendime, "nga Daven Farnham. Pse është një për lak? Pse nuk e bëjnë atë më të mirë? Unë do të bëjë një pesë lak. 

[Qeshura]