Кіріспе
Бинарлы ағаштағы жапырақтар ретін сақтайтын жергілікті өзгеріс. Дискретті математикада, ағаш бұру – бұл элементтердің ретіне кедергі келтірмей, бинарлы ағаштың құрылымын өзгертетін операция. Ағаш бұру бір түйінді ағашта жоғары, ал екінші түйінді төмен жылжытады. Ол ағаштың пішінін өзгерту үшін қолданылады, әсіресе кіші тармақтарды төменге, ал үлкен тармақтарды жоғары жылжыту арқылы оның биіктігін азайтуға мүмкіндік береді, соның нәтижесінде көптеген ағаш операцияларының тиімділігі артады. Бұру бағытының анықтамасы бойынша әртүрлі сипаттамаларда қарама-қайшылықтар бар. Біреулер бұру бағыты түйіннің бұрылу кезіндегі қозғалысын көрсетеді (аналық түйінге бұрылған сол жақ түйін – оң жақ бұру), ал екіншілері бұру бағыты қай тармақ бұрылып жатқанын көрсетеді (аналық түйінге бұрылған сол жақ тармақ – сол жақ бұру, бұрынғысынан кері). Осы мақалада бұрылатын түйіннің бағыттық қозғалысын қарастырамыз.
In discrete mathematics, tree rotation is an operation on a binary tree that changes the structure without interfering with the order of the elements. A tree rotation moves one node up in the tree and one node down. It is used to change the shape of the tree, and in particular to decrease its height by moving smaller subtrees down and larger subtrees up, resulting in improved performance of many tree operations. There exists an inconsistency in different descriptions as to the definition of the direction of rotations. Some say that the direction of rotation reflects the direction that a node is moving upon rotation (a left child rotating into its parent's location is a right rotation) while others say that the direction of rotation reflects which subtree is rotating (a left subtree rotating into its parent's location is a left rotation, the opposite of the former). This article takes the approach of the directional movement of the rotating node.
Үлгі
Оң жаққа айналу операциясы, көрнекі мысалда көрсетілгендей, Q түйіні тамыр ретінде орындалады, демек, бұл Q түйінінде немесе оған тамырланған оң жаққа айналу болып табылады. Бұл операция ағашты сағат тілімен айналдырады. Кері операция – сол жаққа айналу, ол сағат тіліне қарсы бағытта қозғалысқа әкеледі (жоғарыда көрсетілген сол жаққа айналу P түйінінде тамырланған). Айналудың қалай жұмыс істейтінін түсіну үшін оның шектеулерін түсіну қажет. Атап айтқанда, ағаштың жапырақтарының реті (мысалы, солдан оңға қарай оқылғанда) өзгеруі тиіс емес (басқаша айтқанда, жапырақтарды ретпен аралау кезіндегі реті операциядан кейін де бұрынғыдай болуы керек). Тағы бір шектеу – екілік іздеу ағашының негізгі қасиеті, яғни оң тармақтағы барлық түйіндер аталық түйінден үлкен, ал сол тармақтағы барлық түйіндер аталық түйінден кіші болуы керек. Көріп отырғаныңыздай, кіші ағаштың тамырының сол баласының оң баласы (мысалы, Q түйініне тамырланған ағаштағы В түйіні) тамырдың сол баласына айналуы мүмкін, ол өзі айналған кіші ағаштың «жаңа» тамырының оң баласына айналады, бұл ешбір шектеуді бұзбайды. Диаграммада көрсетілгендей, жапырақтардың реті өзгермейді. Кері операция да ретті сақтайды және айналудың екінші түрі болып табылады. Егер бұл екілік іздеу ағашы болса, жоғарыда айтылғандай, элементтерді бір-бірімен салыстыруға болатын айнымалылар ретінде қарастыру керек. Сол жақтағы әріптер осы айнымалылардың орнын басушы ретінде қолданылады. Оң жақтағы анимацияда үлкен әріптер айнымалылардың орнын басушы ретінде, ал кіші грек әріптері айнымалылардың толық жиынтығының орнын басушысы ретінде қолданылады. Дөңгелектер жеке түйіндерді, ал үшбұрыштар кіші ағаштарды көрсетеді. Әрбір кіші ағаш бос болуы мүмкін, бір түйінден немесе кез келген саны түйіндерден тұруы мүмкін.
Теңгерімдеу үшін айналымдар
Ағаш айналу арқылы қайта тепе-теңдікке келтірілуі мүмкін. Айналудан кейін, айналу жағы биіктігін 1-ге арттырады, ал айналуға қарама-қарсы жағы да сол сияқты биіктігін азайтады. Сондықтан, сол баласы мен оң баласының биіктігі 1-нен артық ерекшеленетін түйіндерге айналуды стратегиялық түрде қолдануға болады. Өзін-өзі тепе-теңдейтін екілік іздеу ағаштары осы операцияны автоматты түрде қолданады. Осы тепе-теңдеу техникасын пайдаланатын ағаш түрі – AVL ағашы.
Айналу қашықтығы
Бірдей түйін саны бар кез келген екі екілік ағаш арасындағы айналу қашықтығы – бірін екіншісіне түрлендіру үшін қажетті айналымдардың ең аз саны. Осы қашықтықпен n түйінді екілік ағаштар жиыны метрикалық кеңістікке айналады: қашықтық симметриялық, екі түрлі ағаш берілгенде оң, және үшбұрыш теңсіздігін қанағаттандырады. Айналу қашықтығын есептеуге арналған полиномиалдық уақыт алгоритмі бар-жоқ деген сұрақ ашық мәселе болып қалады, бірақ айналу қашықтығы мәселесінің бірнеше түрі полиномиалдық уақыт алгоритмдерін қабылдайды. Дэниел Слейтор, Роберт Таржан және Уильям Терстон кез келген екі n түйінді ағаш арасындағы (n ≥ 11) айналу қашықтығының ең көп дегенде 2n – 6-ға тең екенін, ал кейбір ағаш жұптары n жеткілікті үлкен болғанда осы қашықтықта болатынын көрсетті. Лионель Пурнин, шын мәнінде, мұндай жұптар n ≥ 11 болғанда бар екенін көрсетті.