āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āφāĻŽāĻžāϕ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻžāϜāϟāĻŋ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ: āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāϤ⧋ āϝāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻžāϗ⧁āϞ⧋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻŦ⧇āĨ¤

  • āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āωāĻĒāĻžāĻĻāĻžāύ āϝ⧋āĻ— āĻ•āϰ⧁āύ
  • āĻ•ā§āϰāĻŽāĻŋāĻ• āϏāĻ‚āĻ–ā§āϝāĻž āĻ…āύ⧁āϏāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧁āύ
  • āĻ•ā§āϰāĻŽāĻŋāĻ• āϏāĻ‚āĻ–ā§āϝāĻž āĻĻā§āĻŦāĻžāϰāĻž āĻāĻ•āϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āĻĒāĻžāύ
  • āĻĄā§‡āϟāĻž āϏāĻžāϜāĻžāύ⧋ āφāĻ•āĻžāϰ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ

āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āĻĄā§‡āϟāĻž āϝ⧋āĻ— āĻ“ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāĻšā§āϛ⧇, āĻāĻŦāĻ‚ āĻ•āĻžāĻ āĻžāĻŽā§‹āϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻĻā§āϰ⧁āϤ āĻ•āĻžāĻ°ā§āϝāĻ•ā§āϰāĻŽ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇, āφāĻŽāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽāĨ¤ āĻāϏāϟāĻŋāĻĄāĻŋāĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻŦā§āϝāĻ°ā§āĻĨ āĻĒā§āϰāĻŽāĻžāĻŖāĻŋāϤ āĻšāϞ⧋, āĻāĻŦāĻ‚ āĻāϟāĻž āĻ¸ā§āĻĒāĻˇā§āϟ āĻšāϝāĻŧ⧇ āϗ⧇āϞ āϝ⧇ āφāĻŽāĻžāϕ⧇ āύāĻŋāĻœā§‡āχ āĻ•āĻŋāϛ⧁ āĻāĻ•āϟāĻž āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āϝ⧇ āϏāĻŽāĻžāϧāĻžāύāϟāĻŋ āĻŽāĻžāĻĨāĻžāϝāĻŧ āĻāϞ⧋ āϤāĻž āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āϏāĻžāĻ°ā§āϚ āĻŸā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž, āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻĻā§āϰ⧁āϤ āĻĄā§‡āϟāĻž āϝ⧋āĻ— āĻ“ āĻ…āĻĒāϏāĻžāϰāĻŖ āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻžāϕ⧇ āϏāĻžāϜāĻžāύ⧋ āĻ•ā§āϰāĻŽā§‡ āϏāĻ‚āϰāĻ•ā§āώāϪ⧇āϰ āĻļāĻ°ā§āϤāϗ⧁āϞ⧋ āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇āĨ¤ āĻŦāĻžāĻ•āĻŋ āĻ›āĻŋāϞ āĻļ⧁āϧ⧁ āĻāϟāĻž āĻŦ⧇āϰ āĻ•āϰāĻž āϝ⧇, āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻŽāĻ¸ā§āϤ āωāĻĒāĻžāĻĻāĻžāύāϕ⧇ āϏ⧂āĻšā§€āĻŦāĻĻā§āϧ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻŸā§āϰāĻŋ-āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϞ⧇āχ āϏ⧂āϚāĻ•āϗ⧁āϞ⧋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

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.

āĻāϰāĻĒāϰ⧇, āφāĻŽāϰāĻž āĻāχ āϧāϰāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻ—āĻžāϛ⧇āϰ āωāĻĻāĻžāĻšāϰāϪ⧇āϰ āϚāĻžāĻ•ā§āώ⧁āώ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻĻ⧇āĻ–āĻŦāĨ¤ āĻ•āĻžāϞ⧋ āϰāĻ™āϟāĻŋ āύ⧋āĻĄ āϕ⧀ (key) āĻĻ⧇āĻ–āĻžāĻŦ⧇ (āĻāϰ āĻŽāĻžāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇ āύāĻž, āĻ•āĻžāϰāĻŖ āϏ⧇āϟāĻŋāϰ āϕ⧋āύ⧋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ), āϞāĻžāϞ — āύ⧋āĻĄā§‡āϰ āĻ“āϜāύ, āϏāĻŦ⧁āϜ — āύ⧋āĻĄ āϏ⧂āϚāĻ•āĨ¤

āϝāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻŸā§āϰāĻŋ āĻ–āĻžāϞāĻŋ āĻĨāĻžāϕ⧇, āϤāĻ–āύ āĻāϰ āĻ“āϝāĻŧ⧇āϟ āĻšāϝāĻŧ ā§ĻāĨ¤ āϚāϞ⧁āύ āĻāϤ⧇ āĻāĻ•āϟāĻŋ āϰ⧁āϟ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āϝ⧋āĻ— āĻ•āϰāĻŋ:

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āĻŸā§āϰāĻŋ-āϟāĻŋāϰ āĻ“āϝāĻŧ⧇āϟ ā§§ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āϰ⧁āϟ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻ“āϝāĻŧ⧇āϟāĻ“ ā§§āĨ¤ āϰ⧁āϟ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻ“āϝāĻŧ⧇āϟāχ āĻšāϞ⧋ āĻŸā§āϰāĻŋ-āϟāĻŋāϰ āĻ“āϝāĻŧ⧇āϟāĨ¤

āϚāϞ⧁āύ āφāϰāĻ“ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āϝ⧋āĻ— āĻ•āϰāĻž āϝāĻžāĻ•:

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›
āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›
āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›
āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āωāĻĒāĻžāĻĻāĻžāύ āϝ⧁āĻ•ā§āϤ āĻšāϞ⧇, āφāĻŽāϰāĻž āύ⧋āĻĄāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āύāĻŋāĻšā§‡ āύāĻžāĻŽāĻŋ āĻāĻŦāĻ‚ āĻ…āϤāĻŋāĻ•ā§āϰāĻŽ āĻ•āϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āύ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ“āϝāĻŧ⧇āϟ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰāϟāĻŋ āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻĻāĻŋāχāĨ¤ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āύ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻ–āύ āϤāĻžāϰ āĻ“āϝāĻŧ⧇āϟ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ 1āϝāĻĻāĻŋ āĻāχ āϧāϰāύ⧇āϰ āϕ⧀-āϏāĻš āϕ⧋āύ⧋ āύ⧋āĻĄ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āφāĻŽāϰāĻž āĻŽāĻžāύāϟāĻŋ āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āĻ•āϰ⧇ āϰ⧁āĻŸā§‡ āĻĢāĻŋāϰ⧇ āϝāĻžāχ āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒāĻžāϏ āĻ•āϰāĻž āϏāĻŽāĻ¸ā§āϤ āύ⧋āĻĄā§‡āϰ āĻ“āϜāύ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰ⧇ āĻĻāĻŋāχāĨ¤
āϝāĻĻāĻŋ āϕ⧋āύ⧋ āύ⧋āĻĄ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻŽāϰāĻž āύāĻŋāĻšā§‡ āĻ—āĻŋāϝāĻŧ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĻ⧇āĻ“āϝāĻŧāĻž āύ⧋āĻĄāϗ⧁āϞ⧋āϰ āĻ“āϝāĻŧ⧇āϟ āĻāĻ• āĻ•āĻŽāĻŋāϝāĻŧ⧇ āĻĻāĻŋāχāĨ¤

āϏ⧂āϚāϕ⧇āϰ

