ื™ื ื“ืขืงืกื˜ ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื

ื™ื ื“ืขืงืกื˜ ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื

ืื™ืš ื’ืขืงื•ืžืขืŸ ืึทืจื™ื‘ืขืจ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื™ืคึผ ืคื•ืŸ ืคึผืจืึธื‘ืœืขื. ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึท ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืงืึทื ื˜ื™ื™ื ืขืจ ื•ื•ืึธืก ื’ื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™:

  • ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ื ื™ื™ึท ืขืœืขืžืขื ื˜
  • ืึทืจืึธืคึผื ืขืžืขืŸ ืขืœืขืžืขื ื˜ ื“ื•ืจืš ืกื™ืจื™ืึทืœ ื ื•ืžืขืจ
  • ื‘ืึทืงื•ืžืขืŸ ืขืœืขืžืขื ื˜ ื“ื•ืจืš ืึธืจื“ืึทื ืึทืœ ื ื•ืžืขืจ
  • ื“ืึทื˜ืข ืื™ื– ืกื˜ืึธืจื“ ืื™ืŸ ืกืึธืจื˜ื™ืจื˜ ืคืึธืจืขื

ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืงืขืกื™ื™ื“ืขืจ ืžื•ืกื™ืฃ ืื•ืŸ ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ, ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืžื•ื–ืŸ ืขื ืฉื•ืจ ืฉื ืขืœ ืึธืคึผืขืจืึทืฆื™ืข ื’ื™ื›ืงื™ื™ึทื˜. ืื™ืŸ ืขืจืฉื˜ืขืจ ืื™ืš ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึทื–ืึท ืึท ื–ืึทืš ื ื™ืฆืŸ ื ืึธืจืžืึทืœ ืงืึทื ื˜ื™ื™ื ืขืจื– ืคื•ืŸ ืกื˜ื“. ื“ืขืจ ื•ื•ืขื’ ืื™ื– ื ื™ืฉื˜ ื’ืขืงืจื•ื™ื ื˜ ื’ืขื•ื•ืืจืŸ ืžื™ื˜ ื“ืขืจืคืืœื’ ืื•ืŸ ืขืก ืื™ื– ื’ืขืงื•ืžืขืŸ ื“ื™ ืคืืจืฉื˜ืื ื“ ืื– ืื™ืš ื“ืืจืฃ ืืœื™ื™ื ืก ืขืคืขืก ืื™ื™ื ืคื™ืจืŸ. ื“ืขืจ ื‘ืœื•ื™ื– ื–ืึทืš ื•ื•ืึธืก ืื™ื– ื’ืขืงื•ืžืขืŸ ืฆื• ืžื™ื™ื ื•ื ื’ ืื™ื– ืฆื• ื ื•ืฆืŸ ืึท ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื‘ื•ื™ื. ื•ื•ื™ื™ึทืœ ืขืก ืžื™ืฅ ื“ื™ ืคืึธื“ืขืจื•ื ื’ ืคื•ืŸ ืฉื ืขืœ ื™ื ืกืขืจืฉืึทืŸ, ื“ื™ืœื™ืฉืึทืŸ ืื•ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืคื•ืŸ ื“ืึทื˜ืŸ ืื™ืŸ ืื•ื™ืกื’ืขืฉื˜ืขืœื˜ ืคืึธืจืขื. ืึทืœืข ื•ื•ืึธืก ื‘ืœื™ื™ื‘ื˜ ืื™ื– ืฆื• ืจืขื›ืขื ืขืŸ ืื•ื™ืก ื•ื•ื™ ืฆื• ืื™ื ื“ืขืงืก ืึทืœืข ื“ื™ ืขืœืขืžืขื ื˜ืŸ ืื•ืŸ ืจืขืงืึทืœืงื•ืœื™ืจืŸ ื“ื™ ื™ื ื“ื™ืกืขืก ื•ื•ืขืŸ ื“ืขืจ ื‘ื•ื™ื ืขื ื“ืขืจื•ื ื’ืขืŸ.

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) ืฆื™ื™ื˜ ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ื™ื ื“ืขืงืกื™ื– ืคื•ืŸ ืึทืœืข ื ืึธื•ื“ื– ื ืึธืš ื™ืขื“ืขืจ ืขื ื“ืขืจื•ื ื’ ืื™ืŸ ื“ืขื ื‘ื•ื™ื.
ื–ืืœ ืก ืžืึทืš ืื•ื™ืฃ ืฆื• ืึท ื•ื•ื™ื–ืฉืึทื•ื•ืึทืœ ืคืึทืจื˜ืจืขื˜ื•ื ื’. ืื•ื ื“ื–ืขืจ ื‘ื•ื™ื ืื™ื– ืœื™ื™ื“ื™ืง, ืœืึธืžื™ืจ ืœื™ื™ื’ืŸ ื“ื™ 1 ื ืึธื“ืข ืฆื• ืื™ื:

