make calc_dip faster
This commit is contained in:
@@ -27,16 +27,14 @@ def find_parent(a: Node, b: Node) -> Node:
|
|||||||
|
|
||||||
|
|
||||||
def calc_dip(mask_len_a: int, mask_len_b: int, mask_len_p: int) -> int:
|
def calc_dip(mask_len_a: int, mask_len_b: int, mask_len_p: int) -> int:
|
||||||
mask_len = mask_len_p + 1
|
def dip(mla, mlp):
|
||||||
dip_a = 0
|
m = mlp + 1
|
||||||
while mask_len_a > mask_len:
|
res = 1 << (mla - m)
|
||||||
dip_a += 2 ** (32 - mask_len_a)
|
res -= 1
|
||||||
mask_len_a -= 1
|
res <<= 32 - mla
|
||||||
dip_b = 0
|
return res
|
||||||
while mask_len_b > mask_len:
|
|
||||||
dip_b += 2 ** (32 - mask_len_b)
|
return dip(mask_len_a, mask_len_p) + dip(mask_len_b, mask_len_p)
|
||||||
mask_len_b -= 1
|
|
||||||
return dip_a + dip_b
|
|
||||||
|
|
||||||
|
|
||||||
def merge_two_nodes(node_a: Node, node_b: Node) -> tuple[Node, int]:
|
def merge_two_nodes(node_a: Node, node_b: Node) -> tuple[Node, int]:
|
||||||
|
|||||||
Reference in New Issue
Block a user