Кіріспе

Сызықтық уақыт, элементтер тізбесін сұрыптаудың аналогты алгоритмі. Спагетти сұрыптау – А. К. Дьюдни Scientific American бағанында ұсынған элементтер тізбесін сұрыптаудың сызықтық уақыт, аналогты алгоритмі. Бұл алгоритм O(n) көлемді стектік жадты пайдаланып, элементтер тізбесін тұрақты түрде сұрыптайды. Оны жүзеге асыру үшін параллель процессор қажет.

Алгоритм

Қарапайымдылық үшін, табиғи сандар тізімін сұрыптаймыз деп есептейік. Сорталау әдісі пісірілмеген спагетти таяқшаларын қолдану арқылы көрсетілді: тізімдегі әр x саны үшін x ұзындығындағы таяқшаны алыңыз. (Бірлікті таңдаудың бір ыңғайлы жолы – тізімдегі ең үлкен сан m бір толық спагетти таяқшасына сәйкес келсін. Бұл жағдайда, толық таяқша m спагетти бірлігіне тең болады. x ұзындығындағы таяқша алу үшін, бір таяқшаны екіге бөліп, x бірлігінен тұратын бөлігін алыңыз, ал қалғанын тастаңыз.) Барлық спагетти таяқшаларын жинағаннан кейін, оларды біраз бос ұстап, үстелге түсіріңіз, осылай барлығы тік тұрып, үстел бетіне тіреледі. Енді, әр таяқша үшін, екінші қолыңызды жоғарыдан төмен түсіріңіз, таяқшаға тигенше – бұл әрине ең ұзын таяқша. Бұл таяқшаны алып, оны (бастапқыда бос) шығыс тізімінің басына қосыңыз (немесе, балама ретінде, оны шығыс массивтің соңғы бос орнына орналастырыңыз). Барлық таяқшалар алынып тасталғанша қайталаңыз.

Талдау

Макаронның n таяғын дайындау сызықтық уақытты қажет етеді. Таяқтарды үстелге төсеу тұрақты уақытты қажет етеді, O(1). Мұның себебі – қол, спагетти таяқтары және үстел толыққанды параллель есептеу құрылғысы ретінде жұмыс істейді. Содан кейін n таяқты алып тастау керек, сондықтан әрбір байланыс және алып тастау операциясы тұрақты уақытты қажет етеді деп есептесек, алгоритмнің ең нашар жағдайдағы уақыт күрделілігі O(n) болады.