Bonjour à tous,
Je sais que ce salon n'est peut-être pas le plus adapté pour ce type de question mais je n'ai pas trouvé ailleurs.
Voilà mon problème, j'ai besoin d'un algorithme performant car j'en ai trouvé quelques uns mais l'ordre de calcul minimum que j'ai trouvé au minimum est de O[(2^n)-1]. Bref c'est plutôt couteux sachant que j'ai 11 000 données à étudier.
Je vous explique la situation, j'ai un type de donnée de la sorte:
element:
nom1: valmin , valmax
nom2: valmin, valmax
....
nomN: valmin, valmax
Mon algorithme prend en entrée un ensemble d'élement ayant un ensemble de valeur avec valMin = valMax.
Par exemple:
e1:
a 1 1
b 2 2
c 2 2
e2:
a 2 2
b 4 4
c 5 5
e2:
a 3 3
b 3 3
c 6 6
Le but de mon algorithme est de définir les intervalles reliant ces types, dans cet exemple, le résultat obtenu serait:
e1:
a 1 1
b 2 2
c 2 2
e2:
a 2 2
b 4 4
c 5 5
e2:
a 3 3
b 3 3
c 6 6
t1:
a 1 3
b 2 4
t2 :
b 3 4
c 5 6
La jointure entre un element A et un element B se fait de cette facon:
admettons que nous ayons:
a1:
a 2 2
b 3 3
c 6 6
et
a2:
a 3 3
b 10 10
c 5 5
alors la jointure entre ces deux éléments sera:
t :
a 2 3
c 5 6
(pas de b car il n'y a pas de lien entre 3 et 10)
ça c'est simple à obtenir.
Le but de l'algorithme est de calculer un ensemble d'intervalles sans "trou".
Admettons que nous ayons :
e1:
a 1 1
b 2 2
c 2 2
e2:
a 3 3
b 3 3
c 6 6
Nous ne pouvons obtenir que
b 2 3
en revanche pour obtenir
a 1 3
b 2 3
c 2 6
il faut qu'il y ai au préalable (dans une liste temporaire, c'est comme ça que j'ai fait)
a 2 2 ou a 1 2 ou a 2 3 ou a 13
b 2 2 ou b 3 3 ou b 2 3
c 2 5 ou c 3 6 ou c 2 5 ou c 26
Bref c'est un peu compliqué, je ne sais pas si j'ai bien exprimé mon problème mais j'ai besoin d'aide car je n'arrive pas à avoir quelque chose de performant...
Merci beaucoup!
Partager