āĻāĻŦāĻžāϰ āφāϏāĻž āϝāĻžāĻ• āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āύ⧋āĻĄ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤ āύ⧋āĻĄāϗ⧁āϞ⧋ āϤāĻžāĻĻ⧇āϰ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āύāĻž; āĻāϟāĻŋ āύ⧋āĻĄā§‡āϰ āĻ“āϝāĻŧ⧇āĻŸā§‡āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āϤāĻžāϰāĻž āϤāĻžāĻĻ⧇āϰ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ, āϤāĻžāĻšāϞ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϤ⧋... āωāĻĒāϰ) āĻŸā§āϰāĻŋ-āϤ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻĒāϰ āϏāĻŽāĻ¸ā§āϤ āύ⧋āĻĄā§‡āϰ āϏ⧂āϚāĻ•āϗ⧁āϞāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧāĨ¤
āϚāϞ⧁āύ āĻāĻŦāĻžāϰ āĻāĻ•āϟāĻŋ āϚāĻžāĻ•ā§āώ⧁āώ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϝāĻŧ āϝāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻ•āĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻŸā§āϰāĻŋ-āϟāĻŋ āĻ–āĻžāϞāĻŋ, āϚāϞ⧁āύ āĻāϤ⧇ āĻĒā§āϰāĻĨāĻŽ āύ⧋āĻĄāϟāĻŋ āϝ⧋āĻ— āĻ•āϰāĻŋ:

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āĻĒā§āϰāĻĨāĻŽ āύ⧋āĻĄāϟāĻŋāϰ āĻāĻ•āϟāĻŋ āϏ⧂āϚāĻ• āφāϛ⧇ 0āĻāĻŦāĻ‚ āĻāĻ–āύ āĻĻ⧁āϟāĻŋ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽāϟāĻŋāϤ⧇, āϰ⧁āϟ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāĻŦ⧇, āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻŋāϤ⧇ āĻšāĻŦ⧇ āύāĻžāĨ¤

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āĻŽā§‚āϞ⧇, āĻŦāĻžāĻŽ āϏāĻžāĻŦāĻŸā§āϰāĻŋāϟāĻŋāϰ āĻ“āϜāύ ā§§āĨ¤

āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āϘāϟāύāĻž:

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āϰ⧁āϟ āχāύāĻĄā§‡āĻ•ā§āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧāύāĻŋ, āĻ•āĻžāϰāĻŖ āĻāϰ āĻŦāĻžāĻŽ āϏāĻžāĻŦāĻŸā§āϰāĻŋāϰ āĻ“āϝāĻŧ⧇āϟ ā§Ļ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāĻ•āϟāĻŋ āύ⧋āĻĄā§‡āϰ āχāύāĻĄā§‡āĻ•ā§āϏ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ? āĻāϟāĻŋ āĻšāϞ⧋ āϤāĻžāϰ āĻŦāĻžāĻŽ āϏāĻžāĻŦāĻŸā§āϰāĻŋāϰ āĻ“āϝāĻŧ⧇āϟ āĻāĻŦāĻ‚ āϤāĻžāϰ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻĨ⧇āϕ⧇ āφāϏāĻž āϏāĻ‚āĻ–ā§āϝāĻžāϰ āϝ⧋āĻ—āĻĢāϞāĨ¤ āĻāχ āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻŋ āϕ⧀? āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ, āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻāϰ āϏāĻŽāĻžāύāĨ¤ 0āĻ•āĻžāϰāĻŖ āϰ⧁āĻŸā§‡āϰ āϕ⧋āύ⧋ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āύ⧇āχāĨ¤ āĻāϰāĻĒāϰ, āϏāĻŦāĻ•āĻŋāϛ⧁ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻŦāĻžāĻŽ āϚāĻžāχāĻ˛ā§āĻĄā§‡ āϝāĻžāĻšā§āĻ›āĻŋ āύāĻžāĻ•āĻŋ āĻĄāĻžāύ āϚāĻžāχāĻ˛ā§āĻĄā§‡āĨ¤ āϝāĻĻāĻŋ āφāĻŽāϰāĻž āĻŦāĻžāĻŽ āϚāĻžāχāĻ˛ā§āĻĄā§‡ āϝāĻžāχ, āϤāĻžāĻšāϞ⧇ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ⧇ āĻ•āĻŋāϛ⧁āχ āϝ⧋āĻ— āĻšāϝāĻŧ āύāĻžāĨ¤ āφāϰ āϝāĻĻāĻŋ āφāĻŽāϰāĻž āĻĄāĻžāύ āϚāĻžāχāĻ˛ā§āĻĄā§‡ āϝāĻžāχ, āϤāĻžāĻšāϞ⧇ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āύ⧋āĻĄā§‡āϰ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏāϟāĻŋ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āϏ⧂āϚāĻŋāĻŦāĻĻā§āϧ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›

āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, ā§Ž āϕ⧀-āϝ⧁āĻ•ā§āϤ āĻāĻ•āϟāĻŋ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ (āϰ⧁āĻŸā§‡āϰ āĻĄāĻžāύ āϚāĻžāχāĻ˛ā§āĻĄ) āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ? āĻāϟāĻŋ āĻšāϞ⧋ "āϰ⧁āϟ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ" + "ā§Ž āϕ⧀-āϝ⧁āĻ•ā§āϤ āύ⧋āĻĄā§‡āϰ āĻŦāĻžāĻŽ āϏāĻžāĻŦāĻŸā§āϰāĻŋāϰ āĻ“āϝāĻŧ⧇āϟ" + "ā§§" == ā§Š + ⧍ + ā§§ == 6
ā§Ŧ āϕ⧀-āϝ⧁āĻ•ā§āϤ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻšāĻŦ⧇ "āϰ⧁āϟ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ" + 1 == 3 + 1 == 4

āϏ⧇āχ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€, āχāύāĻĄā§‡āĻ•ā§āϏ āĻĻā§āĻŦāĻžāϰāĻž āϕ⧋āύ⧋ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻĒ⧇āϤ⧇ āĻāĻŦāĻ‚ āĻŽā§āϛ⧇ āĻĢ⧇āϞāϤ⧇ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇āĨ¤ āĻ“ (āϞāĻ— āĻāύ)āĻ•āĻžāϰāĻŖ āĻ•āĻžāĻ™ā§āĻ•ā§āώāĻŋāϤ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻĒ⧇āϤ⧇ āĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻĨāĻŽā§‡ āϏ⧇āϟāĻŋ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (āϰ⧁āϟ āĻĨ⧇āϕ⧇ āύāĻŋāĻšā§‡āϰ āĻĻāĻŋāϕ⧇ āĻāχ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟāϟāĻŋāϤ⧇ āϝ⧇āϤ⧇ āĻšāĻŦ⧇)āĨ¤

āĻ—āĻ­ā§€āϰāϤāĻž

āĻ“āϜāύ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇, āĻ­āĻžāϰāϏāĻžāĻŽā§āϝ āϰāĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ—āĻžāϛ⧇āϰ āĻ—āĻ­ā§€āϰāϤāĻžāĻ“ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻŦāĻ°ā§āϤāĻŽāĻžāύ āύ⧋āĻĄā§‡āϰ āĻ“āϜāύāϕ⧇ āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻ“āϜāύ⧇āϰ āϏāĻŽāĻžāύ āĻŦāĻž āϤāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ ⧍-āĻāϰ āĻĒā§āϰāĻĨāĻŽ āϘāĻžāϤ⧇ āϰāĻžāωāĻ¨ā§āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āϏ⧇āχ āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻŋāϰ āĻŦāĻžāχāύāĻžāϰāĻŋ āϞāĻ—āĻžāϰāĻŋāĻĻāĻŽ āύāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻŸā§āϰāĻŋ-āϟāĻŋāϰ āĻ—āĻ­ā§€āϰāϤāĻž āĻĻ⧇āĻŦ⧇, āϝāĻĻāĻŋ āϧāϰ⧇ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ āϝ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻĄāĨ¤ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āωāĻĒāĻžāĻĻāĻžāύ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻĒāϰ āĻŸā§āϰāĻŋ-āϟāĻŋ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻĄ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āφāĻŽāĻŋ āĻŸā§āϰāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ āϤāĻžāϰ āϤāĻ¤ā§āĻ¤ā§āĻŦ⧇ āϝāĻžāĻŦ āύāĻžāĨ¤ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄā§‡ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻŋāĻ‚ āĻĢāĻžāĻ‚āĻļāύ āĻĻ⧇āĻ“āϝāĻŧāĻž āφāϛ⧇āĨ¤

āĻ“āϜāύ āĻĨ⧇āϕ⧇ āĻ—āĻ­ā§€āϰāϤāĻžāϝāĻŧ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ⧇āϰ āϕ⧋āĻĄāĨ¤

/*
 * Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ĐŋĐĩŅ€Đ˛ĐžĐĩ Ņ‡Đ¸ŅĐģĐž в ҁ҂ĐĩĐŋĐĩĐŊи 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 āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster