рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдорд▓рд╛ рдЦрд╛рд▓реАрд▓ рдХрд╛рдорд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛: рдорд▓рд╛ рдЦрд╛рд▓реАрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдгрд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрдВрдЯреЗрдирд░ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд╛рдпрдЪрд╛ рд╣реЛрддрд╛:

  • рдПрдХ рдирд╡реАрди рдШрдЯрдХ рдШрд╛рд▓рд╛
  • рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпреЗрдиреБрд╕рд╛рд░ рдШрдЯрдХ рд╣рдЯрд╡рд╛
  • рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпреЗрдиреЗ рдШрдЯрдХ рдорд┐рд│рд╡рд╛.
  • рдбреЗрдЯрд╛ рдХреНрд░рдорд╡рд╛рд░реАрдд рд╕рд╛рдард╡рд▓рд╛ рдЬрд╛рддреЛ.

рдбреЗрдЯрд╛ рд╕рддрдд рдЬреЛрдбрд▓рд╛ рдЖрдгрд┐ рд╣рдЯрд╡рд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ, рдЖрдгрд┐ рд╕рдВрд░рдЪрдиреЗрдиреЗ рдЬрд▓рдж рдСрдкрд░реЗрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдореА рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░ рд╡рд╛рдкрд░реВрди рд╣реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рд╕реНрдЯрдбреАрд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рдЕрдпрд╢рд╕реНрд╡реА рдард░рд▓рд╛ рдЖрдгрд┐ рдорд▓рд╛ рд╕реНрд╡рддрдГ рдХрд╛рд╣реАрддрд░реА рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рд╕реНрдкрд╖реНрдЯ рдЭрд╛рд▓реЗ. рдмрд╛рдпрдирд░реА рд╕рд░реНрдЪ рдЯреНрд░реА рд╡рд╛рдкрд░рдгреЗ рд╣рд╛ рдПрдХрдореЗрд╡ рдЙрдкрд╛рдп рдордирд╛рдд рдЖрд▓рд╛, рдХрд╛рд░рдг рддреЛ рдЬрд▓рдж рдЗрдиреНрд╕рд░реНрд╢рди рдЖрдгрд┐ рдбрд┐рд▓реАрд╢рди рдЖрдгрд┐ рдбреЗрдЯрд╛ рдХреНрд░рдорд╛рдиреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реНрдг рдХрд░рддреЛ. рд╕рд░реНрд╡ рдШрдЯрдХрд╛рдВрдирд╛ рдХрд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рдЯреНрд░реА рдмрджрд▓рд▓реНрдпрд╛рд╡рд░ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╕реЗ рдкреБрдиреНрд╣рд╛ рдореЛрдЬрд╛рдпрдЪреЗ рд╣реЗ рд╢реЛрдзрдгреЗ рдмрд╛рдХреА рд╣реЛрддреЗ.

struct node_s {    
    data_t data;

    uint64_t weight; // ╨▓╨╡╤Б ╤Г╨╖╨╗╨░

    node_t *left;
    node_t *right;

    node_t *parent;
};

рдпрд╛ рд▓реЗрдЦрд╛рдд рдХреЛрдбрдкреЗрдХреНрд╖рд╛ рдкреНрд░рддрд┐рдорд╛ рдЖрдгрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рдЬрд╛рд╕реНрдд рдЕрд╕рддреАрд▓. рдХреЛрдб рдЦрд╛рд▓реАрд▓ рд▓рд┐рдВрдХрд╡рд░ рдкрд╛рд╣рддрд╛ рдпреЗрдИрд▓.

рд╡рдЬрди

рдпрд╛рд╕рд╛рдареА рдЭрд╛рдбрд╛рдд рдереЛрдбреЗрд╕реЗ рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрдгрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА рдЬреЛрдбрдгреНрдпрд╛рдд рдЖрд▓реА. рд╡рдЬрди рдЧрд╛рда. рдЧрд╛рдареАрдЪреЗ рд╡рдЬрди рдЖрд╣реЗ рдпрд╛ рдиреЛрдбрдЪреНрдпрд╛ рд╡рдВрд╢рдЬрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ + 1 (рдПрдХрд╛ тАЛтАЛрдШрдЯрдХрд╛рдЪреЗ рд╡рдЬрди).

рдиреЛрдбрдЪреЗ рд╡рдЬрди рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп:

uint64_t bntree::get_child_weight(node_t *node) {
    if (node) {
        return node->weight;
    }

    return 0;
}

рддреНрдпрд╛рдиреБрд╕рд╛рд░ рдкрд╛рдирд╛рдЪреЗ рд╡рдЬрди рд╕рдорд╛рди рдЖрд╣реЗ 0.

рдкреБрдвреЗ, рдЖрдкрдг рдЕрд╢рд╛ рдЭрд╛рдбрд╛рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреЗ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реВ. рдХрд╛рд│рд╛ рд░рдВрдЧ рдиреЛрдб рдХреА рджрд░реНрд╢рд╡реЗрд▓ (рдореВрд▓реНрдп рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА), рд▓рд╛рд▓ тАФ рдиреЛрдбрдЪреЗ рд╡рдЬрди, рд╣рд┐рд░рд╡рд╛ тАФ рдиреЛрдб рдЗрдВрдбреЗрдХреНрд╕.

рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реЗ рдЭрд╛рдб рд░рд┐рдХрд╛рдореЗ рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪреЗ рд╡рдЬрди 0 рдЕрд╕рддреЗ. рдЪрд▓рд╛ рддреНрдпрд╛рдд рдПрдХ рдореВрд│ рдШрдЯрдХ рдЬреЛрдбреВрдпрд╛:

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдЭрд╛рдбрд╛рдЪреЗ рд╡рдЬрди рез рд╣реЛрддреЗ, рдореВрд│ рдШрдЯрдХрд╛рдЪреЗ рд╡рдЬрди рез рд╣реЛрддреЗ. рдореВрд│ рдШрдЯрдХрд╛рдЪреЗ рд╡рдЬрди рдореНрд╣рдгрдЬреЗ рдЭрд╛рдбрд╛рдЪреЗ рд╡рдЬрди.

рдЪрд▓рд╛ рдЖрдгрдЦреА рдХрд╛рд╣реА рдШрдЯрдХ рдЬреЛрдбреВрдпрд╛:

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖
рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖
рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖
рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдирд╡реАрди рдШрдЯрдХ рдЬреЛрдбрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛, рдЖрдкрдг рдиреЛрдбреНрд╕рдордзреВрди рдЦрд╛рд▓реА рдЙрддрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реЕрд╡реНрд╣рд░реНрд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреЛрдбрд╕рд╛рдареА рд╡реЗрдЯ рдХрд╛рдЙрдВрдЯрд░ рд╡рд╛рдврд╡рддреЛ. рдЬреЗрд╡реНрд╣рд╛ рдирд╡реАрди рдиреЛрдб рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪреЗ рд╡рдЬрди рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. 1рдЬрд░ рдЕрд╢реА рдХреА рдЕрд╕рд▓реЗрд▓рд╛ рдиреЛрдб рдЖрдзреАрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕реЗрд▓, рддрд░ рдЖрдкрдг рд╡реНрд╣реЕрд▓реНрдпреВ рдУрд╡реНрд╣рд░рд░рд╛рдИрдЯ рдХрд░рддреЛ рдЖрдгрд┐ рд░реВрдЯрд╡рд░ рдкрд░рдд рдЬрд╛рддреЛ, рдЖрдкрдг рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдиреЛрдбреНрд╕рд╕рд╛рдареА рд╡рдЬрдирд╛рддреАрд▓ рдмрджрд▓ рдкреВрд░реНрд╡рд╡рдд рдХрд░рддреЛ.
рдЬрд░ рдПрдЦрд╛рджрд╛ рдиреЛрдб рдбрд┐рд▓реАрдЯ рд╣реЛрдд рдЕрд╕реЗрд▓, рддрд░ рдЖрдкрдг рдЦрд╛рд▓реА рдЬрд╛рддреЛ рдЖрдгрд┐ рдЖрдкрдг рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреЛрдбреНрд╕рдЪреЗ рд╡рдЬрди рдХрдореА рдХрд░рддреЛ.

рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ

рдЖрддрд╛ рдиреЛрдбреНрд╕ рдХрд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВрдпрд╛. рдиреЛрдбреНрд╕ рддреНрдпрд╛рдВрдЪрд╛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕рд╛рдард╡рдд рдирд╛рд╣реАрдд; рддреЛ рдиреЛрдбрдЪреНрдпрд╛ рд╡рдЬрдирд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдореЛрдЬрд▓рд╛ рдЬрд╛рддреЛ. рдЬрд░ рддреНрдпрд╛рдВрдиреА рддреНрдпрд╛рдВрдЪрд╛ рдЗрдВрдбреЗрдХреНрд╕ рд╕рд╛рдард╡рд▓рд╛ рдЕрд╕реЗрд▓ рддрд░ рддреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓ O (n) рдЭрд╛рдбрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓рд╛рдирдВрддрд░ рд╕рд░реНрд╡ рдиреЛрдбреНрд╕рдЪреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ.
рдЪрд▓рд╛ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдХрдбреЗ рд╡рд│реВрдпрд╛. рдЖрдкрд▓реЗ рдЭрд╛рдб рд░рд┐рдХрд╛рдореЗ рдЖрд╣реЗ, рддреНрдпрд╛рдд рдкрд╣рд┐рд▓рд╛ рдиреЛрдб рдЬреЛрдбреВрдпрд╛:

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдкрд╣рд┐рд▓реНрдпрд╛ рдиреЛрдбрдордзреНрдпреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЕрд╕рддреЛ 0, рдЖрдгрд┐ рдЖрддрд╛ рджреЛрди рд╕рдВрднрд╛рд╡реНрдп рдкреНрд░рдХрд░рдгреЗ рдЖрд╣реЗрдд. рдкрд╣рд┐рд▓реНрдпрд╛рдордзреНрдпреЗ, рдореВрд│ рдШрдЯрдХрд╛рдЪрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓реЗрд▓, рджреБрд╕рд▒реНрдпрд╛рдордзреНрдпреЗ, рддреЛ рдмрджрд▓рдгрд╛рд░ рдирд╛рд╣реА.

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдореБрд│рд╛рд╢реА, рдбрд╛рд╡реНрдпрд╛ рдЙрдкрд╡реГрдХреНрд╖рд╛рдЪреЗ рд╡рдЬрди рез рдЖрд╣реЗ.

рджреБрд╕рд░реЗ рдкреНрд░рдХрд░рдг:

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдбрд╛рд╡реНрдпрд╛ рдЙрдкрд╡реГрдХреНрд╖рд╛рдЪреЗ рд╡рдЬрди реж рд░рд╛рд╣рд┐рд▓реНрдпрд╛рдиреЗ рдореВрд│ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓рд▓реЗрд▓рд╛ рдирд╛рд╣реА.

рдиреЛрдбрдЪрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╕рд╛ рдореЛрдЬрд▓рд╛ рдЬрд╛рддреЛ? рддреЛ рддреНрдпрд╛рдЪреНрдпрд╛ рдбрд╛рд╡реНрдпрд╛ рд╕рдмрдЯреНрд░реАрдЪреЗ рд╡рдЬрди рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рдХреНрд░рдорд╛рдВрдХрд╛рд╡рд░реВрди рдкрд╛рдард╡рд▓реЗрд▓реА рд╕рдВрдЦреНрдпрд╛ рдЖрд╣реЗ. рд╣рд╛ рдЖрдХрдбрд╛ рдХрд╛рдп рдЖрд╣реЗ? рд╣рд╛ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛рдЙрдВрдЯрд░ рдЖрд╣реЗ рдЖрдгрд┐ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рддреЛ 0, рдХрд╛рд░рдг рд░реВрдЯрд▓рд╛ рдкрд╛рд▓рдХ рдирд╛рд╣реА. рддрд┐рдереВрди, рдЖрдкрдг рдбрд╛рд╡реНрдпрд╛ рдЪрд╛рдЗрд▓реНрдбрд╡рд░ рдЙрддрд░рдд рдЖрд╣реЛрдд рдХреА рдЙрдЬрд╡реАрдХрдбреЗ рдпрд╛рд╡рд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. рдЬрд░ рдЖрдкрдг рдбрд╛рд╡реНрдпрд╛ рдЪрд╛рдЗрд▓реНрдбрд╡рд░ рдЙрддрд░рдд рдЖрд╣реЛрдд, рддрд░ рдХрд╛рдЙрдВрдЯрд░рдордзреНрдпреЗ рдХрд╛рд╣реАрд╣реА рдЬреЛрдбрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА. рдЬрд░ рдЖрдкрдг рдЙрдЬрд╡реНрдпрд╛ рдЪрд╛рдЗрд▓реНрдбрд╡рд░ рдЙрддрд░рдд рдЖрд╣реЛрдд, рддрд░ рдЖрдкрдг рд╡рд░реНрддрдорд╛рди рдиреЛрдбрдЪрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреЛрдбрддреЛ.

рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрд╛рдпрдирд░реА рд╡реГрдХреНрд╖

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреА рео (рд░реВрдЯрдЪрд╛ рдЙрдЬрд╡рд╛ рдЙрдкрд╡рд░реНрдЧ) рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдЪрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╕рд╛ рдореЛрдЬрд▓рд╛ рдЬрд╛рддреЛ? рд╣рд╛ "рд░реВрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛" + "рдХреА рео рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдиреЛрдбрдЪреНрдпрд╛ рдбрд╛рд╡реНрдпрд╛ рдЙрдкрд╡реГрдХреНрд╖рд╛рдЪреЗ рд╡рдЬрди" + "рез" == рей + реи + рез == рдЖрд╣реЗ. 6
рдХреА рем рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдЪрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ "рд░реВрдЯ рдЗрдВрдбреЗрдХреНрд╕" + рез == рей + рез == рдЕрд╕реЗрд▓. 4

рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдиреБрд╕рд╛рд░ рдШрдЯрдХ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╣рдЯрд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рд╡реЗрд│ рд▓рд╛рдЧрддреЛ рдУ(рд▓реЙрдЧ рдПрди), рдХрд╛рд░рдг рдЗрдЪреНрдЫрд┐рдд рдШрдЯрдХ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреНрд░рдердо рддреЛ рд╢реЛрдзрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдореВрд│рд╛рдкрд╛рд╕реВрди рдпрд╛ рдШрдЯрдХрд╛рдХрдбреЗ рдЬрд╛).

рдЦреЛрд▓реА

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

рд╡рдЬрди рддреЗ рдЦреЛрд▓реА рд░реВрдкрд╛рдВрддрд░рдг рдХреЛрдб.

/*
 * ╨Т╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨┐╨╡╤А╨▓╨╛╨╡ ╤З╨╕╤Б╨╗╨╛ ╨▓ ╤Б╤В╨╡╨┐╨╡╨╜╨╕ 2, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨▒╨╛╨╗╤М╤И╨╡ ╨╕╨╗╨╕ ╤А╨╛╨▓╨╜╨╛ x
 */
uint64_t bntree::cpl2(uint64_t x) {
    x = x - 1;
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >> 16);
    x = x | (x >> 32);

    return x + 1;
}

