Tölvunarfræði snýst allt um að skilja flókið reiknirit og gagnauppbyggingu.
Þú ert með lista yfir atriði sem þarf að flokka, en þú hefur ekki tíma eða fjármagn til að nota flóknara flokkunaralgrím.
Innsetningarflokkun er ein einfaldasta flokkunaralgrímið, en hún getur verið hæg fyrir stóra lista.
Auðveld útfærsla og skilningur hefur gert þessa aðferð að uppáhaldi meðal forritara. Það er fullkomið fyrir litla lista eða þegar þú þarft skjóta lausn.
Í þessari bloggfærslu munum við skoða hversu flókið innsetningarflokkun er. Þetta reiknirit er notað til að flokka fylki og það hefur keyrslutíma O(n2). Þetta þýðir að tímaflækjustigið eykst með stærð fylkisins.
Hins vegar getur þetta reiknirit verið hraðari oft en önnur flokkunaralgrím, svo sem quicksort.
Skoðum nánar hvernig innsetningarflokkun virkar!
Hvað er innsetningarflokkunaralgrím?
Einn þáttur í einu, innsetningarflokkur býr til flokkunarhæft fylki, sem oft er nefnt listi.
Til dæmis er flokkun beitt í flóknum tölvuforritum eins og þýðendum, þar sem röð tákna er mikilvæg fyrir túlkun forritsins.
Hvernig virkar flokkun innsetningar?
Þegar við notum innsetningarröðun til að raða fylki byrjar reikniritið á því að finna minnsta hlutinn á listanum og setja hann inn á réttan stað.
Það finnur svo næstminnsta hlutinn og setur hann í rétta stöðu o.s.frv.
Reikniritið virkar með því að fara í gegnum listann og bera saman hvert atriði við það sem kemur á undan honum.
Ef hlutirnir eru í rangri röð skiptir reikniritið þeim. Það athugar síðan hvort listinn sé flokkaður og ef svo er lýkur reikniritinu.
Í reynd er innsetningarflokkun oft útfærð með því að nota nokkrar línur af kóða, sem gerir það að vinsælu vali til að flokka litla fylki. Hins vegar ætti að hafa í huga hversu flókinn tíma er þegar þetta reiknirit er notað.
Dæmi:
Hér er dæmi um hvernig innsetningarflokkun virkar. Við munum nota eftirfarandi fylki:
1, 2, 3, 4, 5, 6
Reikniritið byrjar á því að finna minnsta hlutinn á listanum, sem er 1. Hann setur hann svo inn í rétta stöðu, fyrstu stöðuna. Það finnur þá næstminnsta hlutinn, sem er 2. Hann setur hann í rétta stöðu, sem er önnur staðan.
Það finnur þá næstminnsta hlutinn, sem er 3. Hann setur hann í rétta stöðu, sem er þriðja staðan.
Það finnur svo næstminnsta hlutinn, sem er 4. Hann setur hann inn í rétta stöðu, sem er fjórða staðan o.s.frv. Listinn er nú flokkaður!
Við getum séð af dæminu að reikniritið tekur sex samanburð og skipti til að flokka listann. Þetta er vegna þess að það tekur n2 samanburður og skipti til að raða lista yfir n atriði. Í þessu tilviki er n=6.
Hvernig á að bæta innsetningarflokkunartímaflókið?
Þó að innsetningarflokkur hafi keyrslutíma O(n2), það er hægt að bæta það með því að nota betra flokkunaralgrím, svo sem quicksort.
Quicksort hefur O(n log n) keyrslutíma, sem er miklu hraðari en O(n2).
Hins vegar, í sumum tilfellum, getur flokkun innsetningar verið hraðari en quicksort.
Til dæmis, ef listinn er þegar í röð, mun innsetningarflokkun taka skemmri tíma en quicksort.
Í reynd er innsetningarflokkun oft útfærð með því að nota nokkrar línur af kóða, sem gerir það að vinsælu vali til að flokka litla fylki.
Hins vegar ætti að hafa í huga hversu flókinn tíma er þegar þetta reiknirit er notað.
Tímaflækjur
Versta tilfelli flókið O(n2):
Tímaflókið eykst með stærð fylkisins. Það tekur n2 samanburður og skipti til að raða lista yfir n atriði.
Til dæmis, ef við erum með fylki af stærðinni 1000, mun reikniritið taka 1,000,000 samanburð og skipta til að flokka fylkið.
Besta tilfelli flókið O(n):
Tímaflækjan er sú sama og stærð inntaksfylkisins. ég
t þarf n samanburð og skipti til að raða lista yfir n atriði. Til dæmis, íhugaðu fylki af stærð 5. Reikniritið mun taka fimm samanburð og skipti til að raða fylkinu.
Meðaltalsflækjustig O(n2):
Tímaflækjan er á milli versta og besta málsins í þessu tilviki.
Það tekur n2 samanburður og skipti til að raða lista yfir n atriði.
Þannig er innsetningarflokkun stöðugt flokkunaralgrím.
Af hverju er innsetningarflokkur stöðugur?
Innsetningarröðun er stöðug vegna þess að hún varðveitir röð jafnra þátta í inntaksfylki.
Þetta er mikilvægt fyrir mörg forrit, svo sem gagnaöflun eða fjárhagslega greiningu. Til dæmis, ef við erum með tvo lista yfir tölur og viljum bera þær saman, þurfum við að ganga úr skugga um að röð frumefna sé varðveitt.
Ef listarnir eru ekki flokkaðir munum við ekki bera þá nákvæmlega saman.
Skildu eftir skilaboð