From 7788dae5232ff9d369814ebb57b3a838f88e6412 Mon Sep 17 00:00:00 2001 From: loic scoth <loic.scoth.etu@univ-lille.fr> Date: Thu, 28 Mar 2024 11:24:32 +0100 Subject: [PATCH] fin de seance, ajout experimentation --- README.md | 1 + src/ArbreB/Graph.gv | 3 +++ src/ArbreB/Graph.gv.jpg | Bin 0 -> 2763 bytes src/BTree.py | 39 ++++++++++++++++----------- src/Node.py | 10 ++++--- src/Visualization.py | 6 +++-- src/experimentation.py | 57 +++++++++++++++++++++++++++++++++------- 7 files changed, 86 insertions(+), 30 deletions(-) create mode 100644 src/ArbreB/Graph.gv create mode 100644 src/ArbreB/Graph.gv.jpg diff --git a/README.md b/README.md index 2b34ac9..7d304b3 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Loïc Scoth ## TODO ajout commande execution/tests +Ce qui ne vas pas ## Description du projet diff --git a/src/ArbreB/Graph.gv b/src/ArbreB/Graph.gv new file mode 100644 index 0000000..73753f3 --- /dev/null +++ b/src/ArbreB/Graph.gv @@ -0,0 +1,3 @@ +graph { + "[5, 25]" +} diff --git a/src/ArbreB/Graph.gv.jpg b/src/ArbreB/Graph.gv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d38b922210293ceaf86157a0639b6846bbdffc9 GIT binary patch literal 2763 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 KUK-5*Zvp_Qq#0%a literal 0 HcmV?d00001 diff --git a/src/BTree.py b/src/BTree.py index d10d42e..12f8f79 100644 --- a/src/BTree.py +++ b/src/BTree.py @@ -1,6 +1,6 @@ #import Node as Bnode -from Node import * -from Visualization import * +from Node import Node +#from Visualization import Visualization class Btree() : @@ -23,24 +23,28 @@ class Btree() : def insertion(self, value): """ Exemple(s): - >>> a =Btree(2, Node([12, 42], [Node([2, 3]), Node([25]), Node([50])])) - >>> a.insertion(1) - True - >>> a.search(1) - (Node([1]), 0) - >>> b= Btree(3, Node([12,25,50], [Node([1,11]), Node([20]), Node([100])])) - >>> b.insertion(10) - True - >>> b.search(10) - (Node([1, 10, 11]), 1) - >>> Btree(2, Node([4, 10], [Node([1, 3]), Node([25]), Node([50])])).insertion(4) - True - +# >>> a =Btree(2, Node([12, 42], [Node([2, 3]), Node([25]), Node([50])])) +# >>> a.insertion(1) +# True +# >>> a.search(1) +# (Node([1]), 0) +# >>> b= Btree(3, Node([12,25,50], [Node([1,11]), Node([20]), Node([100])])) +# >>> b.insertion(10) +# True +# >>> b.search(10) +# (Node([1, 10, 11]), 1) +# >>> Btree(2, Node([4, 10], [Node([1, 3]), Node([25]), Node([50])])).insertion(4) +# True + >>> c = Btree(2,Node([1, 10])) + >>> print(c.insertion(15)) + """ + print(self.root) fini, milieu, g, d = self.root.insert(value, self.k) if (not fini): new_root = Node([milieu], [g, d]) self.root = new_root + print(self.root) return True @@ -62,6 +66,11 @@ class Btree() : """ (ok, _, _, _) = self.root.is_ArbreB(self.k, True) return ok + + def equals(self, otherObject): + if not isinstance(otherObject, Btree): + return False + return (self.root.keys == otherObject.root.keys and self.k == otherObject.k) def __repr__(self) : return f"Btree({self.root})" diff --git a/src/Node.py b/src/Node.py index 6c5fe0a..c7e91c2 100644 --- a/src/Node.py +++ b/src/Node.py @@ -1,6 +1,6 @@ from util import recherche_dichotomique -from Visualization import * -from BTree import * +#from Visualization import * +#from BTree import * class Node() : @@ -80,7 +80,10 @@ class Node() : """ Return : (node, index) or Nothing Exemple(s): - >>> node = Node([5]) + + >>> node = Node([]) + >>> node.insert(5,1) + (True, None, None, None) >>> node.insert(20, 2) (True, None, None, None) >>> node.search(20) @@ -107,6 +110,7 @@ class Node() : >>> node.insert(1, 3) (True, None, None, None) + """ (found, index) = recherche_dichotomique(value, self.keys) if (not found) : diff --git a/src/Visualization.py b/src/Visualization.py index 6493999..c07b062 100644 --- a/src/Visualization.py +++ b/src/Visualization.py @@ -1,6 +1,6 @@ import graphviz -from Node import * -from BTree import * +from Node import Node +from BTree import Btree class Visualization() : @@ -11,6 +11,8 @@ class Visualization() : self.add_node_to_graph(self.btree.root) def add_node_to_graph(self, node): +# nodeKeys = repr(node.keys) + print(repr(node.keys)) nodeKeys = repr(node.keys) self.g.node(nodeKeys) for child in node.childs: diff --git a/src/experimentation.py b/src/experimentation.py index faaa4c0..d8ab56b 100644 --- a/src/experimentation.py +++ b/src/experimentation.py @@ -1,9 +1,41 @@ -import unittest -from Node import * +#import unittest +from Node import Node +from util import * +from Visualization import Visualization +from BTree import Btree + class experimentation: - def setUp(self): - self.node = Node([12, 42], ) + def __init__(self): + self.btree = Btree(2, Node([])) + self.experimentationInsert1() + + def experimentationInsert1(self): + #self.btree.insertion(2) + #self.isCorrect(Btree(2,Node([2]))) + + #self.btree.insertion(4) + #self.isCorrect(Btree(2,Node([2,4]))) + + for n in [2, 4, 5] + list(range(6, 37, 2)) + [7, 9, 11, 13]: + self.btree.insertion(n) + + # TODO Visualization(self.btree).render() + + + print(self.btree) + + + + + + + + def isCorrect(self, BTreeTest): + if (self.btree.equals(BTreeTest)): + print("Correct") + else: + print("error") @@ -16,14 +48,19 @@ class experimentation: +if __name__ == "__main__": + experiment = experimentation() -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 +# if __name__ == "__main__": +# import sys +# sys.path.insert(1, './src') +# sys.path.insert(2, '../src') +# from Node import * +# +# unittest.main() +# import doctest +# doctest.testmod(verbose=False) \ No newline at end of file -- GitLab