рд╕рд┐рдкрд▓ рдХреЗ рдкреЗрдбрд╝

рдПрдХ рд╕рдВрддреБрд▓рд┐рдд рдЦреЛрдЬ рд╡реГрдХреНрд╖ рдХрдИ рдЖрдзреБрдирд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдиреАрдВрд╡ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд╛рдЗрдВрд╕ рдХреА рдХрд┐рддрд╛рдмреЛрдВ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рдЖрдкрдХреЛ рд▓рд╛рд▓-рдХрд╛рд▓реЗ, рдПрд╡реАрдПрд▓-, рдмреА- рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдВрддреБрд▓рд┐рдд рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдорд┐рд▓реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдпреА рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП рдкрд╡рд┐рддреНрд░ рдХрдВрдШреА рдмрдирд╛рдиреЗрд╡рд╛рд▓реЗ рдХреА рд░реЗрддреА рдХрд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдЕрдм рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджреА рдЧрдИ рдХреБрдВрдЬреА рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдХреБрдВрдЬреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдХреЗрд╡рд▓ рд╕рдордп-рд╕рдордп рдкрд░ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИред рдпрджрд┐ рдХреБрдВрдЬреА рдЬрдбрд╝ рд╕реЗ рджреВрд░ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рджреВрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд╕рдордпред рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреЛрд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдкреЗрдбрд╝ рдкрд░ рдПрдХ рдХреИрд╢ рдЬреЛрдбрд╝рдХрд░ред рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рд▓рд╛рд▓рд┐рддреНрдп рдХреА рдХреБрдЫ рдХрдореА рд╣реИред

рдЖрдЬ рдореИрдВ рд╕реНрдкреНрд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдпреЗ рдкреЗрдбрд╝ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░реИрдЦрд┐рдХ рд╕рдордп рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж, рд╡реЗ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рд▓рд╛рдЧрдд , рдЬреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рддрд╛ рд╣реИред

рд╕рд┐рдкрд▓ рдХреЗ рдкреЗрдбрд╝


рдЕрд╕реНрд╕реА рдХреЗ рджрд╢рдХ рдХреЗ рдордзреНрдп рдореЗрдВ, рд░реЙрдмрд░реНрдЯ рдЯрд╛рд░рдЬрди рдФрд░ рдбреИрдирд┐рдпрд▓ рд╕реНрд▓реЗрдЯрд░ рдиреЗ рдХреБрдЫ рд╕реБрдВрджрд░ рдФрд░ рдХреБрд╢рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ред рдЙрди рд╕рднреА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрдХ рдпрд╛ рджреЛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рдкреЗрд▓ рдЯреНрд░реА рдПрдХ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИред

рд╕реЗрдк рдЯреНрд░реА рдПрдХ рд╕реЗрд▓реНрдл-рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдЯреНрд░реА рд╣реИред рдкреЗрдбрд╝ рдХреЛ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╕реНрдореГрддрд┐ рдХреБрд╢рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЦреЛрдЬ, рд╕реНрдкреНрд▓реЗ рдЯреНрд░реА рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред

рдиреАрдЪреЗ рдореИрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдкреЗрдбрд╝ рдЬреЛрдбрд╝реАрджрд╛рд░ рд╡рд┐рднрд┐рдиреНрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛ред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рд╢реАрд░реНрд╖ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ,

class Node: def __init__(self, key, left = None, right = None, parent = None): self.left = left self.right = right self.parent = parent self.key = key 

рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВред

 def set_parent(child, parent): if child != None: child.parent = parent def keep_parent(v): set_parent(v.left, v) set_parent(v.right, v) 

рдПрдХ рд╕реНрдкреНрд▓реЗ рдЯреНрд░реА рдХрд╛ рдореБрдЦреНрдп рд╣реЗрдпреБрд░рд┐рд╕реНрдЯрд┐рдХ рдореВрд╡-рдЯреВ-рд░реВрдЯ рд╣реИред рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЬрдбрд╝ рддрдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдЪрдврд╝рд╛рдИ рдХреЛ рдЪреЛрдЯрд┐рдпреЛрдВ рдХреЗ рдореЛрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░реА рдореЗрдВ, рдЖрдк рдмрдЪреНрдЪреЗ рдХреЗ рд╕рд╛рде рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



 def rotate(parent, child): gparent = parent.parent if gparent != None: if gparent.left == parent: gparent.left = child else: gparent.right = child if parent.left == child: parent.left, child.right = child.right, parent else: parent.right, child.left = child.left, parent keep_parent(child) keep_parent(parent) child.parent = gparent 

рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рд╢реАрд░реНрд╖ рдХреЛ рддрдм рддрдХ рдореЛрдбрд╝рдирд╛ рдЬрдм рддрдХ рд╡рд╣ рдЬрдбрд╝ рдирд╣реАрдВ рдмрди рдЬрд╛рддрд╛ред рд╕реНрдкреНрд▓реЗ рдЯреНрд░реА рдХреА рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдКрдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд░реВрдЯ рдХреА рджреВрд░реА рди рдХреЗрд╡рд▓ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдЙрдард╛рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рдмрдЯреНрд░реЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЬрд╝рд┐рдЧ-рдЬрд╝рд┐рдЧ рдФрд░ рдЬрд╝рд┐рдЧ-рдЬрд╝реИрдЧ рдХреЙрд░реНрдирд░рд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд╝рд┐рдЧ-рдЬрд╝рд┐рдЧ рдФрд░ рдЬрд╝рд┐рдЧ-рдЬрд╝реИрдЧ рдХрд╛ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рджрд╛рджрд╛ рд╕реЗ рдмрдЪреНрдЪреЗ рддрдХ рдХреЗ рдорд╛рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рд░рд╛рд╕реНрддрд╛ рдХреЗрд╡рд▓ рдмрд╛рдПрдВ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛ рдХреЗрд╡рд▓ рджрд╛рдИрдВ рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ zig-zig рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╣ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдмрд╛рд░реА, рдлрд┐рд░ рдмрдЪреНрдЪреЗ рдХреАред



рдЕрдиреНрдпрдерд╛, рд╣рдо рдкрд╣рд▓реЗ рдмрдЪреНрдЪреЗ рдХреЛ рд╡рд░реНрддрдорд╛рди рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХ рдирдП рдХреЗ рд╕рд╛рдеред



рдпрджрд┐ рд╢реАрд░реНрд╖ рдкрд░ рдХреЛрдИ рджрд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдореЛрдбрд╝ рд▓реЗрддреЗ рд╣реИрдВ:



рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЬрд╝рд┐рдЧ-рдЬрд╝рд┐рдЧ рдФрд░ рдЬрд╝рд┐рдЧ-рдЬрд╝реИрдЧ рдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдКрдкрд░ рдЙрдард╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдкреНрд▓реЗ рдЯреНрд░реА рдХреА рдХреБрдВрдЬреА рд╣реИред

рдиреЛрдЯред рд░реВрд╕реА рдореЗрдВ, рд╢рдмреНрдж "рд╕реНрдкреНрд▓реЗ" рдХрд╛ рдЕрдиреБрд╡рд╛рдж "рд╡рд┐рд╕реНрддрд╛рд░" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рдЖрдк рд╢реАрд░реНрд╖ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдКрдкрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдордп, рдЕрдиреНрдп рд╕рднреА рдЪреЛрдЯрд┐рдпрд╛рдВ рдиреАрдЪреЗ рдХреА рдУрд░ рдореБрдбрд╝ рдЬрд╛рддреА рд╣реИрдВред рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдЯреА-рд╢рд░реНрдЯ рдХреЛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╢рдмреНрдж "рдЯреНрд╡рд┐рд╕реНрдЯ" рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

 def splay(v): if v.parent == None: return v parent = v.parent gparent = parent.parent if gparent == None: rotate(parent, v) return v else: zigzig = (gparent.left == parent) == (parent.left == v) if zigzig: rotate(gparent, parent) rotate(parent, v) else: rotate(parent, v) rotate(gparent, v) return splay(v) 

рд╕реНрдкреНрд▓реЗ рдЯреНрд░реА рдореЗрдВ рдЦреЛрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ: рд╡рд░реНрдЯреЗрдХреНрд╕ рдкрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдКрдкрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ splay рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдЬрдбрд╝ рдмрдирд╛рддреЗ рд╣реИрдВред

 def find(v, key): if v == None: return None if key == v.key: return splay(v) if key < v.key and v.left != None: return find(v.left, key) if key > v.key and v.right != None: return find(v.right, key) return splay(v) 

рдореБрдЦреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдФрд░ рд╡рд┐рд▓реЛрдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: split рдФрд░ merge (рдХрдЯ рдФрд░ рдорд░реНрдЬ)ред

split рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ key рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдкреЗрдбрд╝ рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреА рд╣реИред рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ, рд╕рднреА рдореВрд▓реНрдп key рд╕реЗ рдХрдо рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕реЗ рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреБрдВрдЬреА рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм find рд╢реАрд░реНрд╖ рдХреЛ find рдорд╛рдзреНрдпрдо рд╕реЗ find рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕реЗ рдмрдврд╝рд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рд╕рдмрдЯреНрд░реА (рдпрд╛ рджреЛрдиреЛрдВ) рдХреЛ рдХрд╛рдЯ рджреЗрдВред

 def split(root, key): if root == None: return None, None root = find(root, key) if root.key == key: set_parent(root.left, None) set_parent(root.right, None) return root.left, root.right if root.key < key: right, root.right = root.right, None set_parent(right, None) return root, right else: left, root.left = root.left, None set_parent(left, None) return left, root 

рдЕрдЧрд▓реА рдХреБрдВрдЬреА рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкрд░ split рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдпрд╛ рд╢реАрд░реНрд╖-рд░реВрдЯ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрдк- split рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред
 def insert(root, key): left, right = split(root, key) root = Node(key, left, right) keep_parent(root) return root 

merge рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдирдкреБрдЯ рдкрд░ рджреЛ рдкреЗрдбрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ: рдмрд╛рдПрдВ left рдФрд░ рджрд╛рдПрдВ right ред рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, left рдкреЗрдбрд╝ рдХреА рдЪрд╛рдмреА right рдкреЗрдбрд╝ рдХреА рдЪрд╛рдмреА рд╕реЗ рдЫреЛрдЯреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рд╣рдо рд╕рд╣реА рдкреЗрдбрд╝ рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдКрдкрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдмрд╛рдПрдВ рд╕рдмрдЯреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ, left рдкреЗрдбрд╝ рд╕реЗ рдЬреБрдбрд╝реЗрдВред

 def merge(left, right): if right == None: return left if left == None: return right right = find(right, left.key) right.left, left.parent = left, right return right 

рдПрдХ рд╢реАрд░реНрд╖ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдКрдкрд░ рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреЗ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдЙрдк-рдорд░реНрдЬ рдХреЛ рдорд░реНрдЬ рдХрд░реЗрдВред

 def remove(root, key): root = find(root, key) set_parent(root.left, None) set_parent(root.right, None) return merge(root.left, root.right) 

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд▓реЗ рдЯреНрд░реА рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЛ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЬрд╛рдирдХрд╛рд░реА, рдпрд╛ рдЦреЛрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ LUR рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдСрд░реНрдбрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рджрд┐рдП рдЧрдП рдХреБрдВрдЬреА рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдПред

рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ, рдбрд╛рд▓рдиреЗ, рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ find рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ + рдХреНрд░рдоред

find рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреЗрдбрд╝ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╢реАрд░реНрд╖ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЬрдм рдЦреЛрдЬ splay , рддреЛ splay рдкреНрд░рдХреНрд░рд┐рдпрд╛ splay , рдЬреЛ рдХрд┐ рд╢реАрд░реНрд╖ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ splay рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд▓ рд░рд╣реЗ рд╕рдордп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдиреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдЪрд▓реЛ - рдЙрдк-рдЖрдХрд╛рд░ рд╢реАрд░реНрд╖ рдкрд░ рдЬрдбрд╝ рдХреЗ рд╕рд╛рде ред рд╢реАрд░реНрд╖ рд░реИрдВрдХ рд╣рдо рдорд╛рддреНрд░рд╛ рдХрд╣рддреЗ рд╣реИрдВ ред рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛ рд╣реЛрдЧреА ред

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ splay(v) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЧрд╣рд░рд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдХреЛрдиреЗ ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╛рдердорд┐рдХ рдШреБрдорд╛рд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рднреА рд╣реИред

рдХрдерди ред рд╢реАрд░реНрд╖ рд╕реЗ splay рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рд╢реЛрдзрди рд▓рд╛рдЧрдд рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдЬрдбрд╝ рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ ред

