IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Optimisation : utilisation d'un tab ou d'un arrayList ou autre?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 37
    Par défaut Optimisation : utilisation d'un tab ou d'un arrayList ou autre?
    Bonjour tout le monde.

    Je travaille actuellement sur le calcul de coupes sagittal et coronal à partir d'une image axial (imagerie médicale).

    Bon jusque là aucun soucis, j'ai stocké toutes mes images axiales dans une matrice 3D ainsi en récuperant les lignes j'ai les coronal et les colonnes les sagittal.

    Ensuite on affiche le tout et pour faire plaisir aux qui veulent s'en servir , un joli mouseDragged pour se promener dans les images et afficher les coupes correspondantes, cependant là c'est le hic. Ca rame

    Un screenshot pour avoir une idée de ce à quoi ça ressemble :


    Donc quand on déplace la souris dans la fenetre Coronal, cela met à jour l'axial et la sagittal, quand on est sur l'axial ça met à jour la coronal et sagittal ainsi de suite.

    Un peu de code maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public int[][] getYZ(int X) {
    		for(int Z=0;Z<depth;Z++)
    			for(int Y = 0;Y<height;Y++)
    			{
    				coronal[Y][Z]=rubik[Z][X][Y];
    			}
     
    		return coronal;	
    	}
     
    	/**
             * 
             * @param Z
             * @return
             */
    	public int[][] getXY(int Z) {
    		for(int X = 0;X<width;X++)
    			for(int Y=0;Y<height;Y++)
    			{
    				axial[X][Y]=rubik[Z][X][Y];
    			}
     
    		return axial;		
    	}
     
     
     
    	/**
             * 
             * @param X
             * @return
             */
    	public int[][] getXZ(int Y){
    		for(int Z=0;Z<depth;Z++)
    			for(int X = 0;X<width;X++)
    			{
    				sagittal[X][Z]=rubik[Z][X][Y];
    			}
     
    		return sagittal;	
     
    	}
    Voila comment j'extrait chacune des coupes. J'ai aussi remarqué que quand je me déplace dans mon image coronal la mise à jour de l'axial et la sagittal est instantanée ce qui est parfait pour mon utilisation, cependant dans les autres cas ça rame. J'ai remarqué que ça dépendait des indices auxquels on veut accéder dans le tableau 3D. Je pense que c'est une histoire de comment c'est stocké en mémoire, contigu ou non, etc...

    Du coup je sèche un peu sur comment accélérer tout ça, j'ai trouvé des librairies externes comme COLT qui semble pouvoir extraire n'importe qu'elle tranche d'une matrice 3D en O(1), mais si je peux éviter les librairies externes ça m'arrangerait.



    Auriez vous une idée de comment améliorer tout ceci?

    Sinon je pensais à m'orienter sur des arrayList, mais est ce que ce sera plus rapide?

    PS : je m'excuse d'avance si un post sur un thème similaire à déjà été fait, car il aurait échappé à mes recherches.

    Je vous remercie d'avance, bonne journée à vous tous.

  2. #2
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    bonjour
    déjà le fait de faire deux boucles for imbriquées ça augmente la complexité de ton algorithme
    en l'occurrence dans la méthode getYZ tu fais depth*height opérations
    alors que dans getXY tu fais with*height opérations

    si tu connais un exemple pour les valeurs de with,depth,height tu peux faire un calcul rapide pour trouver le nombre d'opérations dans les deux cas.

    ensuite il faut peut être changer la façon de stockée les cordonnées.
    si colt fait ce que tu veux pourquoi t'en priver
    tu peux au moins faire un test pour voir si les perfs sont meilleures

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 37
    Par défaut
    En effet les boucles for imbriquées augmentent la complexité.

    si tu connais un exemple pour les valeurs de with,depth,height tu peux faire un calcul rapide pour trouver le nombre d'opérations dans les deux cas.
    pour getXY() :160 000 itérations.
    pour getYZ() : 240 000 itérations.
    pour getXZ() : 240 000 itérations.

    Quand je me déplace sur la coronal je fais un get XY() et un getXZ() soit 400 000 itérations cependant c'est beaucoup plus rapide que quand je me déplace sur la sagittal où je fais un getXY() et un getYZ().

    ensuite il faut peut être changer la façon de stockée les cordonnées.
    Pour cela je pensai passer par les arrayList, mais je ne sais pas si je gagnerai beaucoup en performance. Si dans une arrayList je stock à chaque fois le tableau de chaque coupe préalablement calculé, il y aurait en moyenne 1500 entrées. Donc en théorie ça devrait aller plus vite pour accéder à un index. Mais après est ce que ça ne serait pas trop gourmand en ressource mémoire? Je me retrouve aussi limité par la mémoire de la machine. Actuellement le programme ( qui gère affichage de plusieurs images et tout ça) prend 1 giga de mémoire quand tout tourne.

    Pour colt, les chefs sont pas vraiment d'accord pour utiliser des librairies externes, ils n'y connaissent pas des masses en informatique. Donc si je dois vraiment m'en servir ça va être des pieds et des mains pour pouvoir le faire sans me faire incendier à la prochaine revue de code.

Discussions similaires

  1. utilisation d'un Tab strip sous VB6
    Par jfdmagic dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 16/04/2009, 16h52
  2. utilisation d'un tabbed panel
    Par eterneljob dans le forum Struts 2
    Réponses: 5
    Dernier message: 17/05/2008, 13h04
  3. [Débat] Optimisation, utilisation de sgbd ?
    Par Targan dans le forum Optimisations
    Réponses: 4
    Dernier message: 14/02/2008, 14h33
  4. Réponses: 10
    Dernier message: 02/11/2007, 14h36
  5. Stuts Layout => utilisation des tags <tabs> et <tab>
    Par spirodeau dans le forum Struts 1
    Réponses: 4
    Dernier message: 26/07/2006, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo