เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เชฎเชจเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชชเซเชฐเช•เชพเชฐเชจเซ€ เชธเชฎเชธเซเชฏเชพ เช†เชตเซ€. เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐเซ‡เชœ เช•เชจเซเชŸเซ‡เชจเชฐ เชฒเชพเช—เซ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เชœเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡:

  • เชจเชตเซเช‚ เชคเชคเซเชต เชฆเชพเช–เชฒ เช•เชฐเซ‹
  • เชธเซ€เชฐเซ€เชฏเชฒ เชจเช‚เชฌเชฐ เชฆเซเชตเชพเชฐเชพ เชคเชคเซเชต เชฆเซ‚เชฐ เช•เชฐเซ‹
  • เช“เชฐเซเชกเชฟเชจเชฒ เชจเช‚เชฌเชฐ เชฆเซเชตเชพเชฐเชพ เชคเชคเซเชต เชฎเซ‡เชณเชตเซ‹
  • เชฎเชพเชนเชฟเชคเซ€ เชธเซ‰เชฐเซเชŸ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡

เชกเซ‡เชŸเชพ เชธเชคเชค เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชฐเชšเชจเชพเช เชเชกเชชเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ€ เช—เชคเชฟเชจเซ‡ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเซ€ เชœเซ‹เชˆเช. เชชเชนเซ‡เชฒเชพ เชฎเซ‡เช‚ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช†เชตเซ€ เชตเชธเซเชคเซเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹ เชงเซ‹. เช† เชฎเชพเชฐเซเช— เชธเชซเชณเชคเชพเชจเซ‹ เชคเชพเชœ เชชเชนเซ‡เชฐเซเชฏเซ‹ เชจ เชนเชคเซ‹ เช…เชจเซ‡ เชธเชฎเชœเชฃ เช†เชตเซ€ เช•เซ‡ เชฎเชพเชฐเซ‡ เชœเชพเชคเซ‡ เช•เช‚เชˆเช• เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชเช• เชœ เชตเชธเซเชคเซ เชœเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เช†เชตเซ€ เชคเซ‡ เชฆเซเชตเชฟเชธเช‚เช—เซ€ เชถเซ‹เชง เชตเซƒเช•เซเชทเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชนเชคเซ‹. เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเซ‰เชฐเซเชŸ เช•เชฐเซ‡เชฒเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเชพ เชเชกเชชเซ€ เชจเชฟเชตเซ‡เชถ, เช•เชพเชขเซ€ เชจเชพเช–เชตเชพ เช…เชจเซ‡ เชธเช‚เช—เซเชฐเชนเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡ เช›เซ‡. เชฌเชงเชพ เชคเชคเซเชตเซ‹เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชตเซƒเช•เซเชท เชฌเชฆเชฒเชพเชฏ เชคเซเชฏเชพเชฐเซ‡ เชธเซ‚เชšเช•เชพเช‚เช•เซ‹เชจเซ€ เชชเซเชจ: เช—เชฃเชคเชฐเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ€ เชคเซ‡ เชถเซ‹เชงเชตเชพเชจเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡.

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 เชฌเชจเซ‡ เช›เซ‡, เชฎเซ‚เชณ เชคเชคเซเชตเชจเซเช‚ เชตเชœเชจ 1 เชฌเชจเซ‡ เช›เซ‡. เชฎเซ‚เชณ เชคเชคเซเชตเชจเซเช‚ เชตเชœเชจ เชตเซƒเช•เซเชทเชจเซเช‚ เชตเชœเชจ เช›เซ‡.

เชšเชพเชฒเซ‹ เชฅเซ‹เชกเชพ เชตเชงเซ เช˜เชŸเช•เซ‹ เช‰เชฎเซ‡เชฐเซ€เช:

เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท
เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท
เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท
เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชจเชตเซเช‚ เชคเชคเซเชต เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เช—เชพเช‚เช เซ‹ เชจเซ€เชšเซ‡ เชœเชˆเช เช›เซ€เช เช…เชจเซ‡ เชชเชธเชพเชฐ เชฅเชคเชพ เชฆเชฐเซ‡เช• เชจเซ‹เชกเชจเชพ เชตเชœเชจ เช•เชพเช‰เชจเซเชŸเชฐเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเซ€เช เช›เซ€เช. เชœเซเชฏเชพเชฐเซ‡ เชจเชตเซ‹ เชจเซ‹เชก เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชเช• เชตเชœเชจ เชธเซ‹เช‚เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ 1. เชœเซ‹ เช†เชตเซ€ เช•เซ€ เชธเชพเชฅเซ‡เชจเซ‹ เชจเซ‹เชก เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เช†เชชเชฃเซ‡ เชฎเซ‚เชฒเซเชฏเชจเซ‡ เช“เชตเชฐเชฐเชพเชˆเชŸ เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชฐเซเชŸ เชชเชฐ เชชเชพเช›เชพ เชœเชˆเชถเซเช‚, เช…เชฎเซ‡ เชชเชธเชพเชฐ เช•เชฐเซ‡เชฒเชพ เชคเชฎเชพเชฎ เชจเซ‹เชกเซเชธเชจเชพ เชตเชœเชจเชฎเชพเช‚เชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชฐเชฆ เช•เชฐเซ€เชถเซเช‚.
เชœเซ‹ เช•เซ‹เชˆ เชจเซ‹เชก เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชจเซ€เชšเซ‡ เชœเชˆเช เช›เซ€เช เช…เชจเซ‡ เชชเชธเชพเชฐ เชฅเชฏเซ‡เชฒเชพ เช—เชพเช‚เช เซ‹เชจเชพ เชตเชœเชจเชฎเชพเช‚ เช˜เชŸเชพเชกเซ‹ เช•เชฐเซ€เช เช›เซ€เช.

เชธเซ‚เชšเช•เชพเช‚เช•เซ‹

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชจเซ‹เชกเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‡เชจเซเชกเซ‡เช•เซเชธ เช•เชฐเชตเชพ เชคเซ‡ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€เช. เชจเซ‹เชกเซเชธ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชคเซ‡เชฎเชจเชพ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชคเชพ เชจเชฅเซ€, เชคเซ‡ เช—เชพเช‚เช เซ‹เชจเชพ เชตเชœเชจเชจเชพ เช†เชงเชพเชฐเซ‡ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซ‹ เชคเซ‡เช“ เชคเซ‡เชฎเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เชคเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฐเชนเซ‡เชถเซ‡ เช“ (เชเชจ) เชตเซƒเช•เซเชทเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชซเซ‡เชฐเชซเชพเชฐ เชชเช›เซ€ เชคเชฎเชพเชฎ เช—เชพเช‚เช เซ‹เชจเชพ เช‡เชจเซเชกเซ‡เช•เซเชธเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชฏ.
เชšเชพเชฒเซ‹ เชฆเซเชฐเชถเซเชฏ เชฐเชœเซ‚เช†เชค เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€เช. เช…เชฎเชพเชฐเซเช‚ เชตเซƒเช•เซเชท เช–เชพเชฒเซ€ เช›เซ‡, เชšเชพเชฒเซ‹ เชคเซ‡เชฎเชพเช‚ 1 เชฒเซ€ เชจเซ‹เชก เช‰เชฎเซ‡เชฐเซ€เช:

เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เชชเซเชฐเชฅเชฎ เชจเซ‹เชกเชฎเชพเช‚ เช‡เชจเซเชกเซ‡เช•เซเชธ เชนเซ‹เชฏ เช›เซ‡ 0, เช…เชจเซ‡ เชนเชตเซ‡ 2 เช•เซ‡เชธ เชถเช•เซเชฏ เช›เซ‡. เชชเซเชฐเชฅเชฎเชฎเชพเช‚, เชฎเซ‚เชณ เชคเชคเซเชตเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฌเชฆเชฒเชพเชถเซ‡, เชฌเซ€เชœเชพเชฎเชพเช‚ เชคเซ‡ เชฌเชฆเชฒเชพเชถเซ‡ เชจเชนเซ€เช‚.

เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เชฎเซ‚เชณเชฎเชพเช‚, เชกเชพเชฌเชพ เชธเชฌเชŸเซเชฐเซ€เชจเซเช‚ เชตเชœเชจ 1 เช›เซ‡.

เชฌเซ€เชœเซ‹ เช•เซ‡เชธ:

เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เชฎเซ‚เชณเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฌเชฆเชฒเชพเชˆ เชจเชฅเซ€ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เชจเชพ เชกเชพเชฌเชพ เชธเชฌเชŸเซเชฐเซ€เชจเซเช‚ เชตเชœเชจ 0 เชฐเชนเซเชฏเซเช‚ เช›เซ‡.

เชจเซ‹เชกเชจเชพ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชจเซ€ เช—เชฃเชคเชฐเซ€ เชคเซ‡เชจเชพ เชกเชพเชฌเชพ เชธเชฌเชŸเซเชฐเซ€เชจเชพ เชตเชœเชจ + เชฎเชพเชคเชพเชชเชฟเชคเชพ เชชเชพเชธเซ‡เชฅเซ€ เชชเชธเชพเชฐ เช•เชฐเชพเชฏเซ‡เชฒ เชธเช‚เช–เซเชฏเชพ เชคเชฐเซ€เช•เซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เชธเช‚เช–เซเชฏเชพ เชถเซเช‚ เช›เซ‡?, เช† เช‡เชจเซเชกเซ‡เช•เซเชธ เช•เชพเช‰เชจเซเชŸเชฐ เช›เซ‡, เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชคเซ‡ เชฌเชฐเชพเชฌเชฐ เช›เซ‡ 0, เช•เชพเชฐเชฃ เช•เซ‡ เชฎเซ‚เชณเชจเซ‡ เช•เซ‹เชˆ เชชเชฟเชคเซƒ เชจเชฅเซ€. เชชเช›เซ€ เชคเซ‡ เชฌเชงเซเช‚ เชคเซ‡เชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เช†เชชเชฃเซ‡ เชกเชพเชฌเซ€ เชฌเชพเชœเซเชจเชพ เชฌเชพเชณเช• เช…เชฅเชตเชพ เชœเชฎเชฃเซ€ เชคเชฐเชซ เช•เซเชฏเชพเช‚ เชœเชˆเช เช›เซ€เช. เชœเซ‹ เชกเชพเชฌเซ€ เชฌเชพเชœเซเช, เชคเซ‹ เชชเช›เซ€ เช•เชพเช‰เชจเซเชŸเชฐเชฎเชพเช‚ เช•เช‚เชˆ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซเช‚ เชจเชฅเซ€. เชœเซ‹ เช†เชชเชฃเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชจเซ‹เชกเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชจเซ‡ เชœเชฎเชฃเซ€ เชฌเชพเชœเซเช เช‰เชฎเซ‡เชฐเซ€เช.

เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชฌเชพเชˆเชจเชฐเซ€ เชตเซƒเช•เซเชท

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช•เซ€ 8 (เชฐเซเชŸเชจเซเช‚ เชœเชฎเชฃเซเช‚ เชฌเชพเชณเช•) เชธเชพเชฅเซ‡เชจเชพ เชคเชคเซเชตเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เช›เซ‡ "เชฐเซเชŸ เช‡เชจเซเชกเซ‡เช•เซเชธ" + "เช•เซ€ 8 เชธเชพเชฅเซ‡ เชจเซ‹เชกเชจเชพ เชกเชพเชฌเชพ เชธเชฌเชŸเซเชฐเซ€เชจเซเช‚ เชตเชœเชจ" + "1" == 3 + 2 + 1 == 6
เช•เซ€ 6 เชธเชพเชฅเซ‡เชจเชพ เชคเชคเซเชตเชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ "เชฐเซเชŸ เช‡เชจเซเชกเซ‡เช•เซเชธ" + 1 == 3 + 1 == เชนเชถเซ‡. 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 เช•เชพเชฎเช—เซ€เชฐเซ€ เชชเชฐเชฟเชฃเชพเชฎ เช–เซ‚เชฌ เชธเชพเชฐเซเช‚ ~ 8 เชธเซ‡เช•เชจเซเชกเชฎเชพเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