From 07d033a611118932aa614f0468c2aed7188420eb Mon Sep 17 00:00:00 2001 From: Mamadu Lamarana BAH <mamadulamarana.bah.etu@univ-lille.fr> Date: Thu, 22 Feb 2024 08:37:29 +0100 Subject: [PATCH] linearisation --- src/BTree.py | 38 +++++++++++++----------- src/Node.py | 59 +++++++++++++++++++++++++++++-------- src/NodeTest.py | 7 ----- src/{ => test}/BtreeTest.py | 0 src/test/NodeTest.py | 14 +++++++++ 5 files changed, 80 insertions(+), 38 deletions(-) delete mode 100644 src/NodeTest.py rename src/{ => test}/BtreeTest.py (100%) create mode 100644 src/test/NodeTest.py diff --git a/src/BTree.py b/src/BTree.py index d3b16b7..5be9bda 100644 --- a/src/BTree.py +++ b/src/BTree.py @@ -41,26 +41,28 @@ class Btree() : new_root = Node([milieu], [g, d]) self.root = new_root return True - + + def linearisation(self, node): + """ + Exemple(s): + >>> a = Btree(2) + >>> node = Node([6], [Node([1]), Node([7])]) + >>> a.linearisation(node) + () + """ + if (node): + if (node.isLeaf()): + for i in node.keys: + print(i) + else: + if (len(node.keys) == 1): + self.linearisation(node.childs[0]) + print(node.keys[0]) + self.linearisation(node.childs[1]) + else: + for - - - - - #def search() : - #def insertion(): - #def createNode() : - #def delete() : - #def linear() : - #def createTree() : - #def height() : - #def isArbre() : - #def getNbKeys () : - #def getSize () : - #def changeRoot() : - #def isEqual() : - def __repr__(self) : return f"Btree({self.root})" diff --git a/src/Node.py b/src/Node.py index 3308034..683bab2 100644 --- a/src/Node.py +++ b/src/Node.py @@ -8,12 +8,12 @@ class Node() : self.k = k def isLeaf(self): -# """ -# >>> Node([12, 42]).isLeaf() -# True -# >>> Node([12, 42], [Node([1]), Node([25]), Node([50])]).isLeaf() -# False -# """ + """ + >>> Node([12, 42]).isLeaf() + True + >>> Node([12, 42], [Node([1]), Node([25]), Node([50])]).isLeaf() + False + """ return (len(self.childs) == 0) def getSize(self) : @@ -42,19 +42,33 @@ class Node() : def insert(self, value): """ Exemple(s): - >>> Node([5]).insert(20) + >>> node = Node([5]) + >>> node.insert(20) (True, None, None, None) + >>> node.search(20) + (Node([5, 20]), 1) >>> Node([5,15]).insert(12) (False, 12, Node([5]), Node([15])) - >>> a = Node([12, 42], [Node([3]), Node([25]), Node([50])]) - >>> a.insert(52) + >>> node.search(12) + + >>> node = Node([12, 42], [Node([3]), Node([25]), Node([50])]) + >>> node.insert(52) (True, None, None, None) - >>> a.search(52) + >>> node.search(52) (Node([50, 52]), 1) - >>> Node([12, 42], [Node([2, 3]), Node([25]), Node([50])]).insert(1) + >>> node = Node([12, 42], [Node([2, 3]), Node([25]), Node([50])]) + >>> node.insert(1) (False, 12, Node([2]), Node([42])) - >>> Node([12, 42], [Node([2, 4], [Node([0, 1]), Node([3]), Node([7, 8])]), Node([25]), Node([50])]).insert(6) + >>> node.search(1) + (Node([1]), 0) + >>> node = Node([12, 42], [Node([2, 4], [Node([0, 1]), Node([3]), Node([7, 8])]), Node([25]), Node([50])]) + >>> node.insert(6) (False, 12, Node([4]), Node([42])) + + >>> node = Node([12, 42], [Node([2, 3, 4]), Node([25]), Node([50])], 3) + >>> node.insert(1) + (True, None, None, None) + """ (found, index) = recherche_dichotomique(value, self.keys) if (not found) : @@ -73,6 +87,8 @@ class Node() : if ( len(self.keys) > self.k) : milieu, g, d = self.splitNode() return False, milieu, g, d + else: + return True, None, None, None else : return True, None, None, None else : @@ -106,10 +122,27 @@ class Node() : return (self.keys[milieu], g, d) + def linearisation(self): + """ + Exemple(s): + >>> Node([12, 42], [Node([2, 3]), Node([25]), Node([50])]).linearisation() + [2, 3, 12, 25, 42, 50] + """ + if (self.isLeaf()): + res = self.keys + else: + res = [] + for i in range(0, len(self.keys)): + res.extend(self.childs[i].linearisation()) + res.append(self.keys[i]) + res.extend(self.childs[len(self.childs)-1].linearisation()) + return res + + def __repr__(self) : return f"Node({self.keys})" - + if __name__ == '__main__': import doctest doctest.testmod(verbose=False) \ No newline at end of file diff --git a/src/NodeTest.py b/src/NodeTest.py deleted file mode 100644 index 750aaf1..0000000 --- a/src/NodeTest.py +++ /dev/null @@ -1,7 +0,0 @@ -import unittest - - - - -if __name__ == "__main__": - unittest.main() \ No newline at end of file diff --git a/src/BtreeTest.py b/src/test/BtreeTest.py similarity index 100% rename from src/BtreeTest.py rename to src/test/BtreeTest.py diff --git a/src/test/NodeTest.py b/src/test/NodeTest.py new file mode 100644 index 0000000..2a1afb1 --- /dev/null +++ b/src/test/NodeTest.py @@ -0,0 +1,14 @@ +import unittest + +class NodeTest: + def setUp(self): + self.node = Node([12, 42], ) + + +if __name__ == "__main__": + import sys + sys.path.insert(1, './src') + sys.path.insert(2, '../src') + from Node import * + + unittest.main() \ No newline at end of file -- GitLab