ื™ื ื“ืขืงืกื˜ ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื

ื“ืขืจ ืขืจืฉื˜ืขืจ ื ืึธื“ืข ื”ืื˜ ืึทืŸ ืื™ื ื“ืขืงืก 0, ืื•ืŸ ืื™ืฆื˜ 2 ืงืึทืกืขืก ื–ืขื ืขืŸ ืžืขื’ืœืขืš. ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ, ื“ืขืจ ืื™ื ื“ืขืงืก ืคื•ืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ืขืœืขืžืขื ื˜ ื•ื•ืขื˜ ื˜ื•ื™ืฉืŸ, ืื™ืŸ ื“ื™ ืจื’ืข ืขืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื˜ื•ื™ืฉืŸ.

ื™ื ื“ืขืงืกื˜ ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื

ืื™ืŸ ื“ืขืจ ื•ื•ืึธืจืฆืœ, ื“ื™ ืœื™ื ืงืก ืกื•ื‘ื˜ืจื™ืข ื•ื•ื™ื™ื– 1.

ืจื’ืข ืคืึทืœ:

ื™ื ื“ืขืงืกื˜ ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื

ื“ืขืจ ืื™ื ื“ืขืงืก ืคื•ืŸ ื“ืขืจ ื•ื•ืึธืจืฆืœ ื”ืื˜ ื ื™ืฉื˜ ื˜ื•ื™ืฉืŸ ื•ื•ื™ื™ึทืœ ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ื–ื™ื™ึทืŸ ืœื™ื ืงืก ืกื•ื‘ื˜ืจื™ืข ืื™ื– ื’ืขื‘ืœื™ื‘ืŸ 0.

ื“ืขืจ ืื™ื ื“ืขืงืก ืคื•ืŸ ืึท ื ืึธื“ืข ืื™ื– ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“ ื•ื•ื™ ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ื–ื™ื™ืŸ ืœื™ื ืงืก ืกื•ื‘ื˜ืจื™ืข + ื“ื™ ื ื•ืžืขืจ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืคื•ืŸ ื“ื™ ืคืึธื˜ืขืจ. ื•ื•ืึธืก ืื™ื– ื“ืขื ื ื•ืžืขืจ?, ื“ืึธืก ืื™ื– ื“ืขืจ ืื™ื ื“ืขืงืก ื˜ืึธืžื‘ืึทื ืง, ื˜ื›ื™ืœืขืก ืขืก ืื™ื– ื’ืœื™ื™ึทืš ืฆื• 0, ื•ื•ื™ื™ึทืœ ื“ืขืจ ื•ื•ืึธืจืฆืœ ื”ืื˜ ืงื™ื™ืŸ ืคืึธื˜ืขืจ. ื“ืขืจื ืึธืš ืขืก ืึทืœืข ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื•ื•ื• ืžื™ืจ ื’ื™ื™ืŸ ืึทืจืึธืคึผ ืฆื• ื“ื™ ืœื™ื ืงืก ืงื™ื ื“ ืึธื“ืขืจ ื“ื™ ืจืขื›ื˜ ืื™ื™ื ืขืจ. ืื•ื™ื‘ ืฆื• ื“ื™ ืœื™ื ืงืก, ื“ืขืžืึธืœื˜ ื’ืึธืจื ื™ืฉื˜ ืื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ ื˜ืึธืžื‘ืึทื ืง. ืื•ื™ื‘ ืžื™ืจ ืœื™ื™ื’ืŸ ื“ืขื ืื™ื ื“ืขืงืก ืคื•ืŸ ื“ื™ ืงืจืึทื ื˜ ื ืึธื“ืข ืฆื• ื“ื™ ืจืขื›ื˜ ืื™ื™ื ืขืจ.

ื™ื ื“ืขืงืกื˜ ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื•ื•ื™ ื“ืขืจ ืื™ื ื“ืขืงืก ืคื•ืŸ ืึทืŸ ืขืœืขืžืขื ื˜ ืžื™ื˜ ืฉืœื™ืกืœ 8 (ื“ื™ ืจืขื›ื˜ ืงื™ื ื“ ืคื•ืŸ ื“ืขืจ ื•ื•ืึธืจืฆืœ) ืื™ื– ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“. ื“ืึธืก ืื™ื– "ื•ื•ืึธืจืฆืœ ืื™ื ื“ืขืงืก" + "ื•ื•ืึธื’ ืคื•ืŸ ืœื™ื ืงืก ืกื•ื‘ื˜ืจื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื ืึธื“ืข ืžื™ื˜ ืฉืœื™ืกืœ 8" + "1" == 3 + 2 + 1 == 6
ื“ืขืจ ืื™ื ื“ืขืงืก ืคื•ืŸ ื“ืขื ืขืœืขืžืขื ื˜ ืžื™ื˜ ืฉืœื™ืกืœ 6 ื•ื•ืขื˜ ื–ื™ื™ืŸ "ื•ื•ืึธืจืฆืœ ืื™ื ื“ืขืงืก" + 1 == 3 + 1 == 4

