[Powered by Google Translate] [Bubble Raða]
[JACKSON STEINKAMP Harvard]
[ÞETTA ER CS50. CS50TV]
Bubble tagi er dæmi um flokkun reiknirit -
það er aðferð til að flokka safn af þáttum í
hækkandi eða lækkandi röð.
Til dæmis, ef þú vildir að raða fylki sem samanstendur af fjölda
[3, 5, 2, 9], rétta framkvæmd Raða Bubble myndi skila
raðað array [2, 3, 5, 9] í hækkandi röð.
Nú ætla ég að útskýra í sauðakóðanum hvernig reiknirit virkar.
>> Við skulum segja að við erum að flokka lista yfir 5 heiltölur - 3, 2, 9, 6, og 5.
Reiknirit hefst með því að horfa á fyrstu tvo þætti, 3 og 2,
og athuga hvort þeir eru út af röð miðað við hvert annað.
Þeir eru - 3 um meira en 2.
Til að vera í hækkandi röð, ættu þeir að vera á hinn veginn.
Svo skipta við þá.
Nú lítur listinn svona út: [2, 3, 9, 6, 5].
>> Næst skaltu líta við á öðrum og þriðja þætti, 3 og 9.
Þeir eru í réttri röð miðað við hvert annað.
Það er, 3 er minna en 9 þannig að reiknirit ekki skipta þeim.
Næst skaltu líta við á 9 og 6. Þeir eru út af röð.
>> Svo þurfum við að skipta á þeim vegna þess að 9 er meiri en 6.
Loksins, horfum við á síðustu tvær heiltölur, 9 og 5.
Þeir eru út af röð, svo þeir verða að vera skipti.
Eftir fyrsta heila umferð í gegnum listann,
það lítur svona út: [2, 3, 6, 5, 9].
Ekki slæmt. Það er nánast raðað.
En við þurfum að keyra í gegnum listann aftur til að fá það raðað alveg.
Two er minna en 3, svo að við skipta þeim ekki.
>> Þrír er minna en 6, svo að við skipta þeim ekki.
Sex er meiri en 5. Við skipti.
Sex er minna en 9. Við skipti ekki.
Eftir að seinni umferð í gegnum, það útlit eins og this: [2, 3, 5, 6, 9]. Perfect.
Nú, við skulum skrifa það í sauðakóðanum.
Í grundvallaratriðum, fyrir hvert frumefni á listanum, þurfum við að líta á það
og þáttur beint að sér.
Ef þeir eru út af röð miðað við hvert annað - það er, ef þátturinn á vinstri
er meiri en einn á rétt - við ættum að skipta um tvo hluti.
>> Við gerum þetta fyrir hvert frumefni á listanum, og við höfum gert einn fara í gegnum.
Nú verðum við bara að gera framhjá-í gegnum nógu oft til að tryggja lista
er fullkomlega, rétt raðað.
En hversu oft eigum við að fara í gegnum listann til
tryggja að við erum að gera?
Jæja, versta er ef við höfum alveg aftur á bak lista.
Þá tekur það fjölda líða throughs jafn fjölda
af þætti N-1.
Ef þetta er ekki skynsamleg innsær, hugsa um einfalt mál - listi [2, 1].
>> Þetta er að fara að taka einn fara í gegnum til að raða rétt.
[3, 2, 1] - Í versta falli er þessi með 3 þáttum raðað aftur,
það er að fara að taka 2 endurtekningar til að flokka.
Eftir einn endurtekning, það er [2, 1, 3].
Annað fæst raðað array [1, 2, 3].
Svo þú veist að þú aldrei þurft að fara í gegnum fjölda, almennt,
meira en n-1 sinnum, þar sem n er fjöldi staka í fylkinu.
Það heitir Bubble Raða vegna stærstu þættir hafa tilhneigingu til að "kúla-upp '
til hægri frekar hratt.
Í raun, þetta reiknirit er mjög áhugavert hegðun.
>> Eftir m endurtekningar gegnum allt fylki,
á rightmost m þættir eru tryggð
að vera flokkaður í rétta stað þeirra.
Ef þú vilt sjá þetta fyrir sjálfan þig,
við getum reynt það á alveg afturábak lista [9, 6, 5, 3, 2].
Eftir eina umferð um allan listann,
[Hljóð skrifa]
[6, 9, 5, 3, 2], [6, 5, 9, 3, 2], [6, 5, 3, 9, 2], [6, 5, 3, 2, 9]
á rightmost þáttur 9 er í rétta stað.
Eftir seinni framhjá-í gegnum, að 6 verður "bubbled upp 'til
annað rightmost stað.
Þeir tveir þættir á hægri - 6 og 9 - mun vera í réttum stöðum sínum
eftir fyrstu tveimur framhjá throughs.
>> Svo, hvernig getum við notað þetta til að hámarka reiknirit?
Jæja, eftir einn endurtekning gegnum fylki
við gerum ekki raunverulega þörf til að athuga rightmost þáttur
vegna þess að við vitum að það er flokkað.
Eftir tvær endurtekningar, vitum við að tryggja að rightmost tveir þættir eru á sínum stað.
Svo almennt, eftir endurtekningar k með fullri array,
haka við síðustu þætti K er óþarfi þar sem við vitum
þeir eru á réttan stað þegar.
>> Svo ef þú ert að flokka fjölda n þáttum,
á fyrsta endurtekning - you'll að raða öllum þeim þáttum - fyrstu n-0.
Á seinni endurtekning, þarftu að líta á alla þá þætti, en síðasta -
fyrsta N-1.
Annar hagræðingu gæti verið að athuga hvort listinn er þegar raðað
eftir hverja ítrun.
Ef það er þegar raðað, þurfum við ekki að gera eitthvað meira endurtekningar
gegnum listann.
Hvernig getum við gert þetta?
Jæja, ef við ekki gera neinar skiptasamninga á að fara í gegnum á listanum,
það er ljóst að listinn var þegar raðað vegna þess að við ekki skipta neitt.
Þannig að við örugglega ekki að raða aftur.
>> Kannski þú gætir frumstilla fána breytu sem heitir "ekki raðað 'til
falskar og breyta því að sanna ef þú ert að skipta á þætti á
einn endurtekning gegnum fylki.
Eða álíka, gera teljara til að telja hversu margir samningar sem þú gerir
á hverjum endurtekning.
Í lok sem endurtekning, ef þú did ekki skipta einhverju af þeim þáttum,
þú veist að listinn er nú þegar raðað og þú ert búinn.
Bubble Raða, eins og önnur reiknirit flokkun, er hægt að
klip til að vinna fyrir öllum þáttum sem geta haft röðun aðferð.
>> Það er gefið tveimur þáttum þú hafa a vegur til segja ef fyrsta
er stærra en, jafnt eða minna en sekúndu.
Til dæmis, getur þú flokkað bókstafina með því að segja
að a <b, b <c, osfrv
Eða þú gætir raða daga vikunnar þar sem sunnudagur er minna en Mánudagur
sem er minna en þriðjudag.
>> Bubble tagi er alls ekki mjög duglegur og fljótur flokkun reiknirit.
Versta afturkreistingur þess er Big O n ²
vegna þess að þú þarft að gera n endurtekningar gegnum lista
stöðva öll n þætti hvor framhjá-í gegnum, nxn = n ².
Þetta hlaupa tími þýðir að eftir því sem fjöldi þátta sem þú ert að flokka eykst
hlaupa tími eykst quadratically.
>> En ef skilvirkni er ekki stórt áhyggjuefni program
eða ef þú ert bara flokka fáeinum þáttum,
þú gætir fundið Bubble Raða gagnlegur því
það er eitt af einföldustu flokkun reiknirit til að skilja
og til að kóða.
Það er líka frábær leið til að fá reynslu af að þýða fræðilega
reiknirit í raun starfsemi kóða.
Jæja, það er kúla Raða fyrir þig. Takk fyrir að horfa.
CS50.TV