[Powered by Google Translate] [Sehemu ya 3] [Less Starehe]
>> [Nate Hardison] [Chuo Kikuu cha Harvard]
>> [Hii ni CS50.] [CS50.TV]
>> Haki zote, hebu kuanza.
Karibu Wiki 4 ya CS50.
Kama wewe guys kufungua kivinjari na kufungua pset 3,
Kinyang'anyiro na CS50, tunakwenda kuanza kwenda
kupitia sehemu ya maswali hapo.
Tu kama wiki iliyopita, tutaweza kufanya kazi katika Spaces CS50,
kama wewe utakuwa pia kuvuta kwamba up kama vile,
na kama wewe kwenda mbele na kutembelea kiungo hiki kwamba mimi nimepata hapa juu kwa juu.
Ni wakati wa kuanza.
Sisi tumepewa hi yetu kidogo mpango hapa. Hakuna mambo.
Moja ya mambo ya kwanza nataka kufanya na nyie leo ni kwenda juu ya ufumbuzi chache
Tatizo kwa Set 1, aina ya ufumbuzi wa mfano,
tu hivyo unaweza kupata kujisikia kwa aina gani ya wafanyakazi code ni kuandika,
aina gani ya wanafunzi code nyingine ni kuandika,
na kuwa na wewe kuangalia ni kwa sababu mimi najua ni weird
wakati wewe kuwasilisha ufumbuzi wa tatizo kuweka na kupata maoni
juu ya toleo yako mwenyewe, lakini wakati mwingine ni manufaa kwa kuona jinsi watu wengine alifanya hivyo,
hasa wale ambao ni nice kuangalia.
Kwa sehemu kubwa, nilikuwa kweli hisia na ufumbuzi kwamba wewe guys zinazozalishwa.
Mimi bado kuanza kuangalia Tatizo 2S Set yako, lakini kama uko kitu kama kwanza,
maana yoyote lakini mambo mema.
>> Kama ukiangalia marekebisho yangu, hebu kuanza njia yote chini katika Revision 1,
na sisi ni kwenda kuchukua haraka kuangalia ufumbuzi Mario.
Kama wewe vuta hii juu, hizi programu kwamba sisi ni kwenda sasa ni sahihi.
Kulikuwa na si usahihi masuala na matatizo haya, lakini badala yake,
tunataka kuzungumza kidogo kuhusu masuala mbalimbali kubuni
kwamba walikuwa kuwa kutumika hapa.
Moja ya mambo ambayo ilikuwa ya kuvutia kuhusu ufumbuzi
ni kwamba alitumia kujenga mpya iitwayo pound define,
wakati mwingine pia inajulikana kama hash kufafanua.
Hebu kuvuta hapa.
# Define utapata kutoa majina kwa namba hizi katika programu yako.
Katika kesi hiyo, urefu wa upeo wa piramidi katika Mario
mara 23 na badala ya kuweka katika 23 yangu code-
tunataka kutaja kwamba kama coding ngumu 23 -
badala hii inatoa MAX_HEIGHT jina kwa idadi hiyo,
hivyo kwamba chini hapa katika kitanzi yangu do-wakati
unaweza kweli rejea MAX_HEIGHT
badala ya kuweka idadi 23 in
[Mwanafunzi] Nini faida ya kufanya hivyo?
Hiyo ni swali kubwa.
Moja ni readability.
Faida ya kutumia hii # define ni readability.
Wakati mimi nina kusoma hii code, naweza kuona nini kinaendelea.
>> Mimi naona katika hali hii hapa kwamba sisi ni kupima
kwa urefu kuwa <0, ambayo sisi inaweza kuwa pia defined
kwa kuwa na urefu wa chini au urefu min.
Faida nyingine ni kwamba naweza kisha kusoma mapumziko ya mstari wa kuona
kwamba sisi ni kuangalia pia kuhakikisha kwamba urefu si mkuu zaidi kuliko urefu max,
kwa sababu sisi ni kwenda kuendelea wakati urefu, ni mkubwa kuliko urefu max.
Faida nyingine ni-kama mimi zoom nje kidogo hapa-
kama mimi kukimbia mpango huu na mimi kukimbia, kusema, na 23 hivi sasa,
itakuwa magazeti nje safu yote 23 tu kama hiyo.
Lakini kusema mimi alitaka mabadiliko urefu max,
na sasa nataka kikomo urefu upeo wa mapiramidi
kuwa tu kusema-mtu, kwamba ilikuwa funky.
# Pamoja , # define MAX_HEIGHT,
na hebu sema tulitaka kuweka sawa na 10.
Sasa katika hatua hii, wote mimi na kufanya ni kubadilisha katika hii eneo moja.
Naweza recompile kificho, na sasa kama mimi kujaribu na aina katika 12,
itakuwa kuchochea mimi tena.
Katika kesi hiyo, tuko tu kutumia MAX_HEIGHT mara moja.
Siyo kwamba kubwa ya Hassle kwenda katika
na mabadiliko hayo katika kitanzi wakati ikiwa unahitaji.
Lakini katika mipango ambapo wewe ni referencing huo uchawi idadi
tena na tena, hii # define utaratibu ni kweli Handy
kwa sababu wewe tu mabadiliko hayo mara moja kwa juu ya faili-ni kawaida ambapo wewe kuweka yao-
na mabadiliko percolates kupitia mapumziko ya faili.
>> Mambo mengine nilitaka kumbuka katika zoezi hili kwamba mimi walidhani inaonekana ni nzuri,
moja ilikuwa kumtaja ya variables.
Unaweza kuona hapa kwamba sisi tumepewa vigezo integer kuitwa mstari na kinachoitwa urefu.
Spaces, hashes, inasaidia kufanya code kidogo zaidi someka,
inafanya kidogo kueleweka zaidi ni nini kweli kinachoendelea.
Hii ni tofauti kwa kutumia, wanasema, barua random
au tu gobbledygook kabisa.
Kitu ya mwisho mimi itabidi kumweka nje ni kwamba katika kwa tanzi,
mara nyingi hizi vigezo iterator, hizi anajibu kuwa wewe kutumia katika yako kwa tanzi,
ni ya kiwango na kawaida ya kuanza yao na ama i na kisha j na kisha k
na kwenda juu kutoka huko kama unahitaji vigezo zaidi,
na hii ni mkataba.
Kuna kura ya mikataba.
Ni inategemea lugha ya programu unatumia.
Lakini katika C, sisi kawaida kuanza na i.
Ni haina mantiki ya kutumia, kusema, au b
kutegemea hali.
Hiyo ni kwa ajili ya hii moja.
Kama wewe sasa kuvuta Revision 2, utaona mwingine Mario,
na moja hii ni sawa na mtu mwingine kwamba sisi tu kuona,
lakini haina kitu aina ya baridi.
Tukiangalia sehemu hii hapa hapa ndani ya ndani kwa kitanzi,
wao ni kutumia baadhi crazy kuangalia syntax hapa haki katika mstari huu.
Hii inaitwa operator ternary.
Ni kauli kama mwingine kufupishwa katika mstari mmoja.
hali hii ni sehemu ndani ya mabano.
Ni sawa na kusema iwapo j urefu <- i - 1.
Na kisha nini yaliyomo ya kwamba kama block itakuwa ni nafasi
na kisha yaliyomo ya kile kingine itakuwa ni hii #.
Ni kimsingi assigning nafasi ya kutofautiana hii.
Ni kuweka nafasi katika maudhui ya variable kuzuia,
kama hali hii ni alikutana, na kama hali si alikutana,
kisha variable block anapata hii #.
Na kisha, bila shaka, badala ya kujenga string nzima
na uchapishaji kila kitu nje mwishoni ufumbuzi hii Prints ni nje moja tabia kwa wakati.
Pretty cool.
>> Mwingine michache ya mambo ya kuangalia. Tutaweza kuendelea na tamaa.
Sasa kama sisi kuangalia tamaa, ufumbuzi huu kwanza
anatumia hawa # amefafanua kidogo kabisa.
Sisi tumepewa moja mara kwa mara hufafanuliwa kwa kila moja ya namba mbalimbali katika mpango huu.
Sisi tumepewa moja kwa senti kwa dola, moja kwa robo, dimes, nickels, na pennies,
na sasa kama sisi kitabu chini na kusoma kanuni,
tunaweza kuona kiwango kufanya-wakati kitanzi uchapishaji kila kitu nje.
Aina ya crux ya tatizo hili kwa kutambua kuwa
unahitajika kubadili kuelea kwamba kusoma katika kutoka user integer
kwa usahihi kufanya math, na hii ni kwa sababu
na floating kumweka idadi, kama kuongelea katika hotuba kwa ufupi,
kuwa si rahisi kwa usahihi kuwakilisha kila moja thamani kwenye mstari idadi
sababu kuna maadili infinitely wengi kati ya 3 na, kusema, hata 3.1.
Unaweza kuwa na 3.01 3.001 na 3.0001, na unaweza kuendelea.
Ni zinageuka wakati wowote ni kufanya kazi na fedha, mara nyingi unataka kubadilisha
ndani ya muundo integer hivyo kwamba wewe si kupoteza pennies na kwamba aina ya mambo ya ajabu.
Kufanya hivyo na rounding ilikuwa muhimu.
Ufumbuzi huu kutumika kikamilifu moja kwa moja, kubwa algorithm,
ambayo decremented idadi ya senti zilizobaki, kwanza kwa robo,
basi kwa dimes, basi kwa nickels, basi kwa pennies,
na kuongeza kwa idadi ya sarafu ya kila wakati.
>> Mwingine ufumbuzi kwamba tutaweza kuona, kama mimi zoom nje na kwenda kwa Revision 4,
alikuwa mwanzo ni sawa lakini div badala kutumika na Mod
haki zaidi ya hapa kwa hesabu ya senti.
Hii, idadi ya robo ni sawa na idadi ya senti kugawanywa na 25,
na sababu hii kazi ni kwa sababu sisi ni kufanya mgawanyo integer,
hivyo ni Kasseringen yoyote salio.
[Mwanafunzi] Je, tuna kutoa maoni search?
Ni kweli inategemea.
[Mwanafunzi] Wewe kutoa maoni zaidi ya code haki hapa.
Yeah, na hivyo kuna rundo la tofauti falsafa juu ya hili.
Falsafa yangu binafsi ni kwamba code yako ni kweli kweli,
kama code yako ni nini kweli utekelezaji kwenye kompyuta,
na hivyo code yako lazima kama someka kama inawezekana si necessitate kama maoni mengi.
Alisema, wakati wewe ni kufanya mambo ambayo ni aina ya Tricky mathematically
au algorithmically, ni nzuri kwa maoni wale ili uweze
kuongeza dimension ya ziada, safu ya ziada anaye kusoma code yako.
Katika hawa ufumbuzi, mara nyingi wao ni maoni zaidi sana kwa sababu tu
tunataka kuwa na uwezo wa kusambaza yao na kuwa na watu kuwachukua
na kuzisoma pretty urahisi.
Lakini dhahiri, napenda kukubaliana kwamba hii ni nzito.
[Mwanafunzi] Lakini wakati katika shaka, kwenda nzito?
Wakati katika shaka, kwenda nzito.
Baadhi ya watu wakati mwingine kusema kurudi 0 au kitu kama hicho.
Nadhani hiyo ni maoni ridiculous.
Wazi kwamba ni nini kinachofanyika.
Sihitaji Kiingereza kuniambia kwamba.
Wakati mwingine watu kuandika mambo kama "kthxbai!"
Hiyo ni aina ya cute lakini pia si-
si kwamba maamuzi tofauti kati ya pointi kutoa maoni au la.
Aina wale wa maoni ni haki ya ha, ha.
Cool.
>> Katika hatua hii, hebu kuanza kazi Tatizo Set 3 sehemu ya maswali.
Kama wewe guys kuvuta hii tena,
kama na wiki iliyopita, sisi siyo kwenda kuangalia kaptula katika sehemu hii.
Tutaweza basi guys kufanya hivyo kwa wakati yako mwenyewe na kuzungumza kuhusu maswali.
Lakini sasa katika sehemu hii tunakwenda kutumia zaidi kidogo wakati
kuzungumza juu ya chini ya misingi ya coding
kama tulivyofanya wiki iliyopita, na badala yake, sisi ni kwenda kuzingatia zaidi juu ya
kidogo zaidi ya nadharia, hivyo kuzungumza kuhusu tafuta binary na kisha kuchagua.
Kutoka wale ambao wamekuwa kufuatia pamoja na hotuba,
unaweza mtu nipe recap ya nini tofauti ni
kati ya binary tafuta na tafuta linear?
Nini kinaendelea? Uhakika.
Linear tafuta utafutaji kupitia kila kipengele katika orodha Iliyopangwa
moja kwa moja kwa moja kwa moja kwa moja,
na kisha tafuta mgawanyiko orodha katika makundi 2,
hundi kama thamani ya funguo kwamba wewe ni kwa ajili ya kutafuta ni zaidi au chini ya thamani midpoint
kwamba wewe tu kupatikana, na kama ni chini ya, unaendelea na orodha ya chini
na baadaye hugawanyika kuwa tena, anafanya kazi sawa
njia yote chini mpaka anaona midpoint kuwa sawa na thamani yenyewe.
Haki.
>> Kwa nini sisi huduma?
Kwa nini sisi majadiliano kuhusu tafuta binary dhidi tafuta linear?
Yeah.
Binary ni mengi kwa kasi, hivyo kama wewe mara mbili ya ukubwa wa tatizo
inachukua hatua moja zaidi kuliko mara mbili kama wengi.
Hasa.
Hiyo ni jibu kubwa.
Tafuta linear ni mengi sana kuangalia kipengele kimoja kwa wakati,
na kama tuliona juu ya siku ya kwanza kabisa ya hotuba
wakati Daudi akaenda kwa njia ya simu yake ya mfano kitabu
na ripped nje ya ukurasa mmoja wa kitabu ya simu wakati
na naendelea kufanya hivyo tena na tena na tena,
itakavyo kumchukua wakati kweli kwa muda mrefu ili kupata mtu yeyote katika kitabu cha simu,
isipokuwa, bila shaka, alikuwa anatafuta mtu katika mwanzo sana ya alfabeti.
Pamoja na tafuta binary, unaweza kwenda mengi zaidi,
na siyo tu mara mbili kwa haraka au mara 3 kwa haraka au mara 4 kwa haraka.
Lakini tatizo anapata na ndogo ndogo na ndogo kwa kasi zaidi.
Ili kuonyesha hili, tutaweza kuanza kuzungumza kuhusu nini kinaendelea
wakati sisi kuandika binary tafuta.
tatizo katika mkono ni kwamba kama nina safu ya idadi,
kusema, 1, 2, 3, 5, 7, 23, 45, 78, 12,323,
na kisha 9 kwa tani ya sekunde 0 baada ya hayo,
tunataka kuwa na uwezo wa kufikiri kweli haraka ni nini katika
hii safu ya namba.
Najua hii inaonekana silly kidogo na kidogo contrived,
kwa sababu sasa hivi ni.
Tuna safu ambayo haina vipengele wengi sana katika hilo,
na hata kama nikiwaulizeni moja ya wewe kufikiri kama au
23 ni katika safu, unaweza kufanya hivyo pretty haraka
tu na glancing saa hii na akiniambia ndiyo au hapana.
Analog kufikiria ni kufikiria kama hii walikuwa, kusema,
Excel spreadsheet na safu 10,000, safu 20,000.
Bila shaka, unaweza kufanya F amri au F kudhibiti na kuangalia kitu juu.
Unaweza pia kutumia filters na mambo ya utafutaji,
lakini kama alikuwa na kuangalia njia ya kuwa mstari wa faili kwa mstari kwa mstari,
itachukua muda mrefu wewe kupata hiyo.
Ni aina ya kama katika mfano kitabu cha simu, pia, ambapo
hakuna inaonekana kupitia ukurasa simu kitabu moja kwa wakati mmoja.
Kawaida, hawana wazi kwa katikati,
au katika kesi ya mengi ya vitabu simu na Mkwawa ambapo
wewe kweli kuwa ni keyed juu ya barua ya kwanza,
wewe flip kwa barua kwamba kwanza na kufungua na kuanza kwenda kupitia huko.
>> Nikumbushe ya jina lako tena >> Sam..
Sam.
Kama Sam akasema kuwa, linear tafuta mchakato ni kwenda kuwa kweli polepole,
na badala yake na tafuta binary, njia hii kazi ni kwamba
kila wakati sisi kwenda kwa iteration ya kompyuta yetu ya kutafuta,
tunakwenda kugawanya orodha katika nusu, kimsingi,
katika orodha mbili ndogo.
Na kisha juu ya iteration ya pili ya kitanzi, tutaweza kugawanya tena
katika orodha nyingine ndogo ndogo.
Kama unaweza kuona, tatizo anaendelea kupata na ndogo ndogo
kwa sababu sisi kuweka Kasseringen nusu ya orodha kila wakati.
Jinsi gani hii Discard kazi?
Tu kama ukumbusho, nini tunakwenda kufanya kama sisi walikuwa kompyuta
na sisi tulikuwa, kusema, kwa ajili ya kutafuta namba 5 katika orodha hii
ni kwamba tunataka kuchukua idadi katikati.
Katikati ya orodha hii, kwa sababu kuna 1, 2, 3, 4, 5, 6, 7, 8, 9, idadi 10,
tunatarajia kuchukua idadi aidha katika nafasi ya 4 au katika nafasi ya 5,
na tunatarajia wito kwamba katikati ya orodha yetu.
Pick idadi katikati.
Kisha, kama Sam alisema, tutaweza mtihani kuona kama idadi hiyo ni sawa
hadi kufikia idadi hiyo tunataka kupata au idadi yetu taka.
Kama ni sawa, basi tumekuwa kupatikana. Sisi kushinda.
Kama siyo sawa, basi kuna michache ya kesi.
kesi mbili ni ama idadi ina kuwa kubwa kuliko idadi sisi ni kuangalia,
au ni kidogo kuliko.
Kama ni kubwa zaidi, sisi hoja ya kulia.
Na kama ni kidogo, tunakwenda kwenye kushoto.
Na kisha sisi kurudia tena mchakato mzima
juu ya aidha nusu ya kulia au kushoto nusu ya orodha.
>> Tatizo la kwanza katika sehemu ya leo ni kufikiri
jinsi gani tunaweza kweli kuanza kueleza hii katika code C.
Sisi tumepewa pseudocode hapa.
Nini tutaweza kuanza kufanya ni mimi itabidi kuvuta up brand-mpya nafasi,
kuokoa hii marekebisho hivyo kwamba tuna maelezo haya kwa ajili ya baadaye,
tutaweza kufuta haya yote, na kisha nakala na kuweka kutoka kuweka tatizo
habari hii katika maeneo yetu, na hopefully hii haina kuvunja.
Perfect.
Kama wewe guys wote kufanya hivyo, nakala na kuweka kanuni hii katika nafasi yako mpya,
katika moja tupu.
Hebu jaribu Daniel. Kama wewe kukusanya na kukimbia katika mpango huu, gani kazi?
No >> Nini ni kusema?
Ni anasema kudhibiti fika mwisho wa kazi zisizo utupu.
Yeah, hivyo basi mimi kujaribu mbio.
Je, guys kuonekana huu kabla? Unajua nini maana ya hii?
Okay, hebu mchambue hii kidogo kidogo.
Ni kusema katika file.c kwenye mstari 9, safu 1 tuna makosa, kama wewe alisema,
na inasema kwamba ni inayotokana na onyo kosa na onyo kurudi aina.
Inaonekana kama kitu kinachoendelea na aina ya kurudi, ambayo hufanya akili.
Sisi tumepewa kazi zisizo batili, ambayo ina maana kwamba sisi tumepewa kazi
kwamba haina kurudi tupu.
kazi batili ni moja kwamba inaonekana kama hii:
utupu foo (), na ni batili kwa sababu ya aina ya kurudi ni batili,
ambayo ina maana kwamba kama sisi alikuwa na kitu fulani hapa
kama kurudi 1, tunatarajia kupata kosa compiler kwa hili.
Hata hivyo, tuna kazi zisizo utupu.
Yetu yasiyo ya utupu kazi katika kesi hii ni yetu tafuta kazi
sababu ina aina ya kurudi bool.
Wakati wa kusema kwamba kudhibiti fika mwisho wa kazi zisizo batili,
ni kwa sababu tafuta haina taarifa kurudi.
Ni si kurudi kitu chochote cha aina bool.
>> Tunaweza kurekebisha, na nini guys think
tafuta inapaswa kurejea kwa default?
Kile lazima kurudi default thamani ya search?
Kwa sababu hiyo ndiyo tunaweza kuweka mwishoni.
Charlotte, je, una-?
Kweli au uongo? >> Kweli au uongo.
Ambayo moja?
Uongo. Mimi sijui.
Uongo? Hebu jaribu hilo.
Kwa nini wewe kusema uongo kurudi? Hiyo ni kubwa Intuition.
[Charlotte] sijui.
Sisi ni kwenda na kurudi uongo katika kesi hii kwa sababu hii itakuwa default wetu
ikiwa kwa sababu baadhi ya orodha ni tupu au sindano
kwamba sisi ni kuangalia kwa haipo.
Kisha mwishoni sana, kama hatuwezi kurudi kweli mapema katika kazi hii,
sisi daima kujua kwamba kazi hii watasema nope, siyo katika safu.
Ni si katika haystack.
Sasa kama sisi kukusanya na kukimbia-napenda kuokoa hii ili tuweze kuvuta it up.
Sasa kama sisi kukusanya na kuendesha programu yetu, ni hujenga.
Sisi kupata haraka yetu kidogo.
Kama mimi hit 4-uh-oh.
Haikuwa magazeti nje ya kitu chochote. Inaonekana kama kila kitu kumalizika sawa.
Sisi tumepewa kujaza hii in
Kuongelea algorithm katika pseudocode kidogo iliyopita.
Hebu nione, ila hii,
na mimi itabidi kuvuta kwamba algorithm nyuma tena.
Hebu hit hii guy. Nope.
Kuna ni.
Tutafanyaje hili?
Nini itakuwa nzuri kwa ajili ya mkakati mapya mbali kanuni hii?
Una kuchukua idadi katikati.
Jinsi gani sisi pick namba katikati ya safu?
Mapendekezo yoyote?
[Mwanafunzi] Strlen kugawanywa na 2.
Strlen kugawanywa na 2. Hiyo ni moja kubwa.
Strlen matendo na aina maalum ya arrays.
Ni aina gani ya arrays?
Kamba arrays, tabia ya arrays.
Ni kwamba aina moja ya dhana kwamba tunataka kuomba,
lakini hatuwezi kutumia strlen kwa sababu hatuna safu ya wahusika.
Tuna safu ya ints.
Lakini ni nini strlen kupata kwa ajili yetu?
Unajua nini anapata kwa ajili yetu?
[Mwanafunzi] Strlen anapata yetu urefu.
Hasa, anapata sisi urefu.
Strlen anapata urefu wa safu kwa ajili yetu.
>> Jinsi gani sisi kupata kwamba katika mpango wetu binary search?
Jinsi gani unaweza kupata urefu wa safu?
[Mwanafunzi] Strlen?
Unaweza kupata urefu wa safu vizuri formatted C string kwa strlen.
tatizo, ingawa, ni kwamba hatuna safu kamba.
Kama sisi kuangalia nyuma katika kanuni hii, sisi tuna hii safu integer.
Jinsi gani tunajua ni muda gani?
[Mwanafunzi] Je, kuna moja sawa kwa endpoint, kama l int au kitu?
Ni zinageuka kuna kweli ni la, na hivyo katika njia, hii ni
moja ya mambo ambayo ni nzuri tu kujua kuhusu C,
kwamba hakuna njia ya kupata urefu wa safu
kama wote nitakupa ni safu.
sababu ni kazi na masharti, sababu strlen matendo,
ni kwa sababu kama string ni vizuri formatted,
itakuwa na kwamba maalum \ 0 tabia mwishoni sana.
>> Unaweza pia kufikiria kama una kamba yenye formatted
na hakuna \ 0 tabia huko, basi jambo zima haifanyi kazi.
[Mwanafunzi] Je, unaweza kuongeza \ 0?
Tunaweza katika kesi hii.
Tunaweza kuongeza baadhi ya aina ya \ 0
au aina fulani ya tabia akionyesha na kisha kutumia.
Lakini si kwamba kabisa kwenda kufanya kazi
kwa sababu 0 \ ni kwa ajili ya aina Char,
na hapa sisi tumepewa ints.
Jambo jingine ni kama tulikuwa kutumia thamani maalum
kama -1 kuonesha mwisho wa safu
kisha sisi kamwe kuhifadhi -1 katika arrays wetu integer.
Tunatarajia kuwa na kukwama.
Ni zinageuka kuwa njia pekee ya kupata urefu
wa safu katika C ni kweli kukumbuka ni
wakati kuweka it up na kisha kupita ni kuzunguka na safu
hivyo kwamba wakati mimi kuwa na kazi hiyo kwenda kufanya baadhi ya kazi
juu ya safu ya integers au ikifungwa au DOUBLES au kitu gani wewe,
Mimi pia haja ya kutoa kazi urefu wa safu,
na hii ndiyo hasa kile ambacho tumefanya hapa katika kazi ya utafutaji.
Kama ukiangalia, kile ambacho tumefanya wakati sisi kupita katika safu yetu hapa,
sisi pia kupita katika urefu, ukubwa.
Inajitokeza kuwa tumetoa wito huu variable hapa,
hii parameter au hoja.
Hii inaitwa hoja kazi ya orodha au orodha parameter,
na hawa pia wanaitwa hoja au vigezo.
Watu kutumia maneno tofauti katika nyakati tofauti.
Mimi wakati mwingine interchange yao mimi mwenyewe.
Ni hivyo tu hutokea kwamba variable hii hapa ni jina vile vile
hii # define hapa juu.
Lakini wao siyo kitu kimoja.
mtaji gani jambo.
>> Kama wewe kuangalia nini kinatokea hapa, sisi kutangaza
safu yetu int, ambayo tumekuwa aitwaye idadi.
Tumekuwa aliyopewa ni kawaida yetu, ambayo inalingana na wetu # define juu kwa juu.
Ni kwenda kuwa 8.
Na kisha wakati sisi basi wito wetu tafuta kazi chini chini,
sisi kupita katika idadi tunataka kutafuta, ambayo tumekuwa wakiongozwa,
wamezipata kutoka kwa mtumiaji.
Sisi kupita katika safu, idadi hii,
na kisha sisi pia kupita katika ukubwa wa safu,
na kisha thamani ya ukubwa 8 anapata kuhifadhiwa
au kupita kwa ukubwa huu integer variable kuitwa.
Tuna kawaida ya safu.
Sasa kama sisi kurudi nyuma kwa nini sisi walikuwa wanazungumza juu ya awali,
Nadhani Missy nililelewa uhakika kwamba kile sisi zinahitajika kufanya ni kupata urefu wa safu
na kuigawanya na 2, na kwamba atatupa midpoint.
Hebu angalia.
Naweza kuwa na mtu kuandika hii na kuokoa ni katika nafasi zao?
Vipi kuhusu Leila?
Naweza kuwa na wewe kuandika hii katika?
Andika mstari wa kwanza ambapo wewe kuchukua urefu wa safu na kupata midpoint
na kuhifadhi katika variable mpya.
Mimi nitakupa sekunde wanandoa. Je, uko tayari?
[Mwanafunzi inaudible]
Hakika, inaweza mimi na wewe mahesabu ya midpoint
wa safu haystack ndani ya kazi tafuta
kutumia urefu wa safu haystack, ambayo ni variable kawaida?
Hakuna Tricky hapa.
[Leila] Tu kawaida / 2 na tu-
Na kuokoa, na hit button Save hapa juu kwa juu,
na tutaweza kuvuta it up.
Perfect.
Kuna sisi kwenda. Ajabu.
>> Kama ni, itakuwa hii kukusanya?
[Leila] No, inahitaji kuwa juu zaidi.
[Nate] Yeah, hivyo nini tunahitaji kufanya nini?
[Leila] Kama midpoint int au kitu.
Ajabu. Yeah, hebu kufanya hivyo, int midpoint = kawaida.
Je, hii kukusanya?
Hebu kufuta maoni na kupata nje ya njia.
Nini si kukusanya kuhusu hili?
Sisi siyo kufanya kitu chochote kwa integer,
hivyo tunahitaji magazeti au kitu kama hicho.
Yeah, kwa uhakika.
Tutaweza kupata variable isiyotumika.
Nini kingine si kwenda kufanya kazi kuhusu hili?
Nadhani wewe alisema kitu, Sam. Semicolons.
Yeah, mimi kukosa semicolons hizo.
Ni kwenda kuwa kitu mara kwa mara katika mwenendo wa muda.
Kitu ya mwisho mimi itabidi kufanya ni mimi itabidi kuweka baadhi ya nafasi nyeupe upande
ya hii operator hapa, tangu kwamba ni kawaida jinsi sisi kufanya hivyo
kulingana na style mwongozo wetu.
Sisi tumepewa midpoint wa safu yetu.
Sasa kama sisi kukumbuka nyuma algorithm yetu,
kile ni hatua ya pili kwamba tulikuwa na kufanya mara moja tuna midpoint?
[Mwanafunzi] Kama ni kubwa zaidi [inaudible].
Yeah, hivyo tuna kufanya aina fulani ya kulinganisha, na nini sisi kulinganisha hapa?
Wewe alisema kama ni mkuu kuliko mimi. Ni kitu gani katika sentensi kwamba mnayosema?
idadi hiyo inakuja juu, kama kwamba ni kubwa zaidi kuliko midpoint, kisha kwenda hadi safu?
Hasa, hivyo idadi kuja juu wakati sisi-
sindano, hivyo sisi ni kulinganisha na sindano,
na nini sisi kulinganisha dhidi ya sindano?
Kwa sababu sindano ni nini sisi ni kuangalia kwa.
Sisi ni kulinganisha na kupata midpoint.
>> Lakini haina mantiki kwa kuangalia kuona
ikiwa sindano = midpoint?
Je, hiyo mantiki?
Je, mtu yeyote hawakubaliani?
Hebu kutoa ni kujaribu, kama (sindano == midpoint).
[Mwanafunzi] Je printf wewe kupatikana.
[Nate] Printf ("Sisi kupatikana ni \ n!");
Vinginevyo-I'm kwenda kuanza kufanya kitu tofauti hapa.
Mimi naenda kuanza kuweka braces kuzunguka kama kauli wakati wote
tu kwa sababu kama sisi kuongeza zaidi stuff, kisha
hatuwezi kupata compilers.
Yeah, Sam. Nimepata uhakika.
Tatizo ni kwamba midpoint inawakilisha nafasi katika safu,
lakini unaweza kupata kuwakilisha thamani katika nafasi ya safu.
Hiyo ni hatua kubwa.
Je kila mtu asikie yale Sam alisema?
Alisema kwamba kama ni midpoint
inawakilisha tu nafasi katika safu, lakini si kipengele halisi katika safu.
Kama unafikiri kuhusu code kama imeandikwa hivi sasa,
tunapotazama katika safu hii hapa chini, ambayo ina mambo 8 ndani yake,
nini ni thamani ya midpoint kwenda kuwa katika kazi hii?
[Mwanafunzi] 4.
[Nate] 4.
Kama sisi kuangalia kwa namba 4 -
na tunaweza tu kukimbia hii kanuni na kuweka kidogo kusikitisha uso katika hapa
kwa sababu hatukuona ni-kama sisi kukimbia hii code
kama ni haki ya sasa, ni kuweka, jengo, basi mimi kitabu chini,
na kama sisi kuangalia kwa namba 4,
sisi kuiona, lakini sisi hawakuwa kupata hii kwa printf ndiyo.
Moja ya sababu ni kwamba sisi hakurudi kweli,
lakini hawakuwa kweli sisi kupata idadi 4?
Na Sam ni kusema hakuna.
Nini sisi kupata?
Sisi kwa kweli kupatikana midpoint, ambayo kama sisi kuangalia safu chini hapa,
itakavyo kuwa kipengele katika index 4 kwamba sisi ni kuangalia,
ambayo ni 23.
>> Jinsi gani sisi kweli kupata kwamba kipengele katika midpoint
na si tu midpoint yenyewe?
[Mwanafunzi] Tunataka kuingia Char au kitu?
Gani kwamba kufanya, tu nje ya udadisi?
Je, unaweza kufafanua zaidi kidogo?
Una kubadilisha msimamo katika idadi,
hivyo nimepata kufanya baadhi ya uhusiano-Nadhani ni Char, lakini inaweza kuwa.
Yeah, hiyo ni hatua nzuri.
Tumekuwa kufanya mengi ya nafasi hii kuwabadili ndani ya chars, hawa wahusika,
katika miwili ya kwanza tatizo seti.
Ni zinageuka kuwa hapa, hii ni karibu sawa na
kupata tabia idh ndani ya kamba, kama kwamba inafanya hisia.
Hapa tunataka kupata kipengele midpoint.
Jinsi gani sisi kufanya hivyo?
Kevin, je, una mapendekezo yoyote jinsi sisi anaweza kufanya hivyo?
Unaweza kufanya haystack, wazi bracket, katikati, imefungwa bracket.
Je, unaweza kuandika kwamba kwa ajili yetu?
Ila ni katika hapa, na tutaweza kuvuta kwamba up.
Sisi ni kuangalia hayo mstari 9,
na sisi ni kutambua kwamba hatutaki kulinganisha sindano midpoint,
lakini badala yake, sisi unataka kulinganisha sindano
kwa kipengele katika nafasi ya midpoint ndani ya haystack safu yetu.
Cool.
Kuna sisi kwenda.
Yeah, kwamba inaonekana pretty nzuri, kama (sindano == haystack [midpoint]).
Sisi kupatikana.
Sasa kama sisi kukimbia nyuma code-we'll up kidogo kidogo-
ni inaandaa, ni anaendesha, na sasa kama sisi kuangalia kwa 4,
hatukuona sababu sasa sisi ni kweli kupata idadi 23.
Sisi ni kupata thamani 23, na kwamba ni nini sisi ni kulinganisha na sindano yetu.
Lakini hiyo ni nzuri. Hiyo ni hatua katika mwelekeo sahihi.
>> Hiyo ni nini sisi ni kujaribu kufanya.
Sisi siyo kujaribu kulinganisha sindano dhidi ya nafasi katika safu
lakini badala dhidi mambo halisi katika safu.
Kama sisi kuangalia nyuma tena sasa katika hatua ya pili katika kompyuta yetu,
ni hatua gani inayofuata?
Leila tayari kutajwa ni kwa ufupi.
[Mwanafunzi] Angalia kuona kama ni zaidi au chini ya na kisha kuamua ambayo njia ya hoja.
[Nate] Yeah, hivyo ni jinsi gani sisi kufanya hivyo?
Je, unaweza kuweka katika baadhi I'll-kuokoa hii marekebisho,
na kisha kama wewe kuweka katika mistari fulani fulani kufanya hivyo.
Yeah, Charlotte >> nina swali..
Je, si ni kuwa midpoint - 1 kwa sababu jambo la kwanza ni
ni 0 indexed, hivyo kama sisi kuweka 4, kwamba si kweli tabia sisi ni kuangalia kwa?
Ndiyo, na tatizo nyingine na kwamba ni-
hiyo ni samaki mkubwa, kwa sababu ni nini kinaenda kuishia kinachotokea uwezekano
kama sisi kusonga na sisi si milele kurekebisha awali?
Nadhani nini sisi tupate kuishia kufanya ni kujaribu kupata
kipengele katika nafasi ya 8 ya safu,
ambayo katika kesi hii haipo.
Sisi unataka kufanya baadhi ya aina ya uhasibu kwa ajili ya ukweli
kwamba tuna baadhi ya Indexing sifuri.
[Charlotte] Samahani, mimi maana ya midpoint - 1 katika mabano mraba.
Tunaweza kufanya hivyo.
Tutaweza kurudi suala hili katika kidogo tu.
Mara sisi kuanza kupata looping halisi,
kwamba wakati tutaweza kweli kuona hii zinahusika.
Kwa wakati kuwa, tunaweza kufanya hivyo, lakini wewe kabisa kulia.
Hiyo Indexing sifuri itakuwa na athari kwamba tunahitaji kutoa maelezo yake.
Hebu angalia.
>> Jinsi ni mkuu kuliko na chini ya-?
[Mwanafunzi] mimi kupata jinsi ya kufanya zaidi kuliko na chini ya sehemu.
Mimi tu hakuwa na uhakika nini na magazeti kama utapata kuwa ni chini ya midpoint haystack au zaidi kuliko.
Hapa naweza kuokoa kile I've-
[Nate] Yeah, kama wewe kuokoa kile nimepata, na tutaweza kuvuta it up.
Kuna sisi kwenda.
[Mwanafunzi] Na mimi kuweka alama swali kwa nini mimi sikujua.
[Nate] Hiyo inaonekana ni kubwa.
Hapa sisi tumepewa alama swali kwa sababu sisi bado hawajui
nini tunakwenda kufanya kabisa bado.
Nini tunataka kufanya-oops, sisi tumepewa braces baadhi wote funky juu yetu.
Tutaweza kusahihisha braces haya.
Kuna sisi kwenda.
Na hivyo nini tunataka kufanya, kulingana na kompyuta yetu,
ikiwa hatuwezi kupata sindano?
Sema katika kesi hiyo ni sindano chini ya kile sisi tunataka. Kevin.
Tu kuangalia nusu kushoto.
Haki, hivyo tutaweza kuweka maoni katika hapa kwamba anasema "kuangalia nusu kushoto."
Na kama sindano ni mkubwa kuliko haystack katika midpoint, je, tunataka kufanya?
[Mwanafunzi] Kisha ukiangalia nusu haki.
Angalia katika nusu haki, "kuangalia nusu ya haki."
Si pia shabby.
Okay, kwa hivyo katika hatua hii, mambo ni kuangalia pretty nzuri.
tatizo kwa kificho kama yaliyoandikwa ni nini?
[Mwanafunzi] Huna endpoints kwa halves.
Haki, hatuna endpoints kwa halves.
Sisi pia ni kwenda tu kwenda kwa njia hii mara moja.
Sisi ni tu kwenda kuangalia midpoint moja.
Aidha kipengele ni pale, au siyo.
Ili kukamilisha hili, tutaweza haja ya kufanya baadhi ya aina ya marudio.
Tunahitaji kushika kurudia mpaka tunaona kwamba
ama kipengele ni katika huko kwa sababu tumekuwa dhiki na hatimaye kupatikana,
au siyo katika huko kwa sababu tumekuwa inaonekana kupitia mambo yote
katika halves sahihi ya safu na kukuta kwamba hakuna kitu ni huko.
>> Kila mara tumekuwa got marudio hii kinachoendelea, nini sisi kwenda kutumia?
[Mwanafunzi] kitanzi.
Baadhi ya aina ya kitanzi. Ndiyo.
[Mwanafunzi] Je, tunaweza kufanya kitanzi do-wakati na kuwa ni kufanya hivyo na kisha wakati
sindano haina sawa-I'm uhakika ambapo mimi alikuwa anaenda na kwamba.
Lakini aina ya kama kufanya hivyo kwa muda mrefu kama haina thamani sawa kwamba pembejeo mtumiaji.
Yeah, hivyo hebu angalia, jinsi wapate hii kuandika yenyewe?
Wewe alisema hebu kutumia kitanzi do-wakati.
Wapi kufanya kuanza?
[Mwanafunzi] Haki baada ya kawaida / 2.
[Nate] Okay, na nini sisi kwenda kufanya?
Tutaweza kujaza wakati baadaye.
Nini sisi kwenda kufanya?
[Mwanafunzi] Je, si tunataka kufanya mambo yote sisi katika sehemu kama?
[Nate] Je mambo haya yote, kubwa.
Nakili na kuweka.
Oh, mtu.
Hebu angalia kama hii kazi, kama tunaweza tab hii zaidi.
Beautiful.
Okay, na sisi ila hii ili guys kuwa nayo.
Haki zote, na sisi ni kwenda kufanya hii wakati-
Je hali wakati ulipokuwa baada ya?
[Mwanafunzi] Wakati sindano haina sawa, hivyo kama hatua Moderators.
Lakini mimi nina uhakika nini hasa kwamba ni bado.
[Nate] Yeah, hii ni njia mojawapo ya kufanya hivyo.
Sam, una maoni?
[Sam] Nilikumbuka wakati mimi inaonekana katika video,
Mimi alichukua screenshot ya mmoja wa-kama alivyofanya wakati sisi pseudocode kwa ajili yake,
kulikuwa na baadhi ya uhusiano kati ya max na min.
Nadhani ilikuwa ni kitu kama kama max ni milele chini ya dk.
Got it.
[Sam] Au kama kama max ni si chini ya dk au kitu kama hicho,
kwa sababu kwamba ingekuwa na maana kwamba ve searched kila kitu.
>> Yeah, hivyo ni nini sauti kama max na min walikuwa mnayosema?
[Sam] Maadili kwamba-integers kwamba ni kwenda na mabadiliko
jamaa na ambapo sisi kuweka midpoint.
Hasa.
[Sam] Katika hatua hiyo, ni kwenda [inaudible] mahesabu max na min.
Midpoint ni hii max na wazo min.
Je, hiyo maana kufanya folks?
Kama sisi kuanza kuangalia jinsi sisi ni kwenda kufanya hili iteration,
wewe ni kabisa wa haki ya kuwa tunataka kutumia aina fulani ya kitanzi kufanya-wakati.
Lakini mimi nadhani kama sisi kukumbuka nini kinaendelea katika doa wa safu hii
na kile kinachotokea kweli-I'm kwenda kuandika juu hapa-
katika iteration sana kwanza ya utafutaji binary, tuna-
Mimi naenda kutumia b na e kuashiria mwanzo.
Na kisha mwisho wa safu yetu.
Tunajua kwamba mwanzo ni katika haki 4 zaidi ya hapa,
na tunajua kwamba mwisho ni saa 108.
Sema tuko kwa ajili ya kutafuta namba 15.
mara ya kwanza sisi kufanya hili, kama tuliona mapema,
midpoint ni ama kwenda kuwa 16 au 23
kutegemeana na jinsi sisi hesabu mambo ya nje.
Tangu sawasawa kugawa katikati atatupa nafasi hii
kati ya 16 na 23, tunaweza si sawasawa kuigawanya
au kuigawanya na kupata saa midpoint kweli.
Tutaangalia 16.
Tutaweza kutambua "Hey, 16> 15 kwamba sisi ni kuangalia kwa."
Ili kisha kuangalia nusu ya kushoto ya safu
nini sisi kuishia kufanya ni Kasseringen
hii yote juu fungu
na kusema, "Sawa, sasa endpoint yetu ni kwenda kuwa hapa."
iteration ya pili ya kitanzi yetu, sisi ni sasa kuangalia safu hii,
ufanisi baada ya kuondolewa sehemu hii kwa sababu sasa
kama sisi ni kuchukua midpoint kuwa tofauti kati ya mwanzo na mwisho,
sisi kupata midpoint yetu kuwa 8,
ambayo tunaweza kisha mtihani 8 kuona ambapo ni katika uhusiano na idadi sisi ni kuangalia kwa,
15, 15 kupata kwamba ni kubwa zaidi,
hivyo tuna kuhamia sehemu ya haki ya orodha,
ambayo sisi kujua sababu sisi ni binadamu, na tunaweza kuona.
Tunajua kwamba sehemu haki ni kwenda kuwa ambapo sisi kupata hiyo,
lakini kompyuta hajui kwamba, ili kile tutaweza kufanya ni kweli tutaweza
kuwa hii kwenda juu, na sasa mwanzo na mwisho
ni doa moja, hivyo midpoint inakuwa idadi tu katika orodha katika hatua hiyo,
ambayo ni 15, na tumekuwa kupatikana.
Je, hiyo kumwaga baadhi mwanga juu ambapo hii max nzima na nukuu min ni kwenda,
kuweka wimbo wa endpoints wa safu ili kubaini
jinsi ya kubana mambo chini?
>> Nini kingetokea kama hii walikuwa si sawa na 15 sasa?
Nini kama sisi walikuwa wanatafuta 15 na, badala yake, idadi hii pia walikuwa 16?
Tunatarajia kusema, "Oh, ni kubwa zaidi.
Sisi tunataka kurudi kwa upande wa kushoto. "
Na tunatarajia hoja e yetu kwa haki,
ambapo kiwango tuna endpoint kwamba itakuwa yanayokinzana.
Isingekuwa na uwezo wa kutafuta mambo yoyote zaidi
kwa sababu sasa tuna endpoint yetu na mwanzo wetu uhakika,
max yetu na min yetu, ni sasa flipped.
Sisi kutafuta njia safu nzima. Hatuwezi kupata chochote.
Hiyo ni hatua ambayo tunatarajia unataka kusema, "Sawa, tunakwenda kuacha hii algorithm.
Sisi si kupatikana kitu chochote. Tunajua si katika hapa. "
Je, huu kwenda?
[Mwanafunzi] Jinsi hasa gani kompyuta kubadili mwisho?
Jinsi gani mwisho kuishia kabla ya mwanzo?
mwisho mwisho juu kabla ya mwanzo
sababu ya math kwamba sisi ni kwenda kufanya kila wakati sisi kufanya hivyo.
njia ya sisi byta ni kama ukiangalia mara ya kwanza sisi kufanya hili byta
ambapo tuna mwanzo saa 4 na mwisho
njia yote chini saa 108 na midpoint yetu, kusema, saa 16 -
Mimi naenda kuweka upya hii nyuma 15-kama sisi ni kuangalia kwa 15,
sisi alijua kwamba sisi alivyofanya wakati sisi checked 16 na kuona kwamba hiyo ilikuwa kubwa
na alitaka Discard nzima haki ya sehemu ya orodha,
tuliona kwamba kile sisi walitaka kufanya ni hoja hii e haki hapa.
Ufanisi, e got wakiongozwa na moja kabla ya midpoint.
Kadhalika, wakati sisi alifanya hivyo iteration ya algorithm
na midpoint ilikuwa saa 8,
tulikuta kwamba 8 <15, hivyo sisi alitaka hoja b
moja iliyopita midpoint.
Sasa, mwanzo na mwisho ni wawili pamoja katika hii 15.
>> Kama tunatarajia imekuwa ikitokea kwa kuangalia kwa thamani nyingine, si 15,
au kama 15 hii alikuwa badala ya 16,
tunataka wamegundua kwamba e tunataka hoja moja kabla ya midpoint.
Sasa e itakuwa kuna flipped chini ya b.
Hebu kutembea kwa njia ya jinsi sisi kweli kuishia coding hii algorithm.
Tunajua kwamba tunataka kuwa na hii hesabu midpoint.
Tunajua pia kwamba tunataka kufuatilia mwanzo na mwisho wa safu
wa safu yetu ya sasa ili tuweze kufikiri
ambapo hii nusu ya kushoto ya orodha ni na ambapo nusu wa kulia wa orodha ni.
Sisi kufanya hivyo na ama kuanza na mwisho,
au tunaweza kuwaita min na max.
Mimi itabidi kutumia kuanza na mwisho wakati huu.
Tunapoanza, kama sisi kuangalia nyuma katika mfano wetu hapa chini,
mwanzo wetu ilikuwa kuweka mwanzo wa safu, kama asili.
Nini index ilikuwa hii? Nini yetu kuanza kuwa?
Daniel.
[Daniel] haystack [0].
[Nate] Yeah, hivyo tunaweza kuweka sawa na haystack [0].
tatizo, ingawa, ni kwamba hii inatupa si msimamo wa kipengele kwanza.
Hiyo inatupa index ya kipengele kwanza au thamani halisi katika nafasi ya kwanza.
[Mwanafunzi] Hiyo kubadilisha na 0.20?
[Nate] Nini hii kufanya ni-vizuri, itakuwa si kufanya lolote kuwabadili.
Nini itakuwa kufanya ni kitahifadhi 4 katika kuanza,
na basi itakuwa vigumu kufanya ulinganishi dhidi kuanza
kwa sababu kuanza itafanya thamani ya 4,
ambayo ni mwanzo wa safu yetu,
lakini sisi wanataka kufuatilia fahirisi katika safu
kinyume na maadili.
Tutaweza kweli matumizi 0, kama hiyo.
Kwa maana mwisho wa safu-Charlotte kuletwa hii hadi mapema kidogo.
Hii ni pale ambapo tutaweza kuchukua katika akaunti Indexing sifuri.
>> Charlotte, nini mwisho wa safu?
Je, ni ripoti ya mwisho?
[Charlotte] Ukubwa - 1.
Yeah, na ambayo kawaida tunapaswa kutumia?
Je, sisi kutumia mtaji ukubwa au ukubwa lowercase?
Capital kawaida.
Katika kesi hiyo, tunaweza kutumia mtaji kawaida.
Kama sisi alitaka kazi hii kuwa portable
na kutumia kazi hii katika programu nyingine,
tunaweza kweli matumizi ya kawaida lowercase.
Ni faini pia.
Lakini Charlotte kabisa haki ya kwamba tunataka kuwa na ukubwa - 1.
Katika hii-kumweka
[Mwanafunzi] Jinsi ni kwamba unaweza kutumia ukubwa uppercase?
Jinsi ni kwamba tunaweza kutumia ukubwa uppercase?
Ni zinageuka kuwa hawa # amefafanua ni kweli,
chini ya Hood, Nakala kama kupata na nafasi, kama kwamba inafanya hisia.
Wakati wewe kukusanya code yako, awamu preprocessing
wa compiler huenda kwa njia ya SVG,
na inaonekana kwa kila mahali kwamba ve yameandikwa mji mkuu kawaida,
na kazi ya kubadilisha kwamba Nakala halisi na 8, tu kama hiyo.
Katika hali hiyo, hii ni tofauti sana na kutofautiana.
Haina kuchukua nafasi yoyote katika kumbukumbu.
Ni rahisi Nakala badala ya hila.
Katika kesi hii, sisi ni kwenda kutumia kawaida.
Kutoka hapa hatuna wanataka kufanya baadhi ya aina ya marudio,
na sisi ni juu ya kufuatilia haki kwa kitanzi wetu do-wakati.
Tunataka kufanya kitu mpaka hali hana tena,
na kama tuliona mapema, tumeona kwamba kwamba hali
ilikuwa kwa kweli kwamba hatutaki mwisho
kuwa chini ya kuanza.
>> Hii ni hali yetu ya kuacha.
Kama hii hutokea, sisi kutaka kuzuia na kutangaza kama, "Hey, sisi sikuona kitu chochote."
Kueleza hili, sisi kufanya wanataka kutumia aina fulani ya kitanzi.
Katika kesi hii, itakuwa ni kitanzi do-wakati, kwa kitanzi, kitanzi wakati?
Tuna kitanzi do-wakati hapa.
Je guys kama mbinu kwamba?
Je, unafikiri sisi lazima mkabala tofauti?
Kevin, mawazo yoyote?
Tunaweza kuwa kitanzi wakati kwa sababu tunajua upeo
itakuwa kubwa kuliko min saa anyways mwanzo.
Yeah, hivyo hakuna initialization kwamba mahitaji ya kutokea.
Wale matanzi kufanya-wakati ni kubwa wakati una initialize kitu
kabla kisha kupima, ambapo hapa
Tunajua kwamba sisi siyo kwenda kuweka reinitializing wote kuanza na mwisho
kila pande ya kitanzi.
Tunajua kwamba tunataka initialize yao, kisha kuangalia hali yetu.
Katika kesi hiyo, mimi itabidi kweli kwenda kwa kitanzi rahisi wakati.
Ni zinageuka kuwa loops kufanya-wakati hutumiwa uungwana infrequently.
mengi ya maeneo hayana hata kufundisha gani wakati matanzi.
Wao ni nzuri kwa ajili ya utunzaji user pembejeo, hivyo tumeona mengi yao hivi sasa.
Lakini kwa kawaida na wakati matanzi ni mengi zaidi ya kawaida.
Ni zinageuka kuwa hali hii kama ilivyoandikwa
si kweli kufanya sisi mengi mazuri, na kwa nini ni hivyo?
Samahani, sijui jina lako.
Mimi nina Jerry >> Sorry.?
Ni B-O-R-U-mimi.
Oh, sawa.
Mimi wala kuona juu ya orodha yangu.
Oh, ni kwa sababu-oh, kwamba hufanya akili.
Je, una wazo la nini hii kitanzi wakati wanaweza kufanya kazi kama ilivyokusudiwa,
kama ilivyoandikwa na hali?
[Jerry] Una maana kama unataka mambo yote baada ya ndani-?
Yeah, hivyo kwamba moja.
Tupate kuwa na kuweka yote ya mambo haya kwenye kitanzi wakati, ambayo ni kabisa kweli.
kitu ambacho ni zaidi kidogo tatizo, ingawa, ni kwamba hali hii haina kazi.
[Mwanafunzi] Unahitaji flip yake.
Haki, hivyo hali hii si milele kuwa kweli awali njia tuliongea juu ya hilo.
Tunataka kufanya kitu mpaka mwisho <kuanza,
lakini tunataka kufanya kitu wakati
kuanza ≤ mwisho.
>> Kuna kwamba mabadiliko ya mantiki huko.
Mimi nina hatia ya kufanya makosa hayo wakati wote.
[Mwanafunzi] Kwa nini ni kuwa kuwa chini ya au sawa na?
Kwa sababu Unakumbuka kesi hiyo tulipata
ambapo kulikuwa na kipengele kimoja tu, na sisi walikuwa chini,
na sisi tulikuwa tunaangalia tu 15 katika safu yetu?
Na mwanzo wetu na wa mwisho wetu walikuwa kipengele hicho.
Tunataka kuhakikisha kwamba sisi kushughulikia kwamba kesi.
Kama sisi alifanya sawa chini ya,
sisi itakuwa na uwezo wa kupata chini ya safu 2-kipengele.
Mara sisi got chini ya kipengele kwamba mwisho, kama kwamba walikuwa kipengele yetu, tunatarajia kamwe kupata hiyo.
Sasa hapa, tunaweza kufanya hasa kama wewe walikuwa wakisema.
Tunaweza kuanza plopping stuff haki ndani ya katikati ya wakati kitanzi yetu.
Tunaweza plop katika midpoint yetu.
Tunaweza kuchukua yote haya ikiwa kauli,
kuvuta yao nje ya hii kitanzi do-wakati,
plop yao katika,
safi mambo juu kidogo,
na mimi itabidi kwenda mbele na kuokoa hii marekebisho.
Na katika hatua hii, sisi ni kupata pretty karibu.
Sam.
Nadhani wewe pia kuwa na int midpoint = ukubwa - 1/2.
Nimeipata, ukubwa - 1/2.
Je, kuna kitu kingine tunahitaji kubadilisha juu ya mstari huo?
Hiyo ilikuwa catch nzuri.
>> Nini ukubwa kufanya? Je, sisi milele kubadilisha kawaida?
Ili kuweka mstari kama hii, sisi kuwa na mabadiliko ya kawaida.
Tuna kubadilisha ukubwa kila wakati sisi kwenda kuzunguka kwa kitanzi.
Lakini kumbuka, tulipokuwa tunakwenda kupitia mfano wetu tu kidogo awali,
na sisi alikuwa mwanzo saa 4
na mwisho katika njia yote juu ya 108?
Jinsi gani sisi hesabu midpoint?
Walikuwa sisi kutumia kawaida?
Au sisi walikuwa kutumia kuanza na mwisho badala yake?
Ni tofauti kati ya mwisho na mwanzo.
Hasa, na jinsi gani hasa anapaswa kuandika kwamba mimi, Charlotte?
Tu mwisho - kuanza.
Wewe bila haja ya kufanya - 1
kwa sababu - 1 imekuwa ni pamoja na katika mwisho na kuanza tayari.
[Nate] Mkuu, uko kabisa kulia.
Hatuna kufanya - 1 kutokana na kwamba - 1 imekuwa ni pamoja na
na waliendelea kwa wakati sisi initialize variable mwisho.
>> Je, kuna kitu kingine mimi haja ya kufanya syntactically kuwa mstari huu mantiki?
[Mwanafunzi] Plus kuanza. >> Plus kuanza?
[Mwanafunzi] Mwishoni.
Sababu ni tu mahesabu urefu nusu.
Unahitaji kuongeza kuanza.
[Nate] nini huyu mahesabu kwa ajili yetu?
Kama tunafikiri kuhusu mwisho juu ya iteration hii ya kwanza kabisa ya kitanzi,
mwisho ni kwenda kuwa katika nafasi index 7.
Kuanza ni katika nafasi 0.
Kumbuka, sisi ni kuangalia kwa aidha
nafasi 3 au nafasi 4.
Tukiangalia math hii, tu kufanya hivyo zaidi kidogo yanayoonekana,
kuweka namba baadhi hapa, tuna 7, 0,
hivyo 7-0, na kisha / 2
ni 3 katika mgawanyiko integer, kwamba ni.
Basi tunahitaji kisha kuongeza nyuma yetu kuanza?
Sisi si katika kesi hii.
On iteration sana kwanza, itakuwa faini kwa sababu kuanza ni 0.
Lakini kama sisi maendeleo, sisi kufanya kweli wote tu haja
mwisho - kuanza / 2.
Kuna moja hila nyingine hapa, na kwamba ni moja ya precedence yaani.
[Mwanafunzi] Je, tunahitaji mabano?
[Nate] Hasa, na kwamba kwa sababu kama hatuwezi kuweka mabano haya,
kisha line hii itakuwa kufasiriwa badala
kama (mwisho) - (kuanza / 2), ambayo sisi dhahiri hawataki.
Jihadharini na wale sheria ya kuendelezwa.
[Mwanafunzi] Kwa nini si mwisho + kuanza?
Kwa nini si mwisho + kuanza?
[Mwanafunzi] Kwa nini ni kwamba?
Kwa nini itakuwa ni ya +?
Nadhani wewe ni haki.
[Mwanafunzi] Kwa sababu ni wastani?
[Nate] Mwisho + kuanza, wewe ni kabisa kulia.
Wow, mimi kabisa goofed. Wewe ni haki.
Kama tunafanya bala, tunataka unataka kuongeza kuanza nyuma in
Katika kesi hiyo, wewe ni haki sana kwamba tunataka kuchukua wastani wa miaka miwili,
hivyo hatuna unataka kuongeza yao, kinyume na Ondoa yao.
[Mwanafunzi] Pia ingekuwa kazi kama alivyofanya mwisho - kuanza / 2 + kuanza.
Ni ingekuwa kama sisi kufanya-naamini hivyo.
>> Kwa mfano, kama sisi walikuwa kuangalia kuanza,
na sisi ni juu ya kubadilishwa hapa
hadi 15.
Sasa kuanza ni katika nafasi ya 2.
Mwisho ni katika nafasi ya 7.
Kama sisi Ondoa yao, sisi kupata 5.
Wagawe kwamba kwa 2, sisi kupata 2.
Na kisha sisi kuongeza 2 nyuma,
na kwamba anapata sisi nafasi ya 4,
ambayo ni haki hapa, ambayo ni midpoint.
[Mwanafunzi] Je, tunahitaji kutunza wrapping?
Ni katika maana tunahitaji kutunza wrapping?
Kama Jumla au tofauti kati ya
kutegemeana na jinsi sisi kufanya hivyo ni si idadi hata.
Kisha kompyuta anapata kuchanganyikiwa kama wakati ni 2.5;
je, wewe hoja kwa upande wa kushoto au haki ya kuamua ambayo ni midpoint?
Got it.
Ni zinageuka kuwa na mgawanyiko integer,
sisi si milele kupata nambari hizi hatua floating.
Sisi kamwe kupata decimal.
Ni kabisa kuondolewa.
Kama una kompyuta kugawanya mbili vigezo int,
na moja ni 7, na nyingine ni 2,
huwezi kupata 3.5 kama matokeo.
Ni kupata 3.
salio itakuwa kuondolewa, hivyo ni ufanisi rounding-
si pande zote lakini badala ya sakafu, kama wewe guys ni ukoo na kwamba katika math,
ambapo wewe kabisa Discard decimal,
na hivyo wewe ni kimsingi truncating ni chini ya karibu
nzima ya msimamo, na idadi karibu yote.
[Mwanafunzi] Lakini kisha hiyo tatizo kwa sababu kama una safu ya vipengele 7
basi moja kwa moja inachukua kipengele 3 nje ya midpoint badala ya 4.
Jinsi gani sisi kukabiliana na kwamba?
Ni tatizo kwa sababu kama tulikuwa na safu ya 7,
ingekuwa pick 3 badala ya 4.
Unaweza kuelezea zaidi kidogo?
[Mwanafunzi] Kwa sababu kama una vipengele 7 kisha kipengele 4
itakuwa midpoint, haki?
Kumbuka maoni yako kuhusu kuwa sifuri indexed, ingawa.
[Mwanafunzi] Yeah, hivyo katika nafasi 3. Hiyo itakuwa midpoint.
Yeah.
Oh, sawa. Mimi naona nini.
Ni aina ya weird, kama sisi kupata kutumika wazo hili zima la
kupata kuondoa decimals.
Hiyo ni hatua kubwa.
Hebu kumaliza jambo hili.
Tumekuwa mahesabu midpoint yetu.
>> Sisi ni kupima ili kuona kama sindano yetu ni sawa na thamani ya kati.
Sisi ni uchapishaji kwamba sisi kupatikana, lakini kwa kweli, je, tunataka kufanya katika hali hii?
Tumegundua hiyo, hivyo tunataka basi mpigaji kujua kwamba sisi kupatikana.
Sisi tumepewa kazi hiyo ni ya bulin typed kazi.
njia ya sisi kuonyesha kwa mpigaji wa kazi yetu kwamba sisi ni tayari kwenda
ni sisi kusema, "Hey, hii ni kweli."
Jinsi gani tunafanya hivyo, Kevin?
Wewe nodding kichwa yako >> [Kevin] Kuongeza kurudi kweli..
[Nate] Hasa, kurudi kweli.
Sasa, kama si sawa, ni jinsi gani sisi kuangalia nusu kushoto?
Mawazo yoyote?
Stella, mawazo yoyote?
Unahitaji kuweka msimamo mpya kwa ajili ya mwisho.
Yeah.
Hivyo tuna kufanya nafasi ya midpoint - mwisho.
Mkuu.
Tunahitaji kuweka msimamo mpya kwa ajili ya mwisho
kuangalia nusu kushoto.
Hii ilikuwa nini kuongelea kabla ambapo
Mimi kushika kurejea mfano huu.
Mimi kuanza hapa, na kisha mimi kuwa na mwisho njia yote juu hapa.
>> Tena, kama sisi ni kuangalia kwa 15, na midpoint yetu ni saa 16,
na sisi kutambua, "Lo, 16 ni kubwa zaidi.
Sisi unataka kuhama kwa nusu kushoto. "
Tunataka basi hoja ya mwisho 15,
na sisi kufanya hivyo kwa kuchukua moja mbali kutoka midpoint
na kuweka kwamba kama mwisho wetu mpya.
Aidha, kama tunataka kuangalia katika nusu kulia, ni jinsi gani sisi kufanya hivyo?
Je, una wazo?
[Mwanafunzi] Wewe tu kuweka kuanza midpoint + 1.
[Nate] Mkuu.
Na sasa katika kesi ya kwamba hatuwezi kupata chochote,
gani kwamba kupata huduma ya kuchukuliwa kwa ajili yetu?
Daniel, je, hiyo kupata huduma ya kuchukuliwa kwa ajili yetu?
[Daniel] No
[Nate] Kama sisi kufanya hivyo kwa kupitia safu nzima na sisi si kupata chochote,
ambapo ingekuwa kwamba kuchukuliwa huduma ya, au lazima sisi kuchukua huduma hiyo?
[Daniel] hali wakati.
[Nate] Yeah, hali wakati, hasa.
Ni itachukua huduma ya kwenda kupitia safu nzima kama hatuwezi kupata chochote.
Hii kitanzi wakati itaisha.
Sisi kamwe kuwa wamekutana na hali hii,
na tunaweza kurejea uongo.
Tunaweza pia kuondoka hii ikiwa katika hapa kama hii
kwa sababu kama hii kama maelezo ni ya kweli,
na kazi yetu kurudi,
na hivyo tutaweza kimsingi abort kazi hii katika hatua hii
wakati sisi kurudi kweli.
Lakini nini kinatokea kwa muundo huu hapa?
Je, hii kazi kabisa, au kuna baadhi flaw mantiki katika huko?
>> Kuna baadhi ya flaw mantiki huko, na njia ni kuanzisha.
Nini kinaweza kuwa kitu gani?
[Mwanafunzi] Kwa nini unahitaji - na + 1s?
Kwamba anaweka safu yetu hadi kuwa kushoto wetu mpya nusu na nusu ya haki.
[Mwanafunzi] Lakini kwa nini hawakuweza kufanya hivyo bila - 1s na + 1s?
[Nate] Tunaweza kuweka sawa na midpoint?
Nini kinaweza kuwa tatizo kuhusu hilo?
[Mwanafunzi] mimi nadhani ni ufanisi kwa sababu wewe ni kuangalia thamani ambayo tayari imekuwa checked.
[Nate] Hasa, hivyo ni Sam kabisa kulia.
Kama kuweka mwisho na kuanza sawa na midpoint
badala ya - 1 na 1 + reflectively,
wakati fulani katika siku za baadaye sisi kuishia kuangalia midpoint tena.
[Mwanafunzi] Nilianza pset, na kisha mimi alikuwa na kitu kama hicho
ambapo mimi nilimsahau 1 +, na alikwama katika kitanzi usio.
Haki, kwa sababu wakati fulani wewe kamwe kwenda kupata kuanza na mwisho
kwa kweli yanaingiliana.
Cool.
Kuna moja zaidi flaw mantiki, na kwamba ni kwamba hii lazima dhahiri kuwa
mwingine kama.
Kwa nini wapate kuwa kuwa?
>> Sababu ni kama si mwingine kama-Uliona hiyo, Kevin?
[Kevin] Yeah, kwa sababu wewe ni kubadilisha mwisho uhakika.
[Nate] Hasa.
Tunabadilisha endpoint,
na kama ni maandishi kama hii we'll-kufanya maeneo ya kati-
itakuwa kuangalia hii kesi.
Kesi hii, kama ikifanikiwa, mapenzi abort nje ya kazi.
Basi itakuwa kuangalia hii kesi ya pili,
na kama hii inafanikiwa, itakuwa kurekebisha endpoint,
na basi itakuwa kuendelea na kuangalia hii kesi.
Lakini katika hatua hii, hatutaki ni kuendelea kuangalia.
Bahati nzuri, sisi si upya midpoint hapa,
na tunajua kwamba kesi hii haitafaulu.
Lakini sisi dhahiri wanataka kuweka mwingine kama huko
hata ingawa nguvu-katika kesi hii
tangu sisi siyo kurekebisha midpoint, ingekuwa kwamba kufanya mabadiliko?
Hapana, kwa sababu hizi kesi zote kipekee.
Tena, mbaya wangu.
Hatuna, nadhani, wanahitaji hii mwingine ikiwa.
Tunaweza kutoa ni kujaribu na kukimbia na kuona nini kinatokea.
Ujenzi, kosa ilitokea.
Ni pengine kwa sababu mimi kushoto haya ya b na e katika hapa.
Je, nina yoyote zaidi ya hadi wale saa ya juu?
Haionekani kama hiyo.
Sisi zoom nje, kujenga,
kuna unaendelea, hivyo sasa kama sisi kutafuta 15,
ndiyo.
Hebu zoom in
15, ndiyo. Tunaweza kukimbia tena.
Kuweka chanzo code, kujenga, kuendesha.
Tunaweza kutafuta kwa kitu kama 13,
na hatuwezi kupata kitu chochote uchapishaji nje, hivyo si kutafuta kuwa kwa ajili yetu.
Hiyo ni kubwa, kwa sababu si katika orodha yetu.
>> Sisi ni sasa nje ya muda.
Hiyo itakuwa ni kwa wiki hii.
Shukrani kwa ajili ya kujiunga, na kuona wewe baadaye.
>> [CS50.TV]