diff --git a/src/Node.py b/src/Node.py index 6c5fe0a2d9035a7f9a94356d9b064a892d8f0172..3a21cab97534a6a46f4340450a800d97b54e7928 100644 --- a/src/Node.py +++ b/src/Node.py @@ -135,22 +135,11 @@ class Node() : def suppression(self, value, k, is_root=False) : """ Exemple(s): - >>> node = Node([12, 42], [Node([3, 4]), Node([25, 26]), Node([50, 58])]) - >>> node.suppression(50, 2) - True - >>> node.search(50) - >>> node.suppression(26, 2) - True - >>> node.search(26) - >>> node.suppression(25, 2) - True - >>> node.search(25) - >>> node.suppression(12, 2) - True - >>> node.suppression(3, 2) + >>> node = Node([42], [Node([14]), Node([50])]) + >>> node.suppression(14, 2) True >>> node - Node([42], [Node([4]), Node([58])]) + Node([12, 42], [Node([3, 4]), Node([25, 26]), Node([58])]) """ (found, index) = recherche_dichotomique(value, self.keys) if (self.isLeaf()) : @@ -159,31 +148,37 @@ class Node() : else: (ok) = self.childs[index].suppression(value, k, False) if (not ok): + # left sibling lookup if(index - 1 >= 0 and (len(self.childs[index-1].keys) - 1 >= k//2)): borrowed = self.childs[index-1].keys.pop() - replaced = self.keys.pop(0) - self.keys.insert(0, borrowed) - self.childs[index].keys.insert(0, replaced) + replaced = self.keys.pop(index-1) + self.keys.insert(index-1, borrowed) + self.childs[index].keys.insert(index-1, replaced) # + # right sibling lookup elif(index + 1 < len(self.childs) and (len(self.childs[index+1].keys) - 1 >= k//2)): - borrowed = self.childs[index+1].keys.pop() + borrowed = self.childs[index+1].keys.pop(index-1) replaced = self.keys.pop() - self.childs[index].keys.insert(len(self.keys), borrowed) + self.keys.insert(len(self.keys), borrowed) self.childs[index].keys.insert(len(self.childs[index].keys), replaced) # len(self.childs) + # when deletion of the key violates the property of the minimum number of keys + # merge else: + # right sibling lookup if(index-1 >= 0): replaced = self.keys.pop(index-1) borrowed = self.childs[index-1].keys.pop() self.childs[index].keys.insert(len(self.childs[index].keys), replaced) - self.childs[index].keys.insert(0, borrowed) + self.childs[index].keys.insert(index-1, borrowed) del self.childs[index-1] + # left sibling lookup elif(index + 1 < len(self.childs)): + print("icic") replaced = self.keys.pop(index) borrowed = self.childs[index+1].keys.pop() - self.childs[index].keys.insert(0, borrowed) - self.childs[index].keys.insert(len(self.childs[index].keys), replaced) + self.childs[index].keys.insert(index, replaced) + self.childs[index].keys.insert(len(self.childs[index].keys), borrowed) del self.childs[index+1] ok = not ok - return ok def splitNode(self) :