/*
 * ╨Ф╨▓╨╛╨╕╤З╨╜╤Л╨╣ ╨╗╨╛╨│╨░╤А╨╕╤Д╨╝ ╨╛╤В ╤З╨╕╤Б╨╗╨░
 */
long bntree::ilog2(long d) {
    int result;
    std::frexp(d, &result);
    return result - 1;
}

/*
 * ╨Т╨╡╤Б ╨║ ╨│╨╗╤Г╨▒╨╕╨╜╨╡
 */
uint64_t bntree::weight_to_depth(node_t *p) {
    if (p == NULL) {
        return 0;
    }

    if (p->weight == 1) {
        return 1;
    } else if (p->weight == 2) {
        return 2;
    }

    return this->ilog2(this->cpl2(p->weight));
}

рдкрд░рд┐рдгрд╛рдо

  • рдирд╡реАрди рдШрдЯрдХрд╛рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ рдУ(рд▓реЙрдЧ рдПрди)
  • рдПрдЦрд╛рджреНрдпрд╛ рдШрдЯрдХрд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдХрд╛рдиреЗ рд╣рдЯрд╡рдгреЗ рдЙрджреНрднрд╡рддреЗ рдУ(рд▓реЙрдЧ рдПрди)
  • рдШрдЯрдХрд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдХрд╛рдиреЗ рдорд┐рд│рд╡рдгреЗ рд╣реЗ рдордзреНрдпреЗ рд╣реЛрддреЗ рдУ(рд▓реЙрдЧ рдПрди)

рдЧрддреА рдУ(рд▓реЙрдЧ рдПрди) рд╕рд░реНрд╡ рдбреЗрдЯрд╛ рдПрдХрд╛ рдХреНрд░рдорд╡рд╛рд░реАрдд рд╕рд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдкреИрд╕реЗ рджреЗрддреЛ.

рдЕрд╢реА рд░рдЪрдирд╛ рдХреБрдареЗ рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ рд╣реЗ рдорд▓рд╛ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА. рдЭрд╛рдбреЗ рдХрд╢реА рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рд╣реЗ рдлрдХреНрдд рдПрдХ рдЖрд╡реНрд╣рд╛рди рдЖрд╣реЗ. рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж.

рд╕рдВрджрд░реНрдн

рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдд рд╡реЗрдЧ рдЪрд╛рдЪрдгреАрд╕рд╛рдареА рдЪрд╛рдЪрдгреА рдбреЗрдЯрд╛ рдЖрд╣реЗ. рдЭрд╛рдбрд╛рд╡рд░ рд▓реЛрдХрд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврдд рдЖрд╣реЗ. 1000000 рдШрдЯрдХ. рдЖрдгрд┐ рдШрдЯрдХрд╛рдВрдЪреЗ рдХреНрд░рдорд┐рдХ рд╣рдЯрд╡рдгреЗ, рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рд╣реЛрддреЗ. 1000000 рд╡реЗрд│рд╛. рдореНрд╣рдгрдЬреЗ 3000000 рдСрдкрд░реЗрд╢рдиреНрд╕. рдирд┐рдХрд╛рд▓ рдЦреВрдк рдЪрд╛рдВрдЧрд▓рд╛ рд╣реЛрддрд╛: ~рео рд╕реЗрдХрдВрдж.

рд╕реНрддреНрд░реЛрдд: www.habr.com

DDoS рд╕рдВрд░рдХреНрд╖рдг, VPS VDS рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯрд╕рд╛рдареА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реЗрджреА рдХрд░рд╛ ЁЯФе рдбреАрдбреЙрд╕ рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ, рд╡реНрд╣реАрдкреАрдПрд╕ (VPS) рд╡реНрд╣реАрдбреАрдПрд╕ (VDS) рд╕рд░реНрд╡реНрд╣рд░реНрд╕ рдЦрд░реЗрджреА рдХрд░рд╛ | ProHoster