From 072d024b6460e57a8785ec984fc38cd5a9f97765 Mon Sep 17 00:00:00 2001 From: Mamadu Lamarana Bah <mamadulamarana.bah.etu@univ-lille.fr> Date: Wed, 17 Jan 2024 20:45:37 +0100 Subject: [PATCH] ajout de util.recherchedicho --- src/BTree.py | 11 +++++++--- src/node.py | 29 +++++++++++++------------ src/util.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 src/util.py diff --git a/src/BTree.py b/src/BTree.py index d87dfa6..4323f71 100644 --- a/src/BTree.py +++ b/src/BTree.py @@ -1,8 +1,13 @@ class Btree() : - def __init__(self,name,root) : - self.name=name - self.root=root + def __init__(self, root) : + self.root = root + + def recherche(self, valeur): + if (self.root != None) : + index = 0 + while index + #def search() : #def insertion(): diff --git a/src/node.py b/src/node.py index 6c5e258..38f6134 100644 --- a/src/node.py +++ b/src/node.py @@ -1,16 +1,23 @@ +import util + class node() : - def __init__(self,keys,child,kmin,kmax) : - self.keys=keys - self.child=child - self.kmin=kmin - self.kmax=kmax - - #def search(key) : + def __init__(self, k, kmin, kmax) : + self.keys = [] + self.childs = [] + self.kmin = kmin + self.kmax = kmax + def search(self, Key): + return util.recherche_dichotomique(key, self.childs) + + def getSize(self) : + return len(Keys) + + def addKey(self) : - def dicho(listKeys,key) : + def dicho(self, listKeys,key) : t=len(listKeys)-1 d, f = 0, t while (f>= d) : @@ -33,10 +40,6 @@ class node() : #def getSizeNode() : #def getPos() : #def setNewChild() : - #def removeChild() : - - def getSize(listKey) : - return len(listKey) - + #def removeChild() : #def isLeaf() : \ No newline at end of file diff --git a/src/util.py b/src/util.py new file mode 100644 index 0000000..1946bbe --- /dev/null +++ b/src/util.py @@ -0,0 +1,60 @@ +import doctest + +def compare(a, b): + """ + :param a: (any) un élément + :param b: (any) un élément + :return: (bool) * 1 si a est plus grand que b + * 0 si a est égal à b + * -1 si a est plus petit que b + :CU: a et b sont comparables + :Exemples: + + >>> compare(1, 2) + -1 + >>> compare('z', 'a') + 1 + >>> compare(0, 0) + 0 + """ + if a > b: + res = 1 + elif a < b: + res = -1 + else: + res = 0 + return res + +def recherche_dichotomique(x, l, cmp = compare): + """ + :param x: (any) un élément + :param l: (list) une liste + :return: (bool) True si x appartient à l, False sinon + :CU: x doit être comparable aux éléments de l, + l est triée + :Exemples: + + >>> recherche_dichotomique(1, []) + (False, -1) + >>> l = list(range(10)) + >>> recherche_dichotomique(5, l) + (True, 5) + >>> recherche_dichotomique(5.5, l) + (False, -1) + """ + n = len(l) + debut, fin = 0, n + index = 0 + while debut < fin: + m = (debut + fin)//2 + if cmp(x, l[m]) == 0: + return (True, m) + elif cmp(x, l[m]) > 0: + index += m + debut = m + 1 + else: + fin = m + index = 0 + return (False, -1) + +doctest.testmod() \ No newline at end of file -- GitLab