DAVID Malan: All wa kulia. Hivyo hii ni CS50, na hii ni sasa ya kuanza kwa wiki tatu. Hivyo hadi sasa, tumekuwa wamekuwa kuandika mipango katika C ili kuangalia kidogo kitu kama hii hapa. Hivyo sisi tumepewa michache ya mkali ni pamoja na saa ya juu. Sisi tumepewa int, kuu, utupu, na kisha kitu cha kufanya katika katikati, baadhi kidogo ya code ndani ya ya kazi hiyo. Lakini muhimu imekuwa ukweli kwamba tumekuwa akisema utupu hapa. Hivyo batili, wote wa wakati huu, bayana kwamba mpango huu, wakati kukimbia, inaweza tu kuwa na kukimbia kupitia jina lake. Huwezi aina ya maneno yoyote nyingine au namba baada ya jina mpango wa wakati mbio ni. Hivyo, kwa mfano, kama mpango walikuwa compiled katika faili inayoitwa hello, unaweza kufanya ./hello, lakini hiyo ni yake. njia pekee ya kwamba unaweza kutoa mchango kwa mpango huu ni kwa kupiga kazi. Kwa mfano, kazi gani tumekuwa kutumia hivi sasa kupata pembejeo kutoka kwa mtumiaji? Watazamaji: Kupata kamba. DAVID Malan: Ili kupata uzi, au kupata int, au ve kuonekana wengine, hata kama wewe si kutumika yao bado, kama kupata muda mrefu, kwa muda mrefu na kama. Lakini tuseme kwamba sisi kweli unataka kuanza programu kuandika kwamba ni kidogo zaidi versatile, na, kusema ukweli, kidogo zaidi kama amri hiyo wewe wameweza wamekuwa kupata, hopefully, kidogo wamezoea. Kama cd nafasi Dropbox. Hii, bila shaka, mabadiliko saraka yako, kuchukua wewe ni katika nyumba John Harvard ya directory, kwa Dropbox folder yako. Wakati huo huo, amri kama hii inajenga directory mpya iitwayo pset2, kama unaweza kuwa na tayari au hivi karibuni kwa kuweka tatizo miwili. Kufanya Hello, bila shaka, ni amri ya ambayo hujenga programu inayoitwa hodi kutoka faili inayoitwa hodi dot c. Na katika kila moja ya haya kesi, sasa, tumekuwa alikuwa kutoa hoja juu ya kinachojulikana mstari amri, haraka blinking, ili kufanya anajua kujenga, na hivyo kwamba mkdir anajua folder kujenga, na hivyo kuwa cd anajua ambapo unataka kwenda. Lakini hadi sasa, sisi kuendelea kusema kwamba kuu, yako default kazi, ina utupu kujieleza ndani ya mabano hizo, ambayo ina maana kwamba hawezi kuchukua hoja yoyote. Hivyo kuanzia leo, nini tunakwenda kufanya yaani, sisi ni kwenda kuanza kusaidia mambo kama hayo hata. Kwa kweli, katika kesi hii, ambayo si kawaida manually aina, Kufanya amekuwa akifanya hii kwa ajili yetu, kuna si moja lakini moja, mbili, tatu ya ziada masharti baada ya mpango wa jina lake Clang. Hivyo ni jinsi gani sisi kufikia hili? Naam, kuanzia leo, katika kesi ambapo tunataka kutoa mchango kupitia kinachojulikana mstari amri, sisi ni kwenda kuanza kuongeza hapa nini katika yellow-- kuchukua nafasi ya utupu na int argc comma kamba argv bracket wazi karibu bracket. Sasa hii ni ya kuvutia kwa ajili ya wanandoa ya sababu. Moja, ni kwenda hebu kuandika mipango ya kuwa ni nguvu zaidi kidogo. Lakini, zaidi compellingly, ni kwenda kufungua sasa mazungumzo kama kwa nini arrays unaweza kweli kutumika, kwa kamba nini kweli ni chini ya Hood, mpaka wiki ijayo wakati sisi kuanza mbizi katika hata zaidi kama kwa jinsi mashine ni kufanya yote ya kazi hii mambo ya ajabu. Lakini kwa sasa, hebu kuteka, labda, picha. Wakati kuandika mpango na kuu alitangaza kwa njia hii, kama kwamba kuu inachukua hoja mbili, int and-- nini data aina Hoja ya pili ni? Watazamaji: Array. DAVID Malan: Array. Hivyo inaonekana katika mtazamo wa kwanza kama ni kamba, lakini taarifa mabano mraba. Kumbuka wakati wa mwisho sisi ilianzisha dhana ya safu. Na arrays kutumia mabano mraba katika michache ya mazingira. Unaweza kutumia mraba mabano na kwenda katika safu na kupata kipengele fulani, kama bracket 0 au bracket 1 au bracket 2. Lakini tuliona, kama kwa ufupi, wiki iliyopita kwamba wewe pia kutumia mabano haya mraba kwa kutangaza ukubwa wa safu, kama unajua mapema jinsi ints wengi au jinsi masharti wengi au chochote kweli wanataka. Hivyo ni zamu nje huko ya mazingira ya tatu hapa kwamba hana idadi ndani ya mabano mraba. Wakati wewe taja, kama mimi hapa, jina la kitu kama argv, ambayo ni njia tu ya dhana ya akisema hoja vector, ambayo ni njia nyingine ya dhana ya akisema safu ya hoja, bracket wazi karibu bracket tu ina maana kwamba huna lazima kujua mapema jinsi kubwa safu ni kwenda kuwa, lakini unajua ni kwenda kuwa safu. Hivyo kama wewe sijui simu wala kuweka huko, kwa bracket wazi karibu bracket ina maana kwamba argv ni si kamba, lakini safu ya masharti. Hivyo syntactically, kama wewe kufikiri nyuma wiki iliyopita, ni sawa sana na kusema kitu kama int umri bracket wazi, na kisha kitu baada ya hapo. Basi nini hii kuangalia kama? Hebu kweli kuchora picha. Hivyo wakati wewe kukimbia mpango huu na Kuu ya baada ya hoja mbili inavyoelezwa ndani ya ya mabano hayo, kimsingi kuwa na chunks angalau mbili ya kumbukumbu mitupu kwa wewe chini ya Hood. Moja, kama mimi itabidi huchota kama pembenne hii, ni kwenda kuitwa argc. Na tu kama recap ya haraka, nini ni aina data ya argc? Hivyo ni int. Hivyo idadi ni kwenda kwenda katika zamu argc-- nje kwamba anasimama kwa ajili hoja kuhesabu. Wakati huo huo, nimekuwa inayotolewa argv kama safu. Na mimi si kweli kujua muda gani ni kwenda kuwa, hivyo kwa madhumuni ya leo ya dot dot dot. Ni ili kupata baadhi ya urefu. Lakini nimekuwa pichani hapa angalau nne mistatili. Hivyo argv chunk ya kumbukumbu kwamba maduka kamba kamba kamba dot dot dot, na argc ni chunk moja tu ya kumbukumbu kwa integer. Hivyo sasa, hebu kuwa sahihi zaidi kidogo. Kama, wakati mimi na masharti katika safu hii, aitwaye argv, nataka kupata saa yao mmoja mmoja, tu kama wiki iliyopita, sisi ni kwenda kutumia nukuu kama argv bracket 0 kupata Jambo la kwanza safu. Argv bracket 1 kwa kupata Jambo la pili, na kadhalika. muhimu hapa kuwa bado tuko 0 indexed-- bado tuko kuhesabu kutoka 0. Hivyo sasa hebu kweli kuweka kitu katika hili. Kama ningekuwa na mpango wa kukusanya kuitwa hodi kutoka faili inayoitwa hodi dot c, na kisha mimi kukimbia mpango kwamba kwa dot kufyeka hello, nini kompyuta yangu, mbali yangu, kuangalia kama chini ya Hood sasa mimi kukimbia dot kufyeka hello na hit Enter? Naam, hii ni labda nini tunaweza kuelezea kama maudhui ya kompyuta yako kumbukumbu, au RAM-- Random Access Memory. Kwa maneno mengine, kompyuta, kwa namna fulani kwa ajili yenu magically, unaweka namba 1 katika argc, AKA argcount, na unaweka literally kamba ./hello katika argv bracket 0. Mimi sijui, kusema ukweli, nini katika argv bracket 1 au 2 au 3, kwa sababu kama user ina si typed kitu chochote zaidi ya ./hello, tunakwenda kudhani kwamba haya ni zaidi uwezekano maadili ya takataka, hivyo kusema. Wale chunks ya kumbukumbu zipo, lakini siyo juu yetu kuangalia yao, kwa sababu argcount ni moja tu. Sasa, wakati huo huo, kama mimi kuandika kuendesha programu nyingine, cd, ambayo ni vizuri zaidi amri, katika prompt-- yako blinking cd nafasi Dropbox-- wakati mimi kukimbia kwamba, kwa hakika, wakati cd mpango ni kukimbia, argc, ndani ya kumbukumbu ya kompyuta yangu, ni kwa zaidi briefest pili namba 2. Na kisha argv bracket o ina cd, argv bracket 1 ina Dropbox, na kisha bila shaka amri tamati, hivyo wote wa kumbukumbu hii kimsingi huenda zake na ni kutumika kwa ajili ya kitu kingine. Na kwamba ni kwa nini nasema tu kupasuliwa pili. Wakati huo huo, kama sisi kufanya mkdir pset2, picha inaonekana karibu sawa, lakini kwa masharti mbalimbali ndani ya argv. Kama mimi kufanya Clang dash hodi hodi dot c, wazo moja. Zaidi stuff ni kujazwa katika kwa argv, na argc, bila shaka, ni 4. Hivyo kwa maneno mengine, ingawa safu hii dot dot inaweza kuwa dot, baadhi ya variable urefu, hivyo kusema, daima kujua ambapo mwisho wake ni, kwa sababu argc ni kwenda kuwaambia wewe katika hatua gani una kuacha kuangalia mambo katika argv. Unaweza tu kuangalia saa nne katika jumla katika kesi hii. Basi hebu sasa tuangalie, labda, mpango rahisi. Moja kwamba tu anasema hello kwa mtu kama Zamyla. Hivyo mimi kudai mimi nina kwenda kuandika mpango katika muda tu kupitia ambayo mimi naweza kufanya ./hello nafasi Zamyla, na kisha Mimi nataka mpango wangu na magazeti nje kitu super-rahisi kama "hello, Zamyla." Sasa katika siku za nyuma tumekuwa kutumika GetString. Hivyo katika siku za nyuma, hata kama wewe ni mpya kwa programu, ni tabia mbaya unaweza mjeledi juu ya mpango kwamba anatumia GetString na kisha anatumia printf kusema hi kwa Zamyla. Lakini hebu kutumia GetString wakati huu. Hebu badala kwenda katika Appliant na wala ni pamoja na kiwango mimi O dot h. Hebu pia ni pamoja na CS50 dot h. Sasa int kuu, na sasa mimi nina si kwenda kufanya utupu leo. Badala yake, mimi nina kwenda kufanya int argc kamba argv bracket wazi karibu bracket, si kubainisha idadi. Na sasa hapa ni yangu kinachojulikana kufanya. Nini mimi kwenda kufanya sasa ni, mimi nina kwenda kufanya kidogo ya leap ya imani, Mimi nina kwenda kudhani kwamba mtumiaji kwenda kutumia mpango huu kwa usahihi, na mimi nina tu kwenda kufanya printf hello,% sn. Hivyo hakuna jipya huko. Lakini nataka sasa kuweka chochote neno aina ya mtumiaji baada ya jina wa programu hiyo. Hivyo kama mimi kufanya nafasi ./hello Zamyla, mimi wanataka kwa namna fulani programmatically upatikanaji kunukuu unquote "Zamyla." hivyo mimi unaweza kwenda katika hoja yangu vector, safu yangu ya masharti, na kama amri, tena, alikuwa nafasi ./hello Zamyla, nini idadi kufanya mimi nataka kuweka katika argv hapa? Watazamaji: 1. DAVID Malan: 1, kwa sababu bracket 0 zinageuka ni kwenda kuwa jina mpango huo, kama sisi kuona. Hivyo bracket 1 ni neno la kwanza kwamba mimi, user, kuwa typed. Mimi nina kwenda mbele na kuokoa hii. Mimi nina kwenda katika folder yangu ambapo nimekuwa kuwekwa faili hii. Mimi nina kwenda kufanya kufanya hujambo 3. Comp IO ya OK. ./hello Zamyla kuingia. Je, mimi kufanya makosa? Mimi alikuwa hawakupata kwa mshangao mwenyewe kwa muda tu huko. Je, mimi kufanya makosa? Watazamaji: Jina. DAVID Malan: file ya kweli kuitwa hello3.c. Na mimi kwamba tu kwa ajili ya msimamo, kwa sababu tumekuwa alikuwa hello.c katika siku za nyuma katika code online. Basi hebu kurekebisha ./hello hii bracket dash 3 Zamyla. Kuingia. Na sasa tuna hello, Zamyla. Wakati huo huo, siwezi kubadili hali hii kwa kuwa Rob, au kweli neno nyingine yoyote. Lakini hebu kuzingatia kesi kona. Nini kinaweza unatarajia kitatokea kama Mimi si aina jina ya mtu yeyote wakati wote? Watazamaji: Error. DAVID Malan: kosa wa aina fulani, labda. Hebu angalia. Kuingia. Null. Hivyo printf ni kweli kuwa kinga kidogo ya us hapa, na literally uchapishaji Paren wazi null, lakini mambo hata mbaya zaidi yanaweza kutokea. Na tu kuonyesha kitu wewe kabisa haipaswi kufanya, hebu kwenda katika hapa na kuanza poking kuzunguka. Haki? Kama mimi kujua kwamba picha katika kumbukumbu ni kimsingi hii, argv bracket 1 ina Zamyla, argv bracket 0 ina ./hello, au ./hello-3. Je, ni katika bracket 2? Hivyo siwezi kujibu kwamba swali mwenyewe, haki? Siwezi kubadili tu 1 hadi 2. Mimi sasa wanaweza recompile hodi 3, ./hello3 Hebu zoom katika na hit Enter. Whoops. Hakuna quote alama. Kuvutia. Basi hiyo ni aina ya baridi kwa kuona nini kingine ni katika hapa. Hivyo kile kingine ni ndani ya mbali yangu? Hebu kuokoa ni kwa bracket 3. Kufanya hello3, ./hello-3. Curious. Na sasa hebu kupata kweli bold-- 50. Hivyo kwamba ni kweli mbizi kina ndani ya kumbukumbu ya kompyuta yangu. 50 bahati katika. Hivyo kufanya hujambo 3 ./hello-3. Curious. Haki zote, sasa mimi nina tu kwenda kupata reckless. Hebu kwenda 5,000. Wote haki. Hivyo basi mimi recompile. Kufanya hello3, ./hello-3. OK. Sasa baadhi ya wewe, kuna nguvu kuwa balbu ya mwanga kwenda mbali. Jinsi wengi una kuonekana ujumbe huu kabla? OK. Hivyo, kwa nini? Tabia mbaya are-- na kuna mbalimbali mambo ambayo yanaweza kusababisha hii, na kwa uwazi uko katika hali nzuri company-- tuna wazi unasababishwa kile kinachoitwa segmentation kosa. Na hadithi muda mfupi kwa leo, mimi mmewagusa sehemu ya kumbukumbu kwamba mimi unapaswa kuwa. Ambapo sehemu tu ina maana chunk ya kumbukumbu kwamba mimi unapaswa kuwa. Sasa kompyuta dhamana kwamba kama mimi kukimbia ./helloZamyla kwamba naweza kugusa argv kuwa bracket 0 na argv bracket 1. Lakini argc ni thamani 2, hiyo ina maana mimi ni tu allowed-- ni aina ya heshima system-- kwa kugusa bracket 0 na bracket 1. Kama mimi kwenda yoyote mbali zaidi, kuna kabisa kwenda kuwa kumbukumbu huko. RAM My ipo kimwili katika kompyuta. Lakini nani anajua nini huko? Hakika, mimi nina mbio nyingi mipango kwa wakati mmoja. Nipate kuwa seen-- kama ningekuwa si kufanya hili Appliant lakini juu ya Mac yangu au PC-- nipate kuwa kuonekana yaliyomo ya barua pepe. Mimi aliyoiona papo ujumbe Nimekuwa hivi karibuni alimtuma. Jambo lolote ambalo linaweza kuwa kuenea kote katika kumbukumbu wangeweza kupatikana kwa njia ya hii holela mraba bracket nukuu. Au, bado mbaya, unaweza kuwa na akamkuta mmoja wa nywila yangu kwamba ningependa hivi karibuni typed katika, kwamba programu hiyo kuhifadhiwa katika kumbukumbu hivyo kama kuthibitisha kwangu, na kisha tu aina ya kushoto ni katika RAM mpaka mimi kuacha mpango huo. Na hakika, hii ni moja ya hatari na moja nguvu ya kutumia lugha kama C. Unaweza kupata unfettered kwa yaliyomo yote ya kumbukumbu mpango huo, na guys nini mbaya unaweza hata kufanya katika cases-- wale hasa wakati sisi kupata programu ya mtandao kuelekea mwisho wa muhula, tutaweza kupitia upya topic-- hii ni poke kuzunguka, uwezekano, mtu ni ya kompyuta kumbukumbu na kupata mambo kama hayo curious kama tuliona huko. Au hata bado mbaya, nywila kwamba yeye au anaweza kisha kutumia kufanya mambo mabaya. Hivyo ni wazi mimi haipaswi kuwa kufanya hivyo, kwa sababu mambo weird kuanza kutokea. Hakika, huu ni mpango crashing. Hii itakuwa sawa ya Mac OS au Windows katika dirisha mpango tu kutoweka. hitilafu isiyotarajiwa imetokea. Katika amri ya mstari wa mazingira sisi kuona kitu kama hiki. Lakini hiyo ni kwa nini, ni mimi nina kugusa tu kumbukumbu hiyo haina mali yangu. Basi hebu kuilinda dhidi ya a hii kidogo katika njia tofauti kwa kuangalia mpango huu hapa. Hivyo, tena, mifupa kuwa tuliona earlier-- na nimekuwa yalionyesha hii int wakati. Na kuu hii muda wote ina kweli akarudi thamani. Hata ingawa katika zaidi ya hotuba yetu mifano tumekuwa kamwe mara moja kutumika kurudi kitu chochote katika kuu. Sisi tu kuandika printf karibu curly brace na hiyo ni yake. Lakini kwa ajili ya bure, nini compiler wamekuwa wakifanya kwa ajili yenu, kwa ufanisi, ni kurudi 0 kwa ajili yenu. Anarudi out-- na ni kidogo counterintuitive-- kwamba 0 ni nzuri. Ni haina maana uongo per se. 0 ni nzuri, na yoyote yasiyo ya 0 thamani, dunia imeamua, unaweza yanamaanisha makosa. Hivyo kama wewe wameweza milele messed kitu juu kwenye kompyuta yako, au mpango ina tu alikufa wewe na wewe wameweza kujipatia baadhi dirisha makosa juu ya screen yako, akisema kosa hasi 49 au kosa 23-- baadhi value-- inaonekana holela hiyo ni kwa sababu programu ina ngumu-coded thamani kama hasi au chanya 49 23 kwa kuwakilisha idadi wowote, kuthubutu kusema, ya mambo bilioni 4 iwezekanavyo ambayo inaweza kwenda vibaya katika mpango. Hivyo jinsi gani mimi kuchukua fursa hii, mimi mwenyewe? Naam, napenda kufungua mpango kwamba mimi aliandika mapema, na poke kuzunguka online kuitwa hodi 4. Na ni karibu sawa, ila kwa kuwa yake got kidogo ya makosa ya kuangalia. Katika kesi hiyo, nimekuwa tena alitangaza kuu kama kuchukua hoja mbili, lakini wakati huu, juu ya mstari 17, ilani Mimi nina kufanya kidogo ya sanity hundi. Mimi nina kufanya kuhakikisha kwamba argc ni sawa na ni sawa na 2. Kwa sababu kama ni, kwamba ina maana naweza salama kugusa si tu bracket 0, lakini bracket 1. Na mimi kwenda mbele na magazeti nje, katika kesi hii, Zamyla au Rob au chochote neno mimi typed nje. Na sasa tu kupata kidogo zaidi sahihi, Mimi nina kwenda wazi kurudi 0 kwa ishara ya yote ni sawa. Hakuna kitu kibaya kilichotokea. Lakini kwa mkataba huo, mimi nina kwenda kurudi 1, au kusema ukweli yoyote yasiyo ya 0 thamani, kama kitu potoka. Sasa user si kwenda kweli taarifa ya nini kinaendelea. Hakika kama mimi kwenda katika saraka hii, sisi zoom katika na kufanya kufanya hujambo 4, ./hello-4 Zamyla kutenda kama mimi kutarajia. Lakini kama mimi badala si aina kitu chochote, kitu inaonekana kutokea, lakini haina ajali. Na kama mimi badala kufanya kitu kama Rob ni mwangalizi katika kugawana Thayer-- habari holela. Lakini sikia, argv 1, 2, 3, 4, na 5 lazima sasa zipo katika kumbukumbu. Kwamba, pia, ni nini mpango wangu anatarajia, kwa sababu nimekuwa checked kama argc ni sawa na sawa 2 au si. Hivyo mimi nina sasa kulinda dhidi ya hii. Sasa, kama kando, sisi programmer-- au tuseme sisi users-- kamwe kuona kwamba 0 au 1 lakini kwa kutumia chombo aitwaye Debugger, au zana nyingine, kama tutaweza kuona kabla ya muda mrefu, unaweza programu unaweza kweli kuona nini inaweza kuwa kwenda vibaya ndani ya programu yako. Hivyo, maswali yoyote juu ya argc? Yeah. Watazamaji: Nimeona ambapo wao si alikuwa na tabia, [inaudible] tu alisema string nyota d, kama tabia ya asterisk comma. Je, wao ni sawa hapa? DAVID Malan: Wao ni. Hivyo swali ni, una programu mara kwa mara kuonekana kama hii si kusema string argv bracket lakini badala yake kusema kitu kama char nyota argv bracket. Na kuna hata wengine variants kwamba unaweza kuona. Hakika hao ni sawa. Kwa sasa, tuna haya aina ya magurudumu mafunzo juu ya katika mfumo wa kamba katika CS50 maktaba, lakini katika zaidi ya wiki au hivyo sisi ni kwenda kuondoa kwamba kizuizi kabisa na kwa kweli kuangalia nini char na nyota ni, na jinsi wale zinazohusiana na kumbukumbu uwakilishi zaidi kwa ujumla. Hivyo tutaweza kuja nyuma na kwamba. Maswali mengine juu ya argv yetu au argc? Yeah. Watazamaji: Kwa nini alifanya hivyo kurudi kosa [inaudible]? DAVID Malan: Kwa nini alifanya hivyo kurudi kosa only-- oh! Katika kesi ya awali, wakati sisi walikuwa futzing karibu na kumbukumbu, kwa nini alifanya hivyo tu kurudi kosa wakati mimi kwa kweli typed idadi kubwa? Short jibu ni, sisi tu got bahati. Kwa ujumla, kompyuta kutenga kumbukumbu katika chunks, na alinipa kubwa chunk wa kutosha kwamba I got mbali, bila ya kuwa niliona, ya kugusa bracket 2, bracket 3, bracket 50, lakini haraka kama mimi kusukuma bahati yangu, nilikwenda zaidi ya mipaka ya chunk ya kumbukumbu mfumo wa uendeshaji kunipa. Na kwamba wakati ni clamped chini na alisema, hakuna. Kosa segmentation. Yeah. Watazamaji: Ni jinsi gani kompyuta kujua thamani ya argc? DAVID Malan: Ni jinsi gani kompyuta kujua thamani ya argc? Wakati wewe kukimbia mpango, mpango huo, na asili ya haraka blinking, ni mitupu safu ya maneno kwamba walikuwa typed katika haraka, kwamba alikuwa typed katika haraka. Na hivyo ni wa uendeshaji wako mfumo wa kwamba kimsingi populates hoja kuu ya kwa ajili yenu. Hivyo hiyo ni moja ya huduma kwamba kupata, aina ya siri chini ya Hood ya mfumo wa uendeshaji. Maswali mengine? Yeah. Watazamaji: Je, msingi dampo maana yake nini? DAVID Malan: Nini msingi dampo maana yake nini? Hivyo hiyo ni swali zuri. Na napenda kurudi nyuma katika saraka hii hapa. Na wewe utakuwa taarifa kwamba Nina faili mpya huko. Ni kweli kuitwa ya msingi, na ni kweli kawaida heshima ukubwa wa file. Ambayo kimsingi ni snapshot ya yaliyomo ya kumbukumbu mpango wangu ya au RAM ilipokwama. Na hii itakuwa muhimu, uwezekano, diagnostically, mara moja sisi majadiliano katika hotuba baadaye na sehemu kuhusu debugging, kwa sababu unaweza kweli kufanya sawa na autopsy digital juu ya faili kwamba kusaidia kufikiri nini alifanya makosa katika mpango wako. Yeah. Watazamaji: Je, argc amri katika yenyewe, au unaweza jina hilo kitu chochote? DAVID Malan: Swali Good. Ni argc amri katika yenyewe, au unaweza jina hilo kitu chochote? Ni dhahiri si amri. Ni tu variable ya jina au jina hoja ya, na hivyo kabisa sisi angeweza kuwaita foo hii, tungeweza kuwaita bar hii, ambayo huwa kuwa go-kwa maneno kwamba kompyuta mwanasayansi huenda kwa. Lakini kwa mkataba, sisi kutumia argc na argv. Lakini hiyo ni binadamu mkataba huo, hakuna kitu zaidi. Wote haki. Hivyo zinageuka, nimekuwa kuwaambia kidogo ya lie-- nyeupe na kusema ukweli, katika siku zijazo, utaona tumekuwa kuwaambia nyingine nyeupe uongo. Lakini kwa sasa, tunakwenda peel nyuma mmoja wa haya. Katika kesi hiyo hapa wakati mimi hapo awali mbio mpango kama ./hello au ./hello-3 Zamyla, tulikuwa na yaliyomo ya yangu kumbukumbu ya kompyuta kuangalia takribani kama huu. Lakini kukumbuka nini string ni. Nini sisi kusema wiki iliyopita nini a kamba kweli ni chini ya Hood? Watazamaji: Array ya chars. DAVID Malan: Ni safu ya chars, haki? Hivyo sisi tupate kuwa safu ya masharti, lakini, kwa upande wake, kamba ni safu ya wahusika. Hivyo kama mimi kwa kweli unataka kuwa anal wakati mimi kuteka picha hii, Mimi lazima kweli kuwa kuchora ni kidogo zaidi kama hii, ambapo katika kila moja ya haya bahati ya argv yangu safu, kuna yenyewe kamba nzima kwamba yenyewe ni katika safu. Na sasa uongo nyeupe sisi ni kuwaambia leo ni kwamba picha haina kuangalia kabisa kama hii. Kwa kweli, viwanja kidogo ni kawaida nje ya rectangles kubwa huko. Lakini tutaweza kuja nyuma na kwamba kabla ya muda mrefu. Lakini hii ni ./hello backslash 0, kwamba kuwa tabia maalum kwamba demarcates mwisho wa kamba, na sisi tumepewa mwingine moja baada ya Jina Zamyla ya. Hivyo hii ina maana gani? Naam, napenda kwenda mbele na kufungua mifano mingine miwili ambayo inapatikana online. Moja inaitwa argv1.c na nyingine ni argv2. Ni mpango super-rahisi kwamba ni tofauti na mipango ya siku za nyuma kwa kuwa sasa mimi nina kutumia argc na argv up hapa. Na sasa mimi nina kuunganisha na kwa kitanzi katika line 18, kutoka i = 0 hadi kwenye argc. Na je, Mimi kwenda kufanya na line hii ya maadili ya hapa? Katika lugha ya Kiingereza. Hii ni wazi inaonyesha matumizi ya argc. Lakini katika lugha ya Kiingereza, nini ni nini kama mimi kukimbia mpango huu? Yeah? Watazamaji: Ni kwenda magazeti yako screen mara nyingi kama unataka. DAVID Malan: Hasa. Hivyo maneno chochote mimi aina katika haraka, ni kwenda regurgitate yao saa yangu moja kwa kila mstari. Basi hebu kwenda mbele na kufanya hili. Hebu kwenda katika saraka yangu na kufanya kufanya argv1 ./argv1. Na sasa, hebu kushika ni rahisi. Hebu kufanya kitu kwa mara ya kwanza. Ni alifanya magazeti nje jambo moja, na hiyo ni kweli jina la mpango, kwa sababu hiyo ni katika bracket 0. Kama mimi sasa kusema foo, ni kwenda kufanya hizo mbili, na kama mimi kusema foo bar, ni kwenda kusema mambo hayo matatu. Sasa hiyo ni kiasi fulani ya kuvutia, labda. Lakini kukumbuka kwamba argv ni safu ya masharti, lakini kamba ni safu ya chars, ili tuweze kuchukua mambo up notch na kuomba kwamba msingi mantiki na kufanya kificho kwamba inaonekana cryptic kidogo zaidi, admittedly. Lakini kwa kuwa nested kitanzi, kitu sawa kwa nini unaweza kukumbuka kutoka Mario, kwa mfano, kama wewe alifanya hivyo kwa njia hii. Hivyo sasa taarifa juu ya mstari 19, mimi nina tena iterating juu ya hoja yangu, kutoka 0 hadi kwenye argc. Na sasa katika line 21-- mimi nina kukopa hila kutoka mwisho week-- Mimi kuangalia nini ni urefu wa argv bracket i. Mimi nina kuhifadhi kwamba jibu katika n. Na kisha mimi nina kuunganisha kutoka j juu ya hadi n, ambapo j ni initialized kwa 0. Hivyo, mkataba kwa ajili ya kuhesabu kura. Mara ve kutumika i, kama una nested kitanzi, huwezi kutumia i tena, vinginevyo itabidi clobber, uwezekano, thamani nje ya kitanzi ndani. Hivyo mimi nina kutumia j na mkataba. Tunaweza kutumia k. Kama una zaidi ya k, pengine na nesting sana, kawaida. Lakini sasa, taarifa printf yangu line ni tofauti kidogo. Mimi si uchapishaji% s, mimi nina uchapishaji% c, ambayo, bila shaka, ni placeholder kwa char. Na sasa taarifa hii syntax. New. Hatujaona kabla. Lakini mantiki, hii ina maana tu kupata string ith katika argv na kupata jth nini? Watazamaji: Tabia. DAVID Malan: Tabia katika kamba hiyo. Hivyo kwa kutumia mabano mraba ikifuatiwa na mabano mraba, hii ni mbizi kwanza ndani ya masharti argv ya, na kisha ya pili mabano mraba na j ni mbizi ndani ya wahusika wa kwamba string hasa katika argv. Na kisha, tu kwa ajili ya hatua nzuri, Mimi nina uchapishaji line mpya hapa. Hivyo sasa napenda kwenda mbele na kufungua up window kidogo kubwa ili tuweze kuona hii katika action. Hebu kwenda katika kwamba folder. Na sasa kufanya kufanya argv-2-- whoops-- kufanya argv-2, ./argv 2. Kuingia. Na ni vigumu kidogo kusoma wima, lakini hiyo ni kweli jina la mpango, ikifuatiwa na line tupu. Sasa basi mimi kwenda mbele na kufanya foo. Vile vile vigumu kusoma, lakini ni kweli uchapishaji tabia ya moja kwa kila mstari. Na kama mimi kufanya bar, ni sasa uchapishaji wale mstari kwa mstari. Hivyo takeaway hapa ni sio sana kwamba, wow, kuangalia nadhifu mpya hila hii ambapo unaweza kupata yaliyomo ya wahusika safu ya maalum, lakini badala ya jinsi sisi ni kuchukua hizi za msingi mawazo kama Indexing katika safu, na kisha Indexing katika safu kwamba alikuwa katika safu, na tu kutumia mawazo sawa kwa mifano kidogo kisasa zaidi. Lakini misingi kweli kuwa si iliyopita, hata tangu wiki iliyopita. Sasa hii ni aina ya wakati, kwa kuwa, kukumbuka, katika wiki zero sisi alicheza na kitabu cha simu kama hii. Na hata kama hii ni wazi vipande ya kimwili ya karatasi, unaweza aina ya kufikiria kitabu cha simu kama safu. Hakika, kama ungekuwa na reimplement hii vipande vipande hayo ya karatasi katika kompyuta, pengine ungependa kutumia kitu kama safu ya kuhifadhi wote wa wale majina na namba kutoka njia yote kupitia Z. Hivyo hii ni nzuri, kwa sababu inaruhusu sisi nafasi, labda, kwa kuzingatia jinsi nguvu kweli kutekeleza kitu kama hicho. Kama ilivyo kwa mfululizo wa milango hapa. Hivyo kama mimi could-- tunahitaji moja kujitolea kuja juu ya up. Hebu angalia. uso usio wa kawaida labda, unfamiliar uso labda. Vipi kuhusu katika machungwa? Hapa. Orange shati, kuja juu up. Hebu kwenda mbele sasa na hoja milango haya juu kwa upande wa, hoja hizi nje ya njia kwa muda. Nini jina lako? Ajay: DAVID Malan: Ajay. Daudi. Nice kukutana na wewe. Wote haki. Hivyo tuna nyuma ya haya sita milango digital juu ya screen-- au, badala, milango saba juu ya screen-- rundo zima wa idadi. Na nimekuwa aliiambia chochote katika advance-- walikubaliana? Ajay: Hakuna mapema. DAVID Malan: All Mimi nataka wewe kufanya sasa ni kupata kwa ajili yangu, na kwa ajili yetu, kweli, idadi 50, hatua moja kwa wakati mmoja. Ajay: Idadi 50? DAVID Malan: idadi 50. Na unaweza yatangaza nini nyuma ya kila mmoja milango hizi tu kwa kugusa kwa kidole. Damn yake. [Kicheko] [Makofi] Vizuri sana kufanyika. OK. Tuna zawadi lovely tuzo kwa ajili yenu hapa. Pick yako ya sinema sisi kujadiliwa wiki iliyopita. Ajay: Oh, mtu. Oh, sijawahi kuona Spaceballs. DAVID Malan: Spaceballs. Wote haki. Hivyo kushikilia juu ya wakati mmoja tu. How-- hebu kufanya hili moment-- kufundishika jinsi gani unaweza kwenda juu ya kutafuta idadi 50? Ajay: Nilichagua nasibu. DAVID Malan: Hivyo wewe alichagua nasibu na got bahati. Ajay: Ndiyo. DAVID Malan: OK. Excellent. Hivyo sasa, alikuwa na wewe si waliopata bahati, kile kingine anaweza kuwa kilichotokea nyuma ya milango haya? Hivyo kama mimi kwenda mbele na yatangaza namba hizi hapa, wao kweli ni ili random. Na bora unaweza kuwa na kufanyika, kusema ukweli, ni na, hatimaye, katika hali mbaya zaidi, kuangalia yao yote. Hivyo wewe got super-bahati, ambayo ni nini tunatarajia kuwaita algorithm. Ndiyo, Congrats. Lakini sasa let's-- ucheshi na mimi, kama unaweza. Hebu kwenda tab hii hapa. Na hapa ni namba katika wazi kile inaonekana kuwa ili random, na hao. Lakini sasa kama mimi badala ya kudai kwamba nyuma ya milango haya ni idadi ya kwamba ni vyema. lengo ni sasa pia kupata yetu ya simu 50. Lakini kufanya hivyo algorithmically, na kutuambia jinsi wewe ni kwenda juu yake. Na kama wewe kupata hiyo, wewe kushika movie. Huwezi kupata hiyo, wewe kuwapa nyuma. Ajay: Hivyo mimi nina kwenda kuangalia ncha kwanza, ili kuamua kama there's-- [Kicheko na makofi] DAVID Malan: Hapa kwenda. Hebu tuangalie moja ya watangulizi Ajay ya, Sean, ambaye alikuwa si kabisa kama bahati. OK, hivyo kazi yako hapa, Sean, ni yafuatayo. Mimi siri nyuma ya haya milango namba saba, lakini zilizowekwa katika baadhi ya milango hiyo kama vizuri ni mengine namba mashirika yasiyo ya hasi. Na lengo lako ni kufikiri ya hii juu ya mstari wa namba kama tu safu. Sisi ni tu mlolongo wa vipande ya karatasi na namba nyuma yao. Na lengo lako ni, tu kutumia juu safu hapa, kupata mimi namba saba. Na sisi ni kisha kwenda kukosoa jinsi ya kwenda juu ya kufanya hivyo. Kupata sisi namba saba, tafadhali. Hapana 5, 19, 13. Siyo swali hila. 1. Katika hatua hii ya alama yako ni si sana nzuri, hivyo unaweza pia kuendelea. 3. Kwenda juu. Kwa kweli, siwezi kusaidia lakini ajabu nini wewe hata kufikiria juu ya. SEAN: Siwezi kuchukua kutoka tu safu ya juu. DAVID Malan: Ni safu ya juu. Basi nimepata tatu kushoto. Hivyo kupata me 7. [Watazamaji shouts MAPENDEKEZO] Hivyo wote wawili wa wale walikuwa ajabu kwa sababu tofauti sana. Hivyo hii ni mahali ambapo sisi kushoto mbali wakati iliyopita, na ufahamu muhimu hapa mara milango hizi walikuwa na idadi nyuma yao kwamba walikuwa Iliyopangwa, bora takeaway kwa ajili ya ambayo ni kwamba unaweza kufanya kimsingi bora katika example-- hii ya pili na kwa kweli, kwamba alikuwa Sean ya jaribio la kwanza na idadi random tu kama kabla, lakini kama hivi karibuni kama namba hizi ni sorted, kiasi kama kitabu cha simu, nini unaweza wazi nini? Au jinsi gani unaweza kujiinua maarifa kwamba? Yeah. Watazamaji: Unaweza kwenda nusu [inaudible]. DAVID Malan: Yeah. Hasa. Hivyo Ajay ya silika ya awali ilikuwa kuangalia mwisho, kama mimi kukumbuka, na kisha sisi aina ya kumaliza mfano haraka. Lakini kama sisi kuanza kufanya hii zaidi methodically pamoja na mistari hizo, lakini kuanzia labda katika katikati, kwa sababu wao ni sorted, haraka kama sisi yatangaza namba 16, sisi hiyo know-- na hebu kufanya hasa that-- sisi kwa hiyo tunajua kwamba 50, katika kesi ya leo, ina got kuwa na haki. Hivyo tu kama katika wiki sifuri wakati sisi akararua kitabu cha simu katika nusu na kurusha nusu ya tatizo mbali, sawa wazo hapa. Tunaweza kutupa nusu hii ya tatizo mbali. Na pengine nini anaweza kufanya algorithmically, mara moja unajua kwamba 50 lazima na haki, ikiwa ni mahali popote, ni kujaribu huko, katikati ya milango iliyobaki. Bila shaka, 50 ni ya juu ya 42, ili tuweze kutupa hii iliyobaki robo ya tatizo mbali, na, hatimaye, kutambua kitu kama 50. Lakini tu kama kwa kitabu cha simu, namba hizi walipewa kwetu tayari katika ili sorted, ambayo majani us na swali, jinsi ya kufanya wewe kupata mambo katika namna ili? Na, kusema ukweli, kwa nini gharama? Ni jambo moja kuwa mitupu kitabu cha simu na kisha kumvutia rafiki yako kwa kutafuta namba ya simu kweli haraka, haki? Akamtikisatikisa kurasa 32 nje ya kupata mtu nje ya kurasa bilioni 4, sisi alisema alikuwa mfano mmoja uliokithiri. Lakini ni kiasi gani wakati alifanya hivyo kuchukua Verizon kutatua kwamba kitabu cha simu? Muda kiasi gani alifanya hivyo kuchukua us kutatua namba hizi saba? Hilo ni swali kwamba tumekuwa hivi sasa kupuuzwa kabisa. Basi hebu kujibu swali hili sasa. Na sisi ni wote nje ya sinema sasa, lakini sisi kufanya kuwa na baadhi ya mipira stress. Kama, kusema, kujitolea nane bila akili kujiunga na sisi hapa? Hebu kwenda mbele na kufanya, vipi kuhusu nne ya wewe, tatu ya hapa? Kupata baadhi ya nyuso mpya. Na nne ya wewe huko? Na now-- hebu si upendeleo here-- na namba nane juu ya hapa ya mwisho. Kuja juu juu. Wote haki. Hivyo nini sisi hapa kwa kila mmoja wenu ni idadi. Kama Ningependa kwenda mbele, kuchukua idadi hii. Nini jina lako? Artie: Artie. DAVID Malan: Artie, okay. Wewe ni namba 1. Amin: Amin. DAVID Malan: Amin. Daudi. Wewe ni namba 2. Na kwenda mbele, kama mimi mkono wewe kipande cha karatasi, mstari wenyewe up mbele ya muziki anasimama katika utaratibu huo kama up huko. ANDY: Hi, Andy. DAVID Malan: Andy, ni nzuri ya kuona wewe. Namba 3. JACOB: Jacob. DAVID Malan: Jacob, namba 4. Karibu ndani. GRANT: Grant. DAVID Malan: Grant. Namba 5. Alanna: Alanna. DAVID Malan: Alanna, namba 6. FRANCES: Frances. DAVID Malan: Frances, namba 7. Na? RACHEL: Rachel. DAVID Malan: Rachel, idadi 8. Wote haki. Kwenda mbele na kupata mwenyewe katika utaratibu huu. Napenda kuweka moja iliyobaki muziki kusimama katika nafasi. Ambapo unahitaji kusimama? OK. Kwenda mbele na tu ya kuweka namba yako ambapo watazamaji unaweza kuona yao, muziki niangalie nje. Na hopefully, yetu ya kwanza sanity hundi here-- 4, 2, 6. Oh-oh. Kusubiri dakika. Hatuna 8. Mimi haja ya kuwaondoa katika mfano kwa namna fulani. Hapana Hapana, hiyo ni sawa. Hebu angalia. Tunaweza kufanya hivyo. Kusimama kwa. Kuna sisi kwenda. Sahihi. Wote haki. Hivyo, kwa sasa tuna 8, 1, 3 7, 5. OK. Excellent. Hivyo swali katika mkono ni, katika nini gharama, na kupitia mbinu gani, tunaweza kweli kutatua namba hizi hapa ili tuweze aina ya kazi nyuma, hatimaye, na decide-- ni kweli kuvutia, ni kweli ufanisi, kwamba naweza kugawa na kushinda kitabu cha simu? Je, ni kweli kwamba ufanisi Mimi unaweza kugawanya na kushinda wale vipande digital karatasi ya juu ya bodi, kama labda ni kwenda gharama yetu bahati katika muda au nishati au CPU mzunguko kwa kweli kupata takwimu zetu ndani ya baadhi ya amri sorted? Basi hebu kuuliza swali hilo. Off Hivyo kwanza, namba hizi ni katika random pretty much ili, na mimi nina kwenda kupendekeza algorithm moja, au mchakato ambayo tunaweza kutatua folks haya. Mimi nina kwenda kwa njia ya hii pretty naively. Na mimi nina kwenda kutambua kwamba ni aina ya mengi kwa ajili yangu wrap akili yangu karibu data zima kuweka mara moja. Lakini unajua nini? Mimi nina kwenda kufanya baadhi ya Kando rahisi sana fixes. 4 na 2 ni nje ya utaratibu, ikiwa lengo ni kwenda kutoka 1 juu ya hadi 8. Hivyo unajua nini? Mimi nina kwenda kuwa na wewe guys wabadilishane, kama wewe kubadili kimwili nafasi na vipande yako ya karatasi. Sasa 4 na 6, hizi ni kwa utaratibu. Mimi nina kwenda kuondoka wale kuwa. 6 na 8, hayo ni katika utaratibu. Kwenda waache kuwa. 8 and1, nje ya utaratibu. Kama wewe mbili bila akili swapping. Sasa 8 na 3, kama wewe guys yanaweza kubadili. 8 na 7, kama wewe guys yanaweza kubadili. Na 8 na 5, kama wewe guys yanaweza kubadili. Sasa, mimi kosa gani? Hakuna, ni wazi si. Lakini mimi kuwa alifanya hali bora, haki? Ilikuwa jina yako ni nini tena, idadi 8? RACHEL: Rachel. DAVID Malan: Hivyo Rachel ana ufanisi bubbled up pretty mbali, njia yote hadi mwisho wa safu yangu ya namba hapa. Na hivyo tatizo kwamba ni aina ya kutatuliwa. Sasa, ni wazi, 2 bado kuna haja ya hoja kidogo, na 4 na 6 na 1. Lakini mimi wanaonekana kuwa na kujipatia kidogo karibu na ufumbuzi. Basi hebu kuomba hiyo naive heuristic tena. 2 na 4, OK. 4 na 6, OK. 6 na 1, mm-mm. Hebu wabadilishane. 6 na 3, mm-mm. Hebu wabadilishane. 6 na 7 ni sawa. 7 na 5, nope. Hebu wabadilishane. Na sasa 7 na 8. Na nini jina yako tena? FRANCES: Frances. DAVID Malan: Frances. Hivyo sasa Frances ni bora hata katika nafasi, kwa sababu sasa 7 na 8 ni usahihi bubbled hadi juu. Hivyo 2 na 4, OK. 4 na 1, wabadilishane hebu. 4 na 3, wabadilishane hebu. 4 na 6, wewe ni OK. 6 na 5, wabadilishane hebu. Na sasa wale guys ni nzuri. Sisi ni karibu na hapo. 2 na 1, nje ya utaratibu, hivyo wabadilishane. Na sasa basi mimi kufanya sanity hundi. 2 na 3, 3 na 4, 4 na 5, 5 na 6, 6 na 7, 8. OK, hivyo sisi ni kosa. Lakini kwa gharama gani alifanya mimi aina ya namba hizi hapa? Naam, jinsi hatua nyingi alifanya mimi uwezekano kuchukua wakati kuchagua folks haya? Naam, tutaweza kurudi kwa swali hilo. Lakini, kusema ukweli, kama wewe got kuchoka kidogo, hiyo ni aina ya akifafanua katika kuwa hii haikuwa labda algorithm ufanisi zaidi. Na hakika, kusema ukweli, mimi nina jasho wote zaidi kutembea na kurudi. Kwamba hakuwa na kuhisi hasa ufanisi. Basi hebu jaribu kitu kingine. Kama wewe guys inaweza upya wenyewe kwa maadili haya nane. Kazi nzuri. Hebu tuangalie digital, kwa ajili tu ya muda kabla ya sisi kujaribu kitu kingine, nini ilitokea tu. Up hapa, wewe ni juu ya kuona taswira ya haya binadamu nane ambapo bluu na nyekundu baa kuwakilisha idadi. mirefu bar, kubwa idadi. mfupi bar, ndogo idadi. Na nini ni kwenda kuona ni katika ili random zaidi ya nane wao. Wewe ni kwenda kuona baa haya kupata yamepangwa kwa algorithm kwamba huo huo, au seti ya maelekezo, ambayo tutaweza wito tena Bubble aina. Hivyo taarifa, kila pili au hivyo, baa mbili ni taa juu katika nyekundu, ni kuwa ikilinganishwa na kompyuta. Na kisha kama bar kubwa na bar kidogo ni nje ya utaratibu, wao ni kuwa swapped kwa ajili yangu. Sasa hii ni incredibly tedious kuangalia hii, bila shaka, kwa muda mrefu sana, lakini taarifa takeaway-- baa kubwa kuhamia na haki, baa kidogo kuhamia upande wa kushoto. Hebu mimba mchakato huu na kasi ya hii up kuwa kwa kasi zaidi, ili tuweze kupata kiwango cha juu cha hisia ya kile, kweli, Bubble aina ni kufanya. Hakika, ni bubbling hadi upande wa kulia wa orodha, au safu, baa kubwa. Na kinyume chake, baa kidogo ni bubbling njia yao chini kwa upande wa kushoto, angalau kwa kasi zaidi kuliko sisi awali alivyofanya. Hivyo, vigumu kuona na binadamu, lakini kuibua hiyo ni kweli nini kilichojitokeza. Lakini hebu jaribu kimsingi mbinu mbalimbali sasa. Hebu jaribu mbalimbali algorithm ambapo sisi kuwa na wewe guys kuanza katika haya ya awali nafasi, ambayo ilikuwa utaratibu huu hapa. Na hebu kwenda mbele sasa. Na mimi nina kwenda kufanya kitu hata rahisi, sawa? Katika retrospect, swapping pairwise tena na tena, karibu kidogo wajanja. Hebu kufanya mambo hata zaidi naively, ambapo kama nataka aina folks haya, napenda tu kuendelea kutafuta kwa kipengele ndogo. Hivyo sasa hivi, 4 ni idadi ndogo nimeona. Mimi nina kwenda kukumbuka kwamba. No, 2 ni bora, na kukumbuka kwamba. 1 ni hata kidogo. 3, 7, 5. OK. One-- ni nini jina yako tena? Artie: Artie. DAVID Malan: Artie. Hivyo, Artie, kwenda mbele. Mimi nina kwenda kuvuta wewe nje ya mstari. Kama unaweza kurudi hapa. Na mimi haja ya kufanya chumba kwa ajili yake. Sisi kuwa na uhakika uamuzi hapa. Jinsi gani sisi kufanya chumba kwa ajili Artie hapa mwanzoni ambapo namba 1 ni mali? Watazamaji: Shift. DAVID Malan: Sawa, sisi inaweza kuhama kila mtu. Lakini kupendekeza optimization. Kwamba anahisi kidogo annoying kwa mimi kuuliza watu wanne kwa hoja njia yote chini. Nini kingine unaweza kufanya nini? Watazamaji: kubadili yao. DAVID Malan: kubadili yao. Na nini jina yako tena? JACOB: Jacob. DAVID Malan: Jacob, hoja. Ufanisi zaidi tu kuwa na Jacob wabadilishane maeneo na Artie, kinyume na kulazimisha zote nne za folks haya, asante sana, kwa msimamo wao sahihi. Nini kizuri kuhusu Artie sasa, yeye ni katika nafasi yake sahihi. Hebu kufanya hii tena. 2, hiyo ni idadi ndogo nimeona. 3, 7, 5. OK. 2 ni dhahiri ndogo. Je, si kufanya kazi yoyote. Hebu kufanya hivyo tena. 6. Madogo? 8. Nope. 4? Ooh. Hebu kumbuka 4. 3. Hebu kumbuka 3. 7, 5. Idadi ndogo nimekuwa kuonekana kwenye hii kupita ni 3. Kama wewe d kuja juu ya nje. Ambapo ni sisi kwenda kuweka wewe? Na nini jina lako? Alanna: Alanna. DAVID Malan: Alanna, sisi ni kwenda na kuwaondoa. Lakini hiyo ni ufanisi zaidi, tu wabadilishane watu wawili, kuliko kuwa na watu mbalimbali kweli sidestep juu. Sasa hebu kufanya hii tena. Mimi nina kwenda kuchagua 4, hivyo kuja juu ya nje. Na ambaye ni kwenda hoja? Idadi ya 8, bila shaka. Kama mimi sasa kupata namba 5, njoo huku nje. Namba 8 kwenda kupata kufukuzwa tena. Mimi sasa kwenda kupata namba 6 katika mahali. 7 katika mahali. 8 katika mahali. Nini sisi tu alifanya sasa ni kitu kinachoitwa uteuzi aina, na kama sisi taswira hii, ni kwenda kujisikia tofauti kidogo. Hebu kwenda mbele na kutokana na hili menu hapa, hii visualization-- hebu kubadili hali hii to-- kuja juu, Firefox. Hebu kubadili hali hii kwa uteuzi aina. Na hebu kasi yake juu kama kabla, na kuanza visualization sasa. Na algorithm hii ina kujisikia tofauti na hiyo. Juu ya kila iteration, kusema ukweli, ni hata zaidi ya moja kwa moja. Mimi nina kuchagua tu kipengele ndogo. Sasa, kusema ukweli, mimi got bahati kidogo kwamba wakati, kwa maana kwamba namna super-haraka. mambo walikuwa random. Ni si, kama tutaweza hatimaye kuona, kimsingi kwa kasi zaidi. Lakini hebu angalia tatu na ya mwisho mbinu hapa kama kwa nini kinaendelea. Basi hebu kwenda mbele na kuweka upya nyie wakati moja ya mwisho kuwa katika utaratibu huu hapa. Na sasa, mimi nina kwenda kuwa wajanja zaidi kidogo, tu kwa pande zote nje algorithms yetu. Mimi nina kwenda kufanya hivyo. Mimi nina kwenda si kwenda na kurudi sana. Kusema ukweli, mimi nina uchovu wa apitaye hii yote. Mimi tu kwenda kuchukua nini mimi nina kutolewa katika mwanzo wa orodha, na mimi nina kwenda kwa aina kwamba basi na pale. Hivyo hapa sisi ni. Namba 4. Mimi nina kwenda kuingiza idadi 4 katika orodha Iliyopangwa. Kufanyika. Mimi kudai sasa, na tu kufanya hili zaidi wazi, sehemu hii ya orodha yangu ni Iliyopangwa. Ni aina ya madai ya kijinga, lakini kwa kweli 4 ni Iliyopangwa katika orodha ya kipimo kimoja. Sasa, mimi nina kwenda kuchukua juu ya namba 2. Idadi 2 mimi nina sasa kwenda kuingiza ndani ya mahali pa haki. Hivyo ambapo gani 2 ni? Ni wazi, zaidi ya hapa. Hivyo kwenda mbele na kusonga nyuma, kama unaweza. Na kwa nini si wewe guys tu kuchukua muziki wako anasimama na wewe wakati huu. Na hebu kwa nguvu kuingiza wewe ndani ya mwanzo wa orodha. Hivyo kidogo zaidi kazi. Mimi alikuwa na hoja Jacob kote, na ni nini jina lako? Amin: Amin. DAVID Malan: Amin. Lakini angalau sikuweza kwenda na kurudi. Mimi tu kuchukua mambo kama mimi kwenda. Mimi tu kuingiza yao katika mahali pa haki. 6, hii ni kweli pretty rahisi. Hebu kuingiza wewe zaidi ya hapo, kama wewe nilitaka hoja juu ya kidogo. Idadi ya 8, pia ni rahisi sana. Right zaidi ya hapo. Damn yake. Idadi 1 hatuwezi tu wabadilishane na Amin hapa, kwa sababu kwamba kinaendelea kwa fujo up utaratibu. Hivyo tuna kuwa wajanja kidogo zaidi. Hivyo, Artie, kama unaweza nyuma hadi kwa sasa. Hebu kwenda mbele na kuhama sasa, tofauti na algorithms yetu ya awali, kufanya chumba kwa ajili Artie haki hapa mwanzoni. Hivyo mwisho wa siku, mimi nina aina ya kufanya nini nilitaka kuepuka kabla ya. Na hivyo algorithm yangu ni aina ya kuachwa, kielimu, kutokana na kile ni awali alikuwa. Mimi nina kufanya tu shifting katika hatua mbalimbali. Sasa mimi nina saa 3. Oh, damn. Sisi kufanya kazi zaidi tena. Basi hebu kushinikiza wewe nje. Hebu hoja 8, 6, 4-- oh oh-- na 3 ni kwenda haki pale. Basi angalau kidogo akiba wakati huu. 7, si kazi sana kufanyika. Hivyo kama unataka pop nyuma, hebu kuingiza wewe. Na mwisho, 5, kama wewe unataka kulirejesha nyuma, sisi haja ya kuhama wewe, wewe, wewe, mpaka tano ni katika mahali. Hivyo sasa kuona hii katika kiwango cha juu graphically, hebu kufanya algorithm hii visualization mara moja ya ziada. Hivyo hii tutamwita insertion aina. Tutaweza kukimbia tu kama haraka, na kuanza hapa. Na, pia, ina kujisikia tofauti. Ni aina ya kupata bora na bora, lakini ni kamwe kamili mpaka mimi kwenda katika na laini katika mapengo hayo. Kwa sababu, tena, mimi nina tu kuchukua kile Mimi nina wanapewa kutoka upande wa kushoto na haki. Hivyo sikuweza kupata hivyo bahati kuwa kila kitu kilikuwa kamili. Hiyo ni kwa nini sisi alikuwa na hawa kidogo mispositions kwamba sisi fasta juu ya muda. Basi wote wa algorithms hawa wanaonekana endesha wakati wa paces tofauti kidogo. Kwa kweli, ambayo unaweza kusema ni bora au kasi hadi sasa? Bubble aina, kwanza? Uteuzi aina, pili? Aina insertion, tatu? Nasikia aina baadhi uteuzi. Mawazo mengine? Hivyo ni zamu nje kwamba yote ya algorithms haya ni kimsingi tu kama ufanisi kama kila other-- au, kinyume chake, kama ufanisi kama kila mmoja, kwa sababu tunaweza kufanya kimsingi bora kuliko zote tatu ya algorithms haya. Na kwamba ni kidogo ya uongo nyeupe, pia. wakati mimi kusema kama ufanisi au kama ufanisi, kwamba angalau kwa maadili super-kubwa ya n. Wakati tuna watu nane tu hapa, au labda baa 50 au hivyo juu ya screen, utasikia kabisa taarifa tofauti kati ya algorithms hizi tatu. Lakini kama n, idadi ya watu, au idadi ya namba, au idadi ya watu katika simu kitabu, au idadi ya kurasa za mtandao katika database Google anapata kubwa na kubwa zaidi, tutaweza kuona kwamba wote watatu wa haya algorithms ni kweli pretty maskini. Na tunaweza kufanya kimsingi bora kuliko hiyo. Hebu tuangalie, hatimaye, nini algorithms haya huenda sauti kama katika mazingira ya wengine wachache kama vizuri kwa njia ya hii visualization hapa ambayo kuanzisha yetu na idadi ya algorithms. Hebu kwenda mbele na kumpongeza washiriki wetu hapa, ambao wote yamepangwa wenyewe vizuri sana. Kama Ningependa kuchukua zimefunguliwa zawadi. Unaweza kuweka namba yako pia. Na nini utaona, au tuseme kusikia, sasa, ni kwamba kama sisi kuweka sauti kwa kila mmoja wa baa haya na kuihusisha na programu, frequency mbalimbali za sauti, unaweza wrap akili yako zaidi audioly kuzunguka kile kila moja ya mambo haya kuangalia kama. ya kwanza ambayo ni insertion aina [Tani] Hii ni Bubble aina. [Tani] Uteuzi aina. [Tani] Kitu kinachoitwa kuunganisha aina. [Tani] Gnome aina. [Tani] Hiyo ni kwa CS50. Sisi kuona juu ya Jumatano. NARRATOR: Na sasa, "Deep Mawazo, "na Daven Farnham. Kwa nini ni kwa kitanzi? Kwa nini si kufanya vizuri? Ningependa kufanya kitanzi tano. [Kicheko]