Redondance
pontarose
Messages postés
151
Statut
Membre
-
Posotaz Messages postés 505 Statut Membre -
Posotaz Messages postés 505 Statut Membre -
Bonjour,
j'ai 3 élements (E1,E2 et E3) pour chaque élements, je récupère dans un tableau leurs produits (P) respectifs.
pour E1:
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P4
[4]=>P5
[5]=>P6
[6]=>P7
[7]=>P8
[8]=>P9
)
pour E2:
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P6
)
pour E3:
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P7
[4]=>P8
)
le tableau final j'ai :
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P4
[4]=>P5
[5]=>P6
[6]=>P7
[7]=>P8
[8]=>P9
[9]=>P1
[10]=>P2
[11]=>P3
[12]=>P6
[13]=>P1
[14]=>P2
[15]=>P3
[16]=>P7
[17]=>P8
)
J'aimerais conserver les produits (P) communs aux 3 élements E1, E2 et E3 c'est à dire dans l'exemple ci -dessus: P1, P2 et P3. (Autrement dit le produits P doit être présent en trois exemplaires(3 car on a 3 élements) dans le tableau final).
Pourriez vous m'aider, je n'arrive pas a le matérialiser
j'ai 3 élements (E1,E2 et E3) pour chaque élements, je récupère dans un tableau leurs produits (P) respectifs.
pour E1:
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P4
[4]=>P5
[5]=>P6
[6]=>P7
[7]=>P8
[8]=>P9
)
pour E2:
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P6
)
pour E3:
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P7
[4]=>P8
)
le tableau final j'ai :
Array
(
[0]=>P1
[1]=>P2
[2]=>P3
[3]=>P4
[4]=>P5
[5]=>P6
[6]=>P7
[7]=>P8
[8]=>P9
[9]=>P1
[10]=>P2
[11]=>P3
[12]=>P6
[13]=>P1
[14]=>P2
[15]=>P3
[16]=>P7
[17]=>P8
)
J'aimerais conserver les produits (P) communs aux 3 élements E1, E2 et E3 c'est à dire dans l'exemple ci -dessus: P1, P2 et P3. (Autrement dit le produits P doit être présent en trois exemplaires(3 car on a 3 élements) dans le tableau final).
Pourriez vous m'aider, je n'arrive pas a le matérialiser
A voir également:
- Redondance
- Redondance - Forum Bases de données
- Erreur de données (contrôle de redondance cyclique) disque non initialisé - Forum Disque dur / SSD
- Des passerelles par défaut multiples sont destinées à fournir la redondance - Forum Réseaux sociaux
- Redondance cyclique - Forum Matériel & Système
- Problème de redondance cyclique ✓ - Forum Disque dur / SSD
4 réponses
Hello,
Voici comment je vois les choses, partant de ton tableau final :
En espérant que ça puisse t'aider à construire ton algorithme dans ton langage de prédilection. :-)
Voici comment je vois les choses, partant de ton tableau final :
- Déclarer un tableau vide (T_distinct) qui contiendra la liste des Produits distintcs
- Parcourir le tableau final (T_final) élément par élément et pour chaque élément :
- Parcourir T_distinct à la recherche de l'élément courant de T_final
- Si T_distinct ne contient pas cet élément, on l'ajoute
A ce stade on a un tableau T_distinct avec la liste des Produits distincts (pas de doublons).
Il nous reste à vérifier quels sont les Produits communs aux 3 tableaux
- Déclarer un tableau vide (T_commun) qui contiendra la liste des Produits communs aux 3 tableaux
- Déclarer variable de présence totale (V_presence) qui va représenter le fait qu'un produit est présent dans la totalité des tableaux ou non
- Parcourir T_distinct élément par élément et pour chaque élément :
- Initialiser V_presence à VRAI
- Parcourir les 3 tableaux (E1, E2, E3) et pour chaque tableau :
- Parcourir le tableau courant (En) à la recherche de l'élément courant de T_distinct
- Si En ne contient pas l'élément courant de T_distinct, on place V_presence à FAUX (et inutile de chercher dans les tableaux suivants)
- Si V_presence est VRAI, ajouter l'élément courant de T_distinct à T_commun
En espérant que ça puisse t'aider à construire ton algorithme dans ton langage de prédilection. :-)
bonjour,
merci beaucoup cela m'aide pour mon algo.
Le tableau pour E1, E2 et E3 est obtenue dans une boucle je ne peux donc pas faire l'étape "parcourir les 3 tableaux"(cf.ci-dessus)
j'ai donc procédé ainsi:
_ J'ai mon tableau final (T_final) et à partir de celui-ci, j'enlève les doublons: j'obtiens le tableau (T_distinct)
_ je parcours T_distinct élément par élément :
_ je parcours T_final élément par élément :
* et pour chaque élément de T_distinct et T_final:
* je regarde si l'élément de T_distinct est équivalent T_final alors ,je crée un tableau avec pour clé l'élément de T_distinct ; la valeur de cette clé est incrémenter en fonction du nombre de fois que je rencontre dans le tableau l'élemént T_final.
le problème est que je coince a ce niveau. J'ai un souci au niveau de l' incrementation de la valeur de la clé.
Voiçi ce que j'obtiens:
P1 :1
P2 :4
P3 :7
P4 :8
P5:9
P6 :10
P7 :11
P8 :13
P9 :14
En effet, la valeur de la clé n'est pas incrémenté. (P2 est présent dans E1, e2 et E3 d'ou on passe de 1 à 3 et ainsi P2=4; P3 st présent dans E1, E2 et E3 d'ou on passe de 4 à 7 ainsi P3=7)
//pour enlever la redondance
for($t=0; $t<count($t_final); $t++)
{
if(!in_array("$t_final[$t]",$t_distinct))
{
//ajout d'un élément au tableau
$t_distinct[]="$t_final[$t]";
}
}
for($w=0; $w<count($t_distinct); $w++)
{
for($u=0; $u<count($t_final); $u++)
{
if($t_distinct[$w]==$t_final[$u])
{
print("element t: $t_distinct[$w] est équivalent a element i:$_final[$u]<br>");
$tab_associatif=array(
"$t_distinct[$w]"=>$j++
);
}
}
foreach($tab_associatif as $cle=>$valeur)
{
print("<b>$cle:$valeur</b><br>");
}
//print("<b>".$tab_enzyme_distinct[$w]." :".$tab_associatif['$j']."</b><br>");
}
Voiçi ce que je voudrais obtenir:
P1:3
P2:3
P3:3
P4:1
P5:1
P6 :2
P7 :2
P8 :2
P9 :1
merci beaucoup cela m'aide pour mon algo.
Le tableau pour E1, E2 et E3 est obtenue dans une boucle je ne peux donc pas faire l'étape "parcourir les 3 tableaux"(cf.ci-dessus)
j'ai donc procédé ainsi:
_ J'ai mon tableau final (T_final) et à partir de celui-ci, j'enlève les doublons: j'obtiens le tableau (T_distinct)
_ je parcours T_distinct élément par élément :
_ je parcours T_final élément par élément :
* et pour chaque élément de T_distinct et T_final:
* je regarde si l'élément de T_distinct est équivalent T_final alors ,je crée un tableau avec pour clé l'élément de T_distinct ; la valeur de cette clé est incrémenter en fonction du nombre de fois que je rencontre dans le tableau l'élemént T_final.
le problème est que je coince a ce niveau. J'ai un souci au niveau de l' incrementation de la valeur de la clé.
Voiçi ce que j'obtiens:
P1 :1
P2 :4
P3 :7
P4 :8
P5:9
P6 :10
P7 :11
P8 :13
P9 :14
En effet, la valeur de la clé n'est pas incrémenté. (P2 est présent dans E1, e2 et E3 d'ou on passe de 1 à 3 et ainsi P2=4; P3 st présent dans E1, E2 et E3 d'ou on passe de 4 à 7 ainsi P3=7)
//pour enlever la redondance
for($t=0; $t<count($t_final); $t++)
{
if(!in_array("$t_final[$t]",$t_distinct))
{
//ajout d'un élément au tableau
$t_distinct[]="$t_final[$t]";
}
}
for($w=0; $w<count($t_distinct); $w++)
{
for($u=0; $u<count($t_final); $u++)
{
if($t_distinct[$w]==$t_final[$u])
{
print("element t: $t_distinct[$w] est équivalent a element i:$_final[$u]<br>");
$tab_associatif=array(
"$t_distinct[$w]"=>$j++
);
}
}
foreach($tab_associatif as $cle=>$valeur)
{
print("<b>$cle:$valeur</b><br>");
}
//print("<b>".$tab_enzyme_distinct[$w]." :".$tab_associatif['$j']."</b><br>");
}
Voiçi ce que je voudrais obtenir:
P1:3
P2:3
P3:3
P4:1
P5:1
P6 :2
P7 :2
P8 :2
P9 :1
Salut :-)
Ah ok donc la deuxième étape c'est de compter combien de fois on retrouve un "P" au sein des 3 tableaux...
Petite précision avant d'aller plus loin, ne te casse pas la tête à créer comme je te l'ai dit un T_distinct en t'aidant de la méthode in_array() pour n'ajouter la valeur que si elle n'est pas déjà présente... c'est juste une méthode en algorithmie mais vu que je vois que tu utilises PHP, ce langage fait ça pour toi si tu utilises la fonction array_unique().
Par contre il va falloir que tu m'expliques pourquoi tu mets la right-value entre guillemets :
$t_distinct[]="$t_final[$t]";
... j'en reste surpris.
Quand je dis de parcourir les 3 tableaux il faut que tu comprennes que je veux pouvoir y accéder. La façon dont tu les obtiens importe peu mais je dois pouvoir les référencer sinon on ne sait pas résoudre ton problème.
Si c'était un tabeau à deux dimensions il devrait avoir la forme suivante : T_superTableau[3][].
Ou pour 3 tableaux : E1[]; E2[]; E3[].
Sans une des deux références on ne sait pas aller plus loin. Donc mon algorithme tient toujours la route mais tu n'as plus besoin du T_commun. Ca devient (italique => gras) :
Pour chaque valeur dans T_distinct tu va rechercher dans les 3 tableaux si la valeur y figure. Dès qu'elle figure dans un tableau tu incrémentes le compteur. Pour l'élément suivant de T_distinct, le compteur sera remis à 0.
Il va donc te falloir un tableau du même nombre d'éléments que T_distinct qui lui va contenir le nombre d'occurences de chaque élément... ce seront deux tableaux parallèles... un qui contiendra les noms (P1,...) et l'autre le nombre d'occurences (3,...). Sinon travaille plutôt avec des Objets si tu connais la POO, ça ve te faciliter la vie mais si tu ne connais pas ça reste un apprentissage certain.
Voilà bon courage !
Ah ok donc la deuxième étape c'est de compter combien de fois on retrouve un "P" au sein des 3 tableaux...
Petite précision avant d'aller plus loin, ne te casse pas la tête à créer comme je te l'ai dit un T_distinct en t'aidant de la méthode in_array() pour n'ajouter la valeur que si elle n'est pas déjà présente... c'est juste une méthode en algorithmie mais vu que je vois que tu utilises PHP, ce langage fait ça pour toi si tu utilises la fonction array_unique().
Par contre il va falloir que tu m'expliques pourquoi tu mets la right-value entre guillemets :
$t_distinct[]="$t_final[$t]";
... j'en reste surpris.
Quand je dis de parcourir les 3 tableaux il faut que tu comprennes que je veux pouvoir y accéder. La façon dont tu les obtiens importe peu mais je dois pouvoir les référencer sinon on ne sait pas résoudre ton problème.
Si c'était un tabeau à deux dimensions il devrait avoir la forme suivante : T_superTableau[3][].
Ou pour 3 tableaux : E1[]; E2[]; E3[].
Sans une des deux références on ne sait pas aller plus loin. Donc mon algorithme tient toujours la route mais tu n'as plus besoin du T_commun. Ca devient (italique => gras) :
...
- Parcourir T_distinct élément par élément et pour chaque élément :
- Initialiser V_presence à VRAI => Initialiser un compteur à 0 (V_compteur)
- Parcourir les 3 tableaux (E1, E2, E3) et pour chaque tableau :
- Parcourir le tableau courant (En) à la recherche de l'élément courant de T_distinct
- Si En ne contient pas l'élément courant de T_distinct, on place V_presence à FAUX (et inutile de chercher dans les tableaux suivants) => Si "En" contient l'élément courant de T_distinct, on incrémente V_compteur
// Ici tu boucles jusqu'à ce que tu aies parcouru les 3 tableaux.
// Donc en arrivant à l'étape suivante tu connais le nombre d'ocurences de l'élément courant dans T_distinct.
// Pour l'élément suivant on repasse à l'initialisation de V_compteur à 0
- Si V_presence est VRAI, ajouter l'élément courant de T_distinct à T_commun =>Associer V_compteur à la position de l'élément courant de T_distinct
Pour chaque valeur dans T_distinct tu va rechercher dans les 3 tableaux si la valeur y figure. Dès qu'elle figure dans un tableau tu incrémentes le compteur. Pour l'élément suivant de T_distinct, le compteur sera remis à 0.
Il va donc te falloir un tableau du même nombre d'éléments que T_distinct qui lui va contenir le nombre d'occurences de chaque élément... ce seront deux tableaux parallèles... un qui contiendra les noms (P1,...) et l'autre le nombre d'occurences (3,...). Sinon travaille plutôt avec des Objets si tu connais la POO, ça ve te faciliter la vie mais si tu ne connais pas ça reste un apprentissage certain.
Voilà bon courage !