āĻāĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻā§āĻĄāĻŧā§ āĻāĻ¸ā§āĻāĻŋ. āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āĻ¸ā§āĻā§āĻ°ā§āĻ āĻ§āĻžāĻ°āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨:
- āĻ¨āĻ¤ā§āĻ¨ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§āĻļ āĻāĻ°āĻžāĻ¨
- āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ°āĻžāĻ¨
- āĻā§āĻ°āĻŽāĻŋāĻ āĻ¸āĻāĻā§āĻ¯āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻĒāĻžāĻ¨
- āĻ¤āĻĨā§āĻ¯ āĻ¸āĻžāĻāĻžāĻ¨ā§ āĻāĻāĻžāĻ°ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
āĻĄā§āĻāĻž āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻ¯ā§āĻ āĻāĻ°āĻž āĻāĻŦāĻ āĻ āĻĒāĻ¸āĻžāĻ°āĻŖ āĻāĻ°āĻž āĻšāĻā§āĻā§, āĻāĻ āĻ¨ āĻĻā§āĻ°ā§āĻ¤ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻāĻ¤āĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻž āĻāĻŦāĻļā§āĻ¯āĻ. āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻ¤ā§āĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻāĻŋ āĻāĻ¸āĻāĻŋāĻĄāĻŋ. āĻāĻ āĻĒāĻĨāĻāĻŋ āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻā§āĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻāĻŦāĻ āĻŦā§āĻāĻž āĻā§āĻ˛ āĻ¯ā§ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻāĻŋāĻā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻž āĻĻāĻ°āĻāĻžāĻ°āĨ¤ āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻāĻŋāĻ¨āĻŋāĻ¸ āĻ¯āĻž āĻŽāĻ¨ā§ āĻāĻ¸ā§āĻāĻŋāĻ˛ āĻ¤āĻž āĻšāĻ˛ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĨ¤ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻ¸āĻžāĻāĻžāĻ¨ā§ āĻāĻāĻžāĻ°ā§ āĻĄā§āĻāĻž āĻĻā§āĻ°ā§āĻ¤ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§āĻļ, āĻŽā§āĻā§ āĻĢā§āĻ˛āĻž āĻāĻŦāĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĒā§āĻ°āĻŖ āĻāĻ°ā§āĨ¤ āĻ¯āĻž āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻĨāĻžāĻā§ āĻ¤āĻž āĻšāĻ˛ āĻāĻŋāĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻā§āĻāĻ°āĻŖ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻžāĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ˛ā§ āĻ¸ā§āĻāĻāĻā§āĻ˛āĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
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