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

Langage Java Discussion :

Optimisation - Inversion d'éléments dans une liste


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Optimisation - Inversion d'éléments dans une liste
    Bonjour,

    J'ai une fonction qui inverse les éléments (des sommets) d'une liste de i à j:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	protected void reverse(int i,int j,List<Sommet> _path_) {
    		for(int k=0;k<=(j-i)/2;k++) {
    			Sommet tmp =_path_.get(i+k);
    			_path_.set(i+k,_path_.get(j-k));
    			_path_.set(j-k,tmp);
    		}
    	}
    J'aimerai savoir si il est possible d'optimiser cette fonction, pour information l'objet _path_ passer en argument est une arrayList.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Non, mallheureusement, pas de méthode plus rapide avec l'arrayList. On pourrais peut-être envisager de créer une méthode plus rapide dans une nouvelle implémentation de List<> mais faut avoir une bonne raison. Le gain serait marginal.

    Ici, avec ArrayList, set(index,value) est déjà en O(1)

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben, on peut imaginer de renvoyer une "vue" inversée de la List, plutôt que modifier la List elle-même.

    On ferait une nouvelle classe qui implémente List et qui se base sur une autre List, le but étant de présenter exactement les mêmes données, mais en sens inverse. Ce serait bien plus compliqué, mais du coup produire cette nouvelle List serait O(1) au lieu de O(n), et elle exécuterait toutes ses méthodes avec la même complexité que la première.

    Par contre, si on fait ça, ça ne modifie pas la List d'origine. Ça permet juste d'avoir à disposition, une List, qui a les éléments de la List d'origine, en sens inverse (et qui change à chaque fois que la List d'origine change, et vice-versa.)

    TL;DR: un pattern décorateur. C'est O(1) au lieu de O(n)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Sauf qu'ici il n'inverse pas la liste, mais juste une section et, à priori, je pense qu'il est obligé de modifier la liste d'origine, si c'est pour modifier des données dans une structure en arbre dans le cadre d'un algo

    Sinon, effectivement, on peux envisager un décorateur qui contient une table de redirection, et l'inversion se ferait uniquement via cette table.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ah, effectivement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. position d'un élément dans une liste
    Par john491 dans le forum Général Python
    Réponses: 8
    Dernier message: 05/05/2006, 13h13
  2. [VBA] sélection d'un élément dans une liste
    Par menguygw dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 12h18
  3. Sélectionner un élément dans une liste multiple
    Par sourivore dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/03/2006, 11h47
  4. [debutant] insertion d'éléments dans une List
    Par gwenou60 dans le forum Composants
    Réponses: 1
    Dernier message: 05/12/2005, 09h59
  5. contrôler l'absence d'un élément dans une liste donnée
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2005, 10h02

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