def func(li): li.sort(key=lambda x: x[1]) tree = RedBlackTree() for a, h, b in li: prev_b = tree.floor(My_pair(b, None)) if prev_b is None: height_b = 0 else: height_b = prev_b.value next_a = tree.ceil(My_pair(a, None)) while (next_a is not None) and next_a.key <= b: tree.remove(next_a) next_a = tree.ceil(My_pair(a, None)) tree.add(My_pair(a, h)) tree.add(My_pair(b, height_b)) prev_height = 0 ans = [] for element in tree: if element.value != prev_height: prev_height = element.value ans.append((element.key, element.value)) return ans
def true_address_no_sort(lcp: list, au: RedBlackTree, s_arr: deque, top=100, bot=20, distance=300): # dict to be returned d = OrderedDict() assert type(au) == RedBlackTree if type(lcp) != deque: lcp = deque(lcp) if type(s_arr) != deque: s_arr = deque(s_arr) assert len(lcp) == len(s_arr) d = {} past = 0 runs = len(lcp) for _ in trange(runs,desc="calculating unique starts: "): l = lcp.popleft() lcp.append(past if past > l else l) past = l runs = len(s_arr) pbar = tqdm(total=runs, desc="Finding true addresses: ") u_ceil = 0 u_floor = 0 myl = [] while s_arr: sa = s_arr.popleft() pbar.update(1) # get next suffix address and corresponding lcp (unique start) value lcp_curr = lcp.popleft() if type(sa) != int and type(lcp) != int: sa = int(sa) lcp_curr = int(lcp_curr) if sa > u_ceil or sa < u_floor: # myl = list from RedBlackTree # [unam ambs] myl = au.floor([sa]) u_floor = 0 if not myl else myl[0] myl = au.ceil([sa]) if not myl: continue u_ceil = myl[0] if (lcp_curr + sa) > u_ceil: continue else: difference = u_ceil - sa # do we need to add 1 here? # todo: is the u_floor going too low? d[sa + myl[1]] = (lcp_curr, (difference if difference < top else top)) return d
def func(li): tree = RedBlackTree() depths = [] for num in li: next_node = tree.ceil(My_pair(num, None)) prev_node = tree.floor(My_pair(num, None)) parent_depth = -1 for node in (next_node, prev_node): if node != None: parent_depth = max(parent_depth, node.value) tree.add(My_pair(num, parent_depth + 1)) depths.append(parent_depth + 1) return depths