เด‡เตปเดกเด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€

เด‡เตปเดกเด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดถเตเดจเด‚ เดžเดพเตป เดจเต‡เดฐเดฟเดŸเตเดŸเต. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจ เด’เดฐเต เดกเดพเดฑเตเดฑ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต:

  • เดชเตเดคเดฟเดฏ เด˜เดŸเด•เด‚ เดšเต‡เตผเด•เตเด•เตเด•
  • เดธเต€เดฐเดฟเดฏเตฝ เดจเดฎเตเดชเตผ เดชเตเดฐเด•เดพเดฐเด‚ เด˜เดŸเด•เด‚ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด•
  • เด“เตผเดกเดฟเดจเตฝ เดจเดฎเตเดชเตผ เดชเตเดฐเด•เดพเดฐเด‚ เด˜เดŸเด•เด‚ เดจเต‡เดŸเตเด•
  • เดกเดพเดฑเตเดฑ เด…เดŸเตเด•เตเด•เดฟเดฏ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดกเดพเดฑเตเดฑ เดจเดฟเดฐเดจเตเดคเดฐเด‚ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด˜เดŸเดจ เดตเต‡เด—เดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดตเต‡เด—เดค เด‰เดฑเดชเตเดชเดพเด•เตเด•เดฃเด‚. เด†เดฆเตเดฏเด‚ เดžเดพเตป เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด•เดพเดฐเตเดฏเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเดšเตเดšเต เด•เตเดฒเดพเดธเต. เดˆ เดชเดพเดค เดตเดฟเดœเดฏเดฟเดšเตเดšเดฟเดฒเตเดฒ, เดŽเดจเดฟเด•เตเด•เต เดธเตเดตเดฏเด‚ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฃเด‚ เดŽเดจเตเดจ เดงเดพเดฐเดฃ เดตเดจเตเดจเต. เด’เดฐเต เดฌเตˆเดจเดฑเดฟ เดธเต†เตผเดšเตเดšเต เดŸเตเดฐเต€ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดฎเดจเดธเตเดธเดฟเตฝ เดตเดจเตเดจเดคเต. เด•เดพเดฐเดฃเด‚, เดตเต‡เด—เดคเตเดคเดฟเตฝ เดšเต‡เตผเด•เตเด•เตฝ, เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตฝ, เด…เดŸเตเด•เตเด•เดฟเดฏ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฃเด‚ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด†เดตเดถเตเดฏเด•เดค เด‡เดคเต เดจเดฟเดฑเดตเต‡เดฑเตเดฑเตเดจเตเดจเต. เดŽเดฒเตเดฒเดพ เด˜เดŸเด•เด™เตเด™เดณเตเด‚ เดŽเด™เตเด™เดจเต† เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเดพเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดฎเดฐเด‚ เดฎเดพเดฑเตเดฎเตเดชเต‹เตพ เดธเต‚เดšเดฟเด•เด•เตพ เดตเต€เดฃเตเดŸเตเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต.

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. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด•เต€ เด‰เดณเตเดณ เด’เดฐเต เดจเต‹เดกเต เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดฎเต‚เดฒเตเดฏเด‚ เดคเดฟเดฐเตเดคเตเดคเดฟเดฏเต†เดดเตเดคเตเด•เดฏเตเด‚ เดฑเต‚เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดชเต‹เด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚, เดžเด™เตเด™เตพ เด•เดŸเดจเตเดจเตเดชเต‹เดฏ เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดญเดพเดฐเดคเตเดคเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดฑเดฆเตเดฆเดพเด•เตเด•เตเด‚.
เด’เดฐเต เดจเต‹เดกเต เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดคเดพเดดเต‡เด•เตเด•เต เดชเต‹เดฏเดฟ เดชเดพเดธเดพเดฏ เดจเต‹เดกเตเด•เดณเตเดŸเต† เดญเดพเดฐเด‚ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต.

เดธเต‚เดšเดฟเด•เด•เตพ

เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เดŽเด™เตเด™เดจเต† เดธเต‚เดšเดฟเด• เดจเต‹เดกเตเด•เตพ เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚. เดจเต‹เดกเตเด•เตพ เด…เดตเดฏเตเดŸเต† เดธเต‚เดšเดฟเด• เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ, เดจเต‹เดกเตเด•เดณเตเดŸเต† เดญเดพเดฐเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเดพเดฃเต เด‡เดคเต เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเดคเต. เด…เดตเตผ เด…เดตเดฐเตเดŸเต† เดธเต‚เดšเดฟเด• เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด‚ O (n) เดŸเตเดฐเต€เดฏเดฟเดฒเต† เด“เดฐเต‹ เดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเตเด‚ เดถเต‡เดทเด‚ เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดธเต‚เดšเดฟเด•เด•เตพ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เดธเดฎเดฏเด‚.
เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดตเดฟเดทเตเดตเตฝ เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚. เดžเด™เตเด™เดณเตเดŸเต† เดฎเดฐเด‚ เดถเต‚เดจเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเดฒเต‡เด•เตเด•เต เด†เดฆเตเดฏ เดจเต‹เดกเต เดšเต‡เตผเด•เตเด•เดพเด‚:

