เจ‡เฉฐเจกเฉˆเจ•เจธเจก เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€

เจ‡เฉฐเจกเฉˆเจ•เจธเจก เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€

เจฎเฉˆเจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ†เจ‡เจ†. เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ เจœเฉ‹ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ:

  • เจจเจตเจพเจ‚ เจคเฉฑเจค เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹
  • เจธเฉ€เจฐเฉ€เจ…เจฒ เจจเฉฐเจฌเจฐ เจฆเฉเจ†เจฐเจพ เจคเฉฑเจค เจนเจŸเจพเจ“
  • เจ†เจฐเจกเฉ€เจจเจฒ เจจเฉฐเจฌเจฐ เจฆเฉเจ†เจฐเจพ เจคเฉฑเจค เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹
  • เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ•เฉเจฐเจฎเจฌเฉฑเจง เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ

เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฒเจ—เจพเจคเจพเจฐ เจœเฉ‹เฉœเจฟเจ† เจ…เจคเฉ‡ เจนเจŸเจพเจ‡เจ† เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ, เจฌเจฃเจคเจฐ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจธเฉฐเจšเจพเจฒเจจ เจฆเฉ€ เจ—เจคเฉ€ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ. เจชเจนเจฟเจฒเจพเจ‚ เจฎเฉˆเจ‚ เจธเจŸเฉˆเจ‚เจกเจฐเจก เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ…เจœเจฟเจนเฉ€ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€ เจเฉฑเจธ. เจ‡เจน เจฎเจพเจฐเจ— เจธเจซเจฒเจคเจพ เจจเจพเจฒ เจคเจพเจœ เจจเจนเฉ€เจ‚ เจธเฉ€ เจ…เจคเฉ‡ เจธเจฎเจ เจ†เจˆ เจ•เจฟ เจฎเฉˆเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ•เฉเจ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ. เจ‡เจ•เฉ‹ เจ—เฉฑเจฒ เจœเฉ‹ เจฎเจจ เจตเจฟเจš เจ†เจˆ เจ‰เจน เจธเฉ€ เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจฆเฉ‡ เจฐเฉเฉฑเจ– เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ. เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจ•เฉเจฐเจฎเจฌเฉฑเจง เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจคเฉ‡เจœเจผ เจธเฉฐเจฎเจฟเจฒเจจ, เจฎเจฟเจŸเจพเจ‰เจฃ เจ…เจคเฉ‡ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจญ เจ•เฉเจ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจฐเฉ‡ เจคเฉฑเจคเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจœเจฆเฉ‹เจ‚ เจฐเฉเฉฑเจ– เจฌเจฆเจฒเจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจฎเฉเฉœ เจ—เจฃเจจเจพ เจ•เจฐเจจเฉ€ เจนเฉˆเฅค

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. เจœเฉ‡เจ•เจฐ เจ…เจœเจฟเจนเฉ€ เจ•เฉเฉฐเจœเฉ€ เจตเจพเจฒเจพ เจจเฉ‹เจก เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ เจ“เจตเจฐเจฐเจพเจˆเจŸ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจฐเฉ‚เจŸ 'เจคเฉ‡ เจตเจพเจชเจธ เจœเจพเจตเจพเจ‚เจ—เฉ‡, เจธเจพเจฐเฉ‡ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจตเจœเจผเจจเจพเจ‚ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฐเฉฑเจฆ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจชเจพเจธ เจ•เฉ€เจคเฉ‡ เจนเจจเฅค
เจœเฉ‡ เจ‡เฉฑเจ• เจจเฉ‹เจก เจจเฉ‚เฉฐ เจนเจŸเจพเจ‡เจ† เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจœเจพเจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจชเจพเจธ เจ•เฉ€เจคเฉ‡ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจญเจพเจฐ เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚.

เจธเฉ‚เจšเฉ€-เจชเฉฑเจคเจฐ

เจนเฉเจฃ เจจเฉ‹เจกเจธ เจจเฉ‚เฉฐ เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจตเฉฑเจฒ เจตเจงเจฆเฉ‡ เจนเจพเจ‚เฅค เจจเฉ‹เจก เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจ‡เจน เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจญเจพเจฐ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ—เจฟเจฃเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ. เจœเฉ‡ เจ‰เจน เจ†เจชเจฃเจพ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€ เจนเฉ‡ (n) เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจคเจฌเจฆเฉ€เจฒเฉ€ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจธเจพเจฐเฉ‡ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฆเจพ เจธเจฎเจพเจ‚เฅค
เจ†เจ“ เจ‡เฉฑเจ• เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจตเฉฑเจฒ เจตเจงเฉ€เจเฅค เจธเจพเจกเจพ เจฐเฉเฉฑเจ– เจ–เจพเจฒเฉ€ เจนเฉˆ, เจ†เจ“ เจ‡เจธ เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพ เจจเฉ‹เจก เจœเฉ‹เฉœเฉ€เจ:

เจ‡เฉฐเจกเฉˆเจ•เจธเจก เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€

เจชเจนเจฟเจฒเฉ‡ เจจเฉ‹เจก เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจนเฉเฉฐเจฆเจพ เจนเฉˆ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