Мундариҷа[Пинҳон кардан][Намоиш]
Илми компютерӣ ҳама дар бораи фаҳмидани мураккабии алгоритмҳо ва сохторҳои додаҳо мебошад.
Шумо рӯйхати ҷузъҳоеро доред, ки бояд мураттаб карда шаванд, аммо шумо барои истифодаи алгоритми мураккабтар ҷудокунӣ вақт ё захира надоред.
Ҷойгиркунии воридкунӣ яке аз соддатарин алгоритмҳои ҷудокунӣ мебошад, аммо он метавонад барои рӯйхатҳои калон суст бошад.
Татбиқи осон ва фаҳмиш ин усулро дӯстдоштаи барномасозон кардааст. Он барои рӯйхатҳои хурд ё вақте ки ба шумо ҳалли зуд лозим аст, комил аст.
Дар ин пости блог, мо мураккабии вақти ҷудокунии воридкуниро дида мебароем. Ин алгоритм барои ҷудо кардани массивҳо истифода мешавад ва он вақти иҷроиш O(n2). Ин маънои онро дорад, ки мураккабии вақт бо андозаи массив меафзояд.
Бо вуҷуди ин, ин алгоритм метавонад аксар вақт нисбат ба дигар алгоритмҳои ҷудокунӣ, ба монанди Quicksort тезтар бошад.
Биёед дида бароем, ки чӣ гуна навъбандии воридкунӣ кор мекунад!
Алгоритми навъбандии воридкунӣ чист?
Як унсур дар як вақт, навъбандии воридкунӣ массиви мураттабшавандаро тавлид мекунад, ки онро аксар вақт ҳамчун рӯйхат меноманд.
Масалан, ҷудокунӣ дар барномаҳои мураккаби компютерӣ, ба монанди компиляторҳо истифода мешавад, ки дар он тартиби нишонаҳо барои тафсири барнома муҳим аст.
Тартиби воридкунӣ чӣ гуна кор мекунад?
Вақте ки мо барои мураттаб кардани массив навъбандии дохилкуниро истифода мебарем, алгоритм аз дарёфти ҷузъи хурдтарин дар рӯйхат ва гузоштани он ба мавқеи дуруст оғоз мешавад.
Сипас он чизи хурдтарини навбатиро ёфта, онро ба ҷои дуруст ҷойгир мекунад ва ғайра.
Алгоритм тавассути гардиши рӯйхат кор мекунад ва ҳар як ҷузъро бо он чизе, ки пеш аз он меояд, муқоиса мекунад.
Агар ҷузъҳо дар тартиби нодуруст бошанд, алгоритм онҳоро иваз мекунад. Он гоҳ тафтиш мекунад, ки оё рӯйхат мураттаб шудааст ё не, ва агар он бошад, алгоритм ба итмом мерасад.
Дар амал, навъбандии воридкунӣ аксар вақт бо истифода аз чанд сатри код амалӣ карда мешавад, ки онро интихоби маъмул барои ҷудо кардани массивҳои хурд месозад. Аммо, ҳангоми истифодаи ин алгоритм бояд мураккабии вақт ба назар гирифта шавад.
Намуна:
Дар ин ҷо мисоли он аст, ки чӣ тавр ҷудокунии воридкунӣ кор мекунад. Мо массиви зеринро истифода мебарем:
1, 2, 3, 4, 5, 6
Алгоритм аз дарёфти ҷузъи хурдтарин дар рӯйхат оғоз мешавад, ки он 1 аст. Он гоҳ онро ба мавқеи дуруст, мавқеи аввал мегузорад. Он гоҳ он чизи хурдтарини навбатиро пайдо мекунад, ки 2 аст. Онро ба мавқеи дуруст, ки мавқеи дуюм аст, дохил мекунад.
Он гоҳ он чизи хурдтарини навбатиро пайдо мекунад, ки 3 аст. Онро ба мавқеи дуруст, ки мавқеи сеюм аст, дохил мекунад.
Он гоҳ он чизи хурдтарини навбатиро пайдо мекунад, ки 4 аст. Онро ба мавқеи дуруст, ки мавқеи чорум аст ва ғайра мегузорад. Рӯйхат ҳоло мураттаб шудааст!
Мо аз мисол мебинем, ки алгоритм барои ҷудо кардани рӯйхат шаш муқоиса ва ивазкуниро мегирад. Ин аст, зеро он мегирад n2 муқоисаҳо ва свопҳо барои ҷудо кардани рӯйхати n адад. Дар ин ҳолат, n = 6.
Мушкилии вақти ҷудокунии воридкуниро чӣ гуна бояд беҳтар кард?
Дар ҳоле ки навъбандии воридкунӣ вақти иҷроиш O(n2), онро метавон бо истифода аз алгоритми беҳтари навъбандӣ, ба монанди Quicksort такмил дод.
Quicksort дорои вақти кории O(n log n) аст, ки нисбат ба O(n) хеле тезтар аст2).
Бо вуҷуди ин, дар баъзе ҳолатҳо, мураттабсозии воридкунӣ метавонад назар ба навъбандии зуд тезтар бошад.
Масалан, агар рӯйхат аллакай дар тартиб бошад, мураттабсозии дохилкунӣ нисбат ба навъбандии зуд вақти камтар мегирад.
Дар амал, навъбандии воридкунӣ аксар вақт бо истифода аз чанд сатри код амалӣ карда мешавад, ки онро интихоби маъмул барои ҷудо кардани массивҳои хурд месозад.
Аммо, ҳангоми истифодаи ин алгоритм бояд мураккабии вақт ба назар гирифта шавад.
Мушкилоти вақт
Мушкилии бадтарин O(n2):
Мушкилии вақт бо андозаи массив меафзояд. Он н мегирад2 муқоисаҳо ва свопҳо барои ҷудо кардани рӯйхати n адад.
Масалан, агар мо массиви андозаи 1000 дошта бошем, алгоритм барои мураттаб кардани массив 1,000,000 муқоиса ва ивазкуниро мегирад.
Беҳтарин мураккабии парванда O(n):
Мушкилии вақт ба андозаи массиви вуруд баробар аст. И
t барои мураттаб кардани рӯйхати n адад n муқоиса ва ивазкуниро мегирад. Масалан, массиви андозаи 5-ро баррасӣ кунед. Алгоритм барои ҷудо кардани массив панҷ муқоиса ва свопро мегирад.
Мушкилии миёнаи парванда O(n2):
Мушкилоти вақт дар ин ҳолат дар байни бадтарин ва беҳтарин мушкилот аст.
Он н мегирад2 муқоисаҳо ва свопҳо барои ҷудо кардани рӯйхати n адад.
Ҳамин тариқ, навъбандии воридкунӣ як алгоритми муътадил ҷудокунӣ мебошад.
Чаро навъбандии воридкунӣ устувор аст?
Навъи воридкунӣ устувор аст, зеро он тартиби элементҳои баробарро дар массиви вуруд нигоҳ медорад.
Ин барои бисёр барномаҳо, ба монанди ҷустуҷӯи маълумот ё таҳлили молиявӣ муҳим аст. Масалан, агар мо ду рӯйхати ададҳо дошта бошем ва онҳоро муқоиса кардан хоҳем, мо бояд боварӣ ҳосил кунем, ки тартиби элементҳо нигоҳ дошта мешавад.
Агар рӯйхатҳо ҷудо карда нашаванд, мо онҳоро дақиқ муқоиса намекунем.
Дин ва мазҳаб