เด‡เตปเดกเด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€

เด†เดฆเตเดฏ เดจเต‹เดกเดฟเดจเต เด’เดฐเต เดธเต‚เดšเดฟเด•เดฏเตเดฃเตเดŸเต 0, เด‡เดชเตเดชเต‹เตพ 2 เด•เต‡เดธเตเด•เตพ เดธเดพเดงเตเดฏเดฎเดพเดฃเต. เด†เดฆเตเดฏเดคเตเดคเต‡เดคเดฟเตฝ, เดฑเต‚เดŸเตเดŸเต เดฎเต‚เดฒเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเต‚เดšเดฟเด• เดฎเดพเดฑเตเด‚, เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเดฟเตฝ เด…เดคเต เดฎเดพเดฑเดฟเดฒเตเดฒ.

เด‡เตปเดกเด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€

เดฑเต‚เดŸเตเดŸเดฟเตฝ, เด‡เดŸเดคเต เด‰เดชเดตเตƒเด•เตเดทเดคเตเดคเดฟเดจเต 1 เดญเดพเดฐเดฎเตเดฃเตเดŸเต.

เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด•เต‡เดธเต:

เด‡เตปเดกเด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€

เดฑเต‚เดŸเตเดŸเดฟเดจเตเดฑเต† เดธเต‚เดšเดฟเด• เดฎเดพเดฑเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด…เดคเดฟเดจเตเดฑเต† เด‡เดŸเดคเต เดธเดฌเตเดŸเตเดฐเต€เดฏเตเดŸเต† เดญเดพเดฐเด‚ 0 เด†เดฏเดฟ เดคเตเดŸเดฐเตเดจเตเดจเต.

เด’เดฐเต เดจเต‹เดกเดฟเดจเตเดฑเต† เดธเต‚เดšเดฟเด• เด…เดคเดฟเดจเตเดฑเต† เด‡เดŸเดคเต เดธเดฌเตเดŸเตเดฐเต€เดฏเตเดŸเต† เดญเดพเดฐเด‚ + เดฐเด•เตเดทเดฟเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตˆเดฎเดพเดฑเดฟเดฏ เดธเด‚เด–เตเดฏเดฏเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต. เดˆ เดจเดฎเตเดชเตผ เดŽเดจเตเดคเดพเดฃเต?, เด‡เดคเดพเดฃเต เดธเต‚เดšเดฟเด• เด•เต—เดฃเตเดŸเตผ, เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เด‡เดคเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต 0, เด•เดพเดฐเดฃเด‚ เดฑเต‚เดŸเตเดŸเดฟเดจเต เดฎเดพเดคเดพเดชเดฟเดคเดพเด•เตเด•เดณเดฟเดฒเตเดฒ. เด…เดชเตเดชเต‹เตพ เดŽเดฒเตเดฒเดพเด‚ เดจเดฎเตเดฎเตพ เด‡เดŸเดคเต เด•เตเดŸเตเดŸเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต‹ เดตเดฒเดคเตเดคเต‡เดฏเดฟเดฒเต‡เด•เตเด•เต‹ เดŽเดตเดฟเดŸเต† เดชเต‹เด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดŸเดคเตเดตเดถเดคเตเดคเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด•เต—เดฃเตเดŸเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดจเตเดจเตเด‚ เดšเต‡เตผเด•เตเด•เดฟเดฒเตเดฒ. เดจเดฎเตเดฎเตพ เดจเดฟเดฒเดตเดฟเดฒเต† เดจเต‹เดกเดฟเดจเตเดฑเต† เดธเต‚เดšเดฟเด• เดตเดฒเดคเต เด’เดจเตเดจเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ.

เด‡เตปเดกเด•เตโ€Œเดธเต เดšเต†เดฏเตโ€Œเดค เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด•เต€ 8 (เดฑเต‚เดŸเตเดŸเดฟเดจเตเดฑเต† เดถเดฐเดฟเดฏเดพเดฏ เด•เตเดŸเตเดŸเดฟ) เด‰เดณเตเดณ เด’เดฐเต เดฎเต‚เดฒเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเต‚เดšเดฟเด• เดŽเด™เตเด™เดจเต† เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดพเดฃเต "เดฑเต‚เดŸเตเดŸเต เดธเต‚เดšเดฟเด•" + "เด•เต€ 8 เด‰เดณเตเดณ เดจเต‹เดกเดฟเดจเตเดฑเต† เด‡เดŸเดคเต เดธเดฌเตเดŸเตเดฐเต€เดฏเตเดŸเต† เดญเดพเดฐเด‚" + "1" == 3 + 2 + 1 == 6
เด•เต€ 6 เด‰เดณเตเดณ เดฎเต‚เดฒเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเต‚เดšเดฟเด• "เดฑเต‚เดŸเตเดŸเต เดธเต‚เดšเดฟเด•" + 1 == 3 + 1 == เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ 4

เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เดธเต‚เดšเดฟเด• เดชเตเดฐเด•เดพเดฐเด‚ เด’เดฐเต เด˜เดŸเด•เด‚ เดฒเดญเดฟเด•เตเด•เดพเดจเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดพเดจเตเด‚ เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเด‚ O (เดฒเต‹เด—เต n), เด•เดพเดฐเดฃเด‚ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดฎเต‚เดฒเด•เด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฎเตเดฎเตพ เด†เดฆเตเดฏเด‚ เด…เดคเต เด•เดฃเตเดŸเต†เดคเตเดคเดฃเด‚ (เดฑเต‚เดŸเตเดŸเดฟเตฝ เดจเดฟเดจเตเดจเต เดˆ เดฎเต‚เดฒเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด‡เดฑเด™เตเด™เตเด•).

เด†เดดเด‚

เดญเดพเดฐเดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด†เดดเดตเตเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเด‚. เดฌเดพเดฒเตปเดธเดฟเด‚เด—เดฟเดจเต เด…เดคเตเดฏเดพเดตเดถเตเดฏเดฎเดพเดฃเต.
เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเดฒเดตเดฟเดฒเต† เดจเต‹เดกเดฟเดจเตเดฑเต† เดญเดพเดฐเด‚, เดคเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดญเดพเดฐเดคเตเดคเต‡เด•เตเด•เดพเตพ เดตเดฒเตเดคเต‹ เดคเตเดฒเตเดฏเดฎเต‹ เด†เดฏ 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));
}

เดซเดฒเด™เตเด™เตพ

  • เด’เดฐเต เดชเตเดคเดฟเดฏ เดฎเต‚เดฒเด•เดคเตเดคเดฟเดจเตเดฑเต† เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตฝ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต O (เดฒเต‹เด—เต n)
  • เดธเต€เดฐเดฟเดฏเตฝ เดจเดฎเตเดชเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เด˜เดŸเด•เด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต O (เดฒเต‹เด—เต n)
  • เดธเต€เดฐเดฟเดฏเตฝ เดจเดฎเตเดชเตผ เดชเตเดฐเด•เดพเดฐเด‚ เด’เดฐเต เด˜เดŸเด•เด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดตเดฟเดŸเต† เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต O (เดฒเต‹เด—เต n)

เดตเต‡เด—เดค O (เดฒเต‹เด—เต n) เดŽเดฒเตเดฒเดพ เดกเดพเดฑเตเดฑเดฏเตเด‚ เด…เดŸเตเด•เตเด•เดฟเดฏ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเดธเตเดคเตเดคเดฏเตเด•เตเด•เดพเดฏเดฟ เดžเด™เตเด™เตพ เดชเดฃเด‚ เดจเตฝเด•เตเดจเตเดจเต.

เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด˜เดŸเดจ เดŽเดตเดฟเดŸเต† เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเดฎเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เดฑเดฟเดฏเดฟเดฒเตเดฒ. เดฎเดฐเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด’เดฐเดฟเด•เตเด•เตฝ เด•เต‚เดŸเดฟ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเดจเตเดณเตเดณ เด’เดฐเต เดชเดธเดฟเตฝ เดฎเดพเดคเตเดฐเด‚. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเตเด•เตเด•เต เดจเดจเตเดฆเดฟ.

เดฑเต†เดซเดฑเตปเดธเตเด•เตพ

เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเต‡เด—เดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดŸเต†เดธเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฎเดฐเด‚ เดจเดฟเดฑเดฏเตเดจเตเดจเต 1000000 เด˜เดŸเด•เด™เตเด™เตพ. เด•เต‚เดŸเดพเดคเต† เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด‚ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเตเด‚ เด‰เดฃเตเดŸเต 1000000 เด’เดฐเดฟเด•เตเด•เดฒเต. เด…เดคเดพเดฃเต 3000000 เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ. เดซเดฒเด‚ เดตเดณเดฐเต† เดฎเดฟเด•เดšเตเดšเดคเดพเดฏเดฟ เดฎเดพเดฑเดฟ ~ 8 เดธเต†เด•เตเด•เตปเดกเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•