Beispiel #1
0
def test_merge():
    l = [4, 7, 2, 8, 4, 6, 9, 5, 5, 7, 3, 2, 8]
    l_sorted = sorted(l)
    l_left = LinkedList.from_list(sorted(l[:5]))
    l_right = LinkedList.from_list(sorted(l[5:]))
    ll = LinkedList.merge(l_left, l_right)
    assert len(ll) == len(l)
    for i, j in zip(ll, l_sorted):
        assert i == j
 def rev_prune_order(self) -> LinkedList["BinaryDecisionTree"]:
     """Iterate over nodes from leaves inwards with each step minimizing
     the collapse loss"""
     assert not self.terminal, "Can't prune a terminal tree"
     if not self.left.terminal:
         left_order = self.left.rev_prune_order()
     else:
         left_order = Nil
     if not self.right.terminal:
         right_order = self.right.rev_prune_order()
     else:
         right_order = Nil
     return LinkedList(
         self,
         LinkedList.merge(left_order,
                          right_order,
                          key=lambda x: -x.loss_delta_if_collapsed),
     )