From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Extraire les doublons d'un tableau

Résolu !
Accéder à la solution

Bonjour à tous.

 

Je cherche à extraire tous les doublons d'un tableau afin de n'avoir que des éléments dont la valeur est unique dans mon tableau de sortie.

Ex :

[1-1-2-2-3] => [1-2-3]

 

J'ai essayé le diagramme suivant, mais son temps d'éxecution s'acroit de façon exponentielle avec le nombre d'éléments à traiter (plusieurs secondes par tableau de 64k).

doublons.png(la condition "0, défaut" contient un simple fil de liaison)

Existe-t-il un algorythhme plus rapide, ou un moyen d'optimiser celui-ci?

 

Merci d'avance pour votre aide.

 

Ben.

 

0 Compliments
Message 1 sur 8
5 999 Visites
Solution
Accepté par l'auteur du sujet benvdv

Bonjour,

 

Sur la base des données que tu as donné, j'ai fait un VI qui semble plus efficace.

 

Par contre, la méthode proposée nécessite de trier les données dans l'ordre croissant.

 

Suppression Doublons.png

 

En espérant que ca aide.

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

Message 2 sur 8
5 989 Visites

C'est peut-être (très probablement) une bétise, mais si on sépare le tableau en deux et que l'on traite les deux parties par deux coeurs différents (chacun dans des structures cadencés lié à un coeur en particulier), ça n'irait pas plus vite ?

 

Kaleck

0 Compliments
Message 3 sur 8
5 980 Visites

C'est n'importe quoi ce que j'ai écrit juste avant (et je peux plus éditer le message Smiley MDR)

Séparer le tableau en 2 ne va pas résoudre le probleme de doublons entre les deux sous-parties.

De plus, je pense que du code en parallèle est automatiquement gérer par plusieurs coeurs, pas besoin de passé par des structures où l'on indique quel coeur s'occupe de tel code.

0 Compliments
Message 4 sur 8
5 971 Visites

Maxime.

 

Effectivement, ta méthode est beaucoupplus efficace! Le fait de devoir trier le tableau en amont n'est pas gênant. On dirait que le ralentissement venait de la fonction "Rechercher dans un tableau". Toujours bon à savoir... Surtout quand les temps d'éxécution sont critiques pour l'application.

 

 

Encore merci pour ton aide.

0 Compliments
Message 5 sur 8
5 969 Visites

De rien,

 

En fait, ca parait logique, la fonction rechercher dans un tableau va scanner a chaque tour de boucle le tableau en entier alors que ma méthode proposée ne balaye qu'une seule fois le tableau d'où le gain en performance, mais par contre, elle implique le tri des données qui pourrait ne pas conveni à tout le monde.

 

Bonne journée.

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

0 Compliments
Message 6 sur 8
5 960 Visites

elle implique le tri des données qui pourrait ne pas conveni à tout le monde.

 

cela se fait sur une "copie" du Tableau, et cela ne pose donc aucun soucis.

(je ne vois pas en quoi cela pourrait "ne pa convenir")

 

de plus ... la fonction "reverse 1D" est très rapide 

Je pense même que le LV ne "touche" pas réellement au Tableau.

permuter l'index de fin avec celui du début, inverser le signe pour toutes formes d'accès au Tableau ...

(uniquement pour cette copie du Tableau) Quelque chose comme ça ...  ça devrait être bon.

 

"retourner" réellement le Tableau serait, je pense, un manque d'imagination.

et je pense que les développeurs de LV n'en manque pas.  Smiley heureux

Ma main à couper que le Tableau est retourné en changeant un pointeur et un ou deux signes.

 

0 Compliments
Message 7 sur 8
5 957 Visites

Salut ouadji

 

C'est pas tellement sur la copie en mémoire du tableau, mais effectivement, c'est a prendre en compte sur de très grand tableaux.

 

Ma remarque sur le "qui pourrait ne pas convenir à tout le monde", c'était juste dans le cas où on souhaiterai supprimer les doublons tout en gardant l'ordre dans lequel les données sont présentent initialement dans le fichier. C'est ce que fait la méthode proposée au début.

 

Du coup c'est un compromis à faire, vitesse en triant les données pour n'avoir a balayer le tableau qu'une seule fois, ou garder l'ordre, mais rechercher les données dans le tableau qui est beaucoup plus gourmand sur des gros tableaux.

 

A+

 

 

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

0 Compliments
Message 8 sur 8
5 948 Visites