рдкреНрд░рдорд╛рдг
рдЕрдЧрд░ - рдЬрдбрд╝, рддреЛ рдХрдерди рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдиреНрдпрдерд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛ splay(v) рдХреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди, рддреАрди рдореЗрдВ рд╕реЗ рдПрдХ рдореЛрдбрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: zig, zig-zig, рдпрд╛ zig-zagред рд╕рдордп рдХреА рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЛрдбрд╝ рдкрд░, рджреЛ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдЬрд┐рдЧ-рдЬрд╝рд┐рдЧ рдФрд░ рдЬрд╝рд┐рдЧ-рдЬрд╝реИрдЧ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рдмрд╛рдж, рд╢реАрд░реНрд╖ рдХреА рд░реИрдВрдХ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реИрдВрдХ рд╣реЛрдиреЗ рджреЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реНрдЯреЗрдЬ рдПрдХ - ред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж, рдЕрдВрддрд┐рдо, рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдХрд╛ рд╕рдордп рдКрдкрд░ рд╕реЗ рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░реА рд╕реАрдорд╛ рд╣реЛрдЧреА ред рдКрдкрд░реА рд╕реАрдорд╛ рдХреЛ рд╕рдордорд┐рдд рдХрд░рдирд╛ рдФрд░ рд░реИрдВрдХреЛрдВ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ



рдЖрдкрдХреЛ рдмрд╕ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдФрд░ ред

рдЕрдм рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

Zigред рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░, рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп ред рдЖрдЗрдП рдЖрдХреГрддрд┐ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐ рд░реИрдВрдХ рдХреЗрд╡рд▓ рдХреЛрдиреЗ рдкрд░ рдмрджрд▓рддреА рд╣реИрдВ рдФрд░ ред



рддреЛ, рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рд▓рд╛рдЧрдд рд╣реЛрдЧреА ред рд░реИрдВрдХ рдФрд░ рдШрдЯ рд░рд╣реЗ рд╣реИрдВред рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╕реВрддреНрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЕрд╕рдорд╛рдирддрд╛:



рдЗрд╕рд▓рд┐рдП, ред

Zig-zigред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реИрдВрдХ рдХреЗрд╡рд▓ рдХреЛрдиреЗ рдкрд░ рдмрджрд▓рддреЗ рд╣реИрдВ ред рдФрд░ ред



рдлрд┐рд░ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рд▓рд╛рдЧрдд ред рд░реИрдВрдХ рдФрд░ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рд╡рд╣ рдорд┐рд▓рддрд╛ рд╣реИ ред рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╕реВрддреНрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рджреЛ рдЕрд╕рдорд╛рдирддрд╛рдПрдБ:



рдФрд░ рдорд┐рд▓рддрд╛ рд╣реИ ред

рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ :



рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реИрдВрдХ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рд╕рд╛рдмрд┐рдд рдХрд░реЗрдВрдЧреЗ ред рд░реИрдВрдХ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ ред рдЕрдВрддрд┐рдо рд╕рдорд╛рдирддрд╛ ред рдЖрдЗрдП рдЖрдХреГрддрд┐ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕рдордЭреЗрдВ ред

рддрдереНрдп рдпрд╣ рд╣реИред рдХрд┐рд╕реА рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╣реИ ред

рдЗрд╕рд▓рд┐рдП, ред рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред

Zig-zagред



рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди, рд╣рдо рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ: ред

рд░реИрдВрдХ рдФрд░ рдШрдЯ рд░рд╣реЗ рд╣реИрдВред рд╕реВрддреНрд░ рдХреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕рдорд╛рдирддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:



рдЗрд╕рд▓рд┐рдП, ред рдпрд╣ рдЕрд╕рдорд╛рдирддрд╛ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╕рд╛рдмрд┐рдд рд╣реЛрддреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рддреАрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рд░реИрдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рд╢реЛрдзрди рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдКрдкрд░реА рдЕрдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖ рдХреА рд░реИрдВрдХ рдкреЗрдбрд╝ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рдШреБрдЧрдгрдХ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдореЗрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВред

рдкреНрд░рдореЗрдпред splay рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдЕрдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЧреБрдг


рдорд┐рд╖реНрдард╛рди рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рдпрд╣рд╛рдБ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ред

рд╕реНрдереИрддрд┐рдХ рдЗрд╖реНрдЯрддрдо рдкреНрд░рдореЗрдп ред рдЪрд▓реЛ - рдЖрдЗрдЯрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдлрд┐рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдПрдХ splay рдкреЗрдбрд╝ рдкрд░ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рддрдереНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдкреНрд░рд╢реНрди рдкреВрдЫреЗ рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдпрдерд╛рд╢реАрдШреНрд░ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрдпрд╛рди рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐, splay рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ splay рдкреЗрдбрд╝ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд┐рд╢реНрдЪрд┐рдд рдкреЗрдбрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдИ рдмрджрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдо рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯ рдкрд░ рдкреНрд░рдореЗрдп ред рдЪрд▓реЛ - рдпрд╣ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рддрддреНрд╡ рдХреЗ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рд╕реЗ рдХреА рд╣реИ ; рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдмрд╕ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдлрд┐рд░ рд╕рдордп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдз рд╣реЛрдВрдЧреЗ ред

рдпрд╣ рддрдереНрдп рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреИрд╢ рдХреА рдореЗрд░реА рдЪрд░реНрдЪрд╛ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдирдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдФрд╕рддрди, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдЬрдбрд╝ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рдЬрд╛рддреА рд╣реИред

рд╕реНрдХреИрдирд┐рдВрдЧ рдкреНрд░рдореЗрдп рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрд╣реБрдБрдЪ (LUR) рдореЗрдВ рдПрдХ splay рддрддреНрд╡реЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдЗрд╕ рддрдереНрдп рдХрд╛ рдПрдХ рдорд╣рд╛рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реИред рд╡рд┐рднрд╛рдЬрди рдФрд░ рдорд░реНрдЬ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде, рдпрд╣ splay рдкреЗрдбрд╝реЛрдВ рдХреЛ rope рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЖрдзрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рд╣реИрдмрд░ рд░реЛрдкреНрд╕ рдХреЗ рдкрджреЛрдВ рдореЗрдВ - рддреЗрдЬ рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдореЛрдиреЙрдпрдб рдФрд░ рдЙрдирдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ ...ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рд╛рд╣рд┐рддреНрдп




рдпреВрдкреАрдбреА

рдПрдХ рдиреЛрдЯ рдкрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рдж


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рд╢реНрди рд╣реИред рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдардХ рдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдФрд░ рдЙрд╕рдХреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдиреАрдВрд╡ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рддреА рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╡рд┐рд╡рд░рдг рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ, рдореИрдВ рд▓реЗрдЦ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред

рдПрдХ рджрд░реНрдЬрди рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред "рд╕рд┐рд╕реНрдЯрдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ BST рдХреЗ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг" рдХреА Pfaff рд╕рдореАрдХреНрд╖рд╛, рдЬрд┐рд╕рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдВрддрд░рд┐рдХ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рд╕рд╛рде 20 рд╕рдВрддреБрд▓рд┐рдд рдкреЗрдбрд╝реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд╣реБрдд рдЖрд╢рд╛рд╡рд╛рджреА рд▓рдЧрддрд╛ рд╣реИред рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ, рдЖрдИрдкреА рдкреИрдХреЗрдЯ рдХреЛ рдХреИрдЪ рдХрд░рдиреЗ рдФрд░ рдХреНрд░реЙрд╕-рд░реЗрдлрд░реЗрдВрд╕ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдФрд░ рдХреНрд░реЙрд╕-рд░реЗрдлрд░реЗрдВрд╕ рдкрд░, рд╢рд╛рдирджрд╛рд░ рдкреЗрдбрд╝реЛрдВ рдиреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛; рдЖрдИрдкреА тАЛтАЛрдкреИрдХреЗрдЯ рдиреЗ рдПрд╡реАрдПрд▓ рдФрд░ рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ рд░рд╛рд╕реНрддрд╛ рджрд┐рдпрд╛ред рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзреНрдпрдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓реЗрдЦ рдореЗрдВ рд╣реА рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рдЯрд┐рдордИ рдЕрд╣реЛ рдФрд░ рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ "рдЯрд╛рдЗрдорд┐рдВрдЧ рдПрдкрд┐рдВрдЧ рдФрд░ рд╡рд░реНрдХрд┐рдВрдЧ рд╕реЗрдЯреНрд╕ рдХреЗ рд▓рд╛рдн" рд▓реЗрдЦ рдореЗрдВ рдШреБрдорд╛рд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЧреНрд░рдВрде рд╕реВрдЪреА рдореЗрдВ рдХрдИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд░рд┐рдкреЛрд░реНрдЯ рд╣реИрдВред

Source: https://habr.com/ru/post/In210296/


All Articles