Кіріспе

Скив-қам (немесе өзін-өзі реттеуші қам) – екілік ағаш түрінде жүзеге асырылған қам дерек құрылымы. Скив-қамдар екілік қамдарға қарағанда жылдам біріктірілу мүмкіндігі арқасында тиімді. Екілік қамдардан өзгеше, құрылымдық шектеулер жоқ, сондықтан ағаштың биіктігі логарифмдік болатынына кепілдік берілмейді. Тек екі талап орындалуы керек: жалпы қам тәртібі сақталуы тиіс. Кез келген операция (қосу, ең кішіні алу, біріктіру) екі скив-қамда арнайы скив-қам біріктіру арқылы жасалуы керек. Скив-қам – екі қамды біріктіргенде біріктіру жолындағы барлық түйіндерді шартсыз ауыстыру арқылы тепе-теңдікті сақтауға тырысатын сол жақты қамның өзін-өзі реттеу түрі. (Біріктіру операциясы мәндерді қосу және жою кезінде де қолданылады.) Құрылымдық шектеулердің болмауы скив-қамның тиімсіздігін көрсетуі мүмкін. Алайда, амортизациялық күрделілік талдауы, скив-қамдағы барлық операциялар O(log n) уақытында орындалатынын көрсетуге болады. Шындығында, алтын қатынасты φ деп белгілесек, нақты амортизацияланған күрделілік logφ n (шамамен 1.44 log2 n) болады.

Қайталанбайтын бірігу

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

Құндылықтарды қосу

Скив үйіндісіне мән қосу, бастапқы ағашпен бір түйінді ағашты біріктіруге ұқсас.

Құндылықтарды алып тастау

Қорымдағы бірінші мәнді жою тамырды жойып, оның баламашаларын біріктіру арқылы жасалуы мүмкін.