ืึทืงืงืึธืจื“ื™ื ื’ืœื™, ืขืก ื ืขืžื˜ ืฆื™ื™ื˜ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื•ืŸ ื•ื™ืกืžืขืงืŸ ืึทืŸ ืขืœืขืžืขื ื˜ ื“ื•ืจืš ืื™ื ื“ืขืงืก ืึธ (ืงืœืึธืฅ N), ื•ื•ื™ื™ึทืœ ืื™ืŸ ืกื“ืจ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ื’ืขื‘ืขื˜ืŸ ืขืœืขืžืขื ื˜ ืžื™ืจ ืžื•ื–ืŸ ืขืจืฉื˜ืขืจ ื’ืขืคึฟื™ื ืขืŸ ืขืก (ื’ื™ื™ืŸ ืึทืจืึธืคึผ ืคื•ืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ืฆื• ื“ืขื ืขืœืขืžืขื ื˜).

Depth

ื‘ืึทื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ื•ื•ืึธื’, ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ืจืขื›ืขื ืขืŸ ื“ื™ ื˜ื™ืคืงื™ื™ึทื˜ ืคื•ืŸ ื“ืขื ื‘ื•ื™ื. ื ื™ื™ื˜ื™ืง ืคึฟืึทืจ ื‘ืึทืœืึทื ืกื™ื ื’.
ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ื“ื™ ืงืจืึทื ื˜ ื ืึธื“ืข ืžื•ื–ืŸ ื–ื™ื™ืŸ ืจืึทื•ื ื“ื™ื“ ืฆื• ื“ืขืจ ืขืจืฉื˜ืขืจ ื ื•ืžืขืจ ืฆื• ื“ื™ ืžืึทื›ื˜ ืคื•ืŸ 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));
}

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

  • ื™ื ืกืขืจืฉืึทืŸ ืคื•ืŸ ืึท ื ื™ื™ึท ืขืœืขืžืขื ื˜ ืึทืงืขืจื– ืื™ืŸ ืึธ (ืงืœืึธืฅ N)
  • ื“ื™ืœื™ื˜ื™ื ื’ ืึทืŸ ืขืœืขืžืขื ื˜ ื“ื•ืจืš ืกื™ืจื™ืึทืœ ื ื•ืžืขืจ ืึทืงืขืจื– ืื™ืŸ ืึธ (ืงืœืึธืฅ N)
  • ื‘ืึทืงื•ืžืขืŸ ืึทืŸ ืขืœืขืžืขื ื˜ ื“ื•ืจืš ืกื™ืจื™ืึทืœ ื ื•ืžืขืจ ืึทืงืขืจื– ืื™ืŸ ืึธ (ืงืœืึธืฅ N)

ืกืคึผื™ื“ ืึธ (ืงืœืึธืฅ N) ืžื™ืจ ื‘ืึทืฆืึธืœืŸ ืคึฟืึทืจ ื“ื™ ืคืึทืงื˜ ืึทื– ืึทืœืข ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ืŸ ืึท ืกืึธืจื˜ื™ืจื˜ ืคืึธืจืขื.

ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ ื•ื•ื• ืึทื–ืึท ืึท ืกื˜ืจื•ืงื˜ื•ืจ ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง. ื ืึธืจ ืึท ืจืขื˜ืขื ื™ืฉ ืฆื• ื•ื•ื™ื“ืขืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื™ ื‘ื™ื™ืžืขืจ ืึทืจื‘ืขื˜. ื“ืื ืง ืื™ืจ ืคึฟืึทืจ ื“ื™ื™ืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜.

ืจืขืคึฟืขืจืขื ืฆืŸ

ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื›ึผื•ืœืœ ืคึผืจืึธื‘ืข ื“ืึทื˜ืŸ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ืึธืคึผืขืจืึทืฆื™ืข. ื“ืขืจ ื‘ื•ื™ื ืื™ื– ืึธื ื’ืขืคื™ืœื˜ ื–ื™ืš 1000000 ืขืœืขืžืขื ื˜ืŸ. ืื•ืŸ ืขืก ืื™ื– ืึท ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœ ื“ื™ืœื™ืฉืึทืŸ, ื™ื ืกืขืจืฉืึทืŸ ืื•ืŸ ืจื™ื˜ืจื™ื•ื•ืึทืœ ืคื•ืŸ ืขืœืขืžืขื ื˜ืŸ 1000000 ืึทืžืึธืœ. ื“ืืก ืื™ื– 3000000 ืึทืคึผืขืจื™ื™ืฉืึทื ื–. ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืึทื ืฅ ื’ื•ื˜ ~ 8 ืกืขืงื•ื ื“ืขืก.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’