From b7801ac86ad401a2a9897bf3a91ade1b54d8b843 Mon Sep 17 00:00:00 2001 From: Mamadu Lamarana BAH <mamadulamarana.bah.etu@univ-lille.fr> Date: Thu, 1 Feb 2024 11:27:13 +0100 Subject: [PATCH] test de searcch et debut de insertion --- src/BTree.py | 25 ++++++++++++------- src/node.py | 68 ++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 63 insertions(+), 30 deletions(-) diff --git a/src/BTree.py b/src/BTree.py index c94680f..5a696d9 100644 --- a/src/BTree.py +++ b/src/BTree.py @@ -9,6 +9,15 @@ class Btree() : self.k = k def search(self, value): + """ + Exemple(s): + >>> Btree(2, Node([5,25])).search(25) + (Node([5, 25]), 1) + >>> Btree(2, Node([12, 42], [Node([1]), Node([25]), Node([50])])).search(1) + (Node([1]), 0) + True + >>> Btree(2, Node([12, 42], [Node([1]), Node([25]), Node([50])])).search(2) + """ return self.root.search(value) # incomplet @@ -29,15 +38,13 @@ class Btree() : # self.root.insert_not_full(value) # - def insertion(self,value): - """ - >>> Node([5,25]).insertion(10) - Node([5,10,25]) - >>> Node([]).insertion(1) - Node([1]) - >>> Node([5,25]).insertion(50) - Node([5,25,50]) - """ + #def insertion(self,value): +# >>> Node([5,25]).insertion(10) +# Node([5,10,25]) +# >>> Node([]).insertion(1) +# Node([1]) +# >>> Node([5,25]).insertion(50) +# Node([5,25,50]) diff --git a/src/node.py b/src/node.py index 2f8b841..e928075 100644 --- a/src/node.py +++ b/src/node.py @@ -21,10 +21,15 @@ class Node() : def search(self, value): """ - >>> Node([5, 25]).search(5) - (Node([5, 25]),0) - >>> Node([5,25],[Node[1],Node[18],Node[100]]).search(18) - (Node[18],0) + Exemple(s): + >>> Node([5,25]).search(5) + (Node([5, 25]), 0) + >>> Node([12, 42]).search(12) + (Node([12, 42]), 0) + >>> Node([12, 42]).search(1) + >>> Node([12, 42], [Node([1]), Node([25]), Node([50])]).search(1) + (Node([1]), 0) + >>> Node([12, 42], [Node([1]), Node([25]), Node([50])]).search(2) """ (found, index) = recherche_dichotomique(value, self.keys) if (found): @@ -32,7 +37,7 @@ class Node() : elif ( self.isLeaf() ): return None else : - self.childs[index].search(value) + return self.childs[index].search(value) def insert(self, value, k): """ @@ -41,20 +46,32 @@ class Node() : >>> Node([5,15]).insert(20, 4) Node([5,15,20]) """ - (found, index) = self.search(value) - if (self.isLeaf()) : - if (not found): + (node, index) = self.search(value) + if (node == None) : + if (self.isLeaf()): self.keys.insert(index, value) - else : - (fini, milieu, g, d) = self.childs[index].insert(value, k) - if not fini: - return None - #TODO - if (len(self.keys) > k) : - (m, g, d) = self.splitNode() - f = False - else: - return None + else: + (fini, milieu, g, d) = self.childs[index].insert(value, k) + if (not fini) : + self.keys.insert(index, milieu) + self.childs[index] = g + self.childs.insert(index+1, d) + + + + + + +# else : +# (fini, milieu, g, d) = self.childs[index].insert(value, k) +# if not fini: +# return None +# #TODO +# if (len(self.keys) > k) : +# (m, g, d) = self.splitNode() +# f = False +# else: +# return None #TODO @@ -66,14 +83,23 @@ class Node() : def splitNode(self) : """ >>> Node([10,20,25]).splitNode() - (20, Node([10]), Node([25]) + (20, Node([10]), Node([25])) + >>> Node([12, 20, 22, 40]).splitNode() + (22, Node([12, 20]), Node([40])) + >>> Node([3, 5]).splitNode() + (5, Node([3]), Node([])) """ milieu = len(self.keys) //2 parent = self.keys[milieu] g = Node(self.keys[:milieu], self.childs[:milieu+1]) d = Node(self.keys[milieu+1:], self.childs[milieu+1:]) - return (milieu,g,d) + return (parent, g, d) + + + + def __repr__(self) : + return f"Node({self.keys})" @@ -102,4 +128,4 @@ class Node() : if __name__ == '__main__': import doctest - doctest.testmod(verbose=True) \ No newline at end of file + doctest.testmod(verbose=False) \ No newline at end of file -- GitLab