Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/12/2012, 22h41   #1
Mewyn
 
Homme
Étudiant
Inscription : 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 : -1
Points : -1
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 :
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.
Mewyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 22h59   #2
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 287
Points : 32 766
Points : 32 766
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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)
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2012, 10h24   #3
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 121
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 121
Points : 10 358
Points : 10 358
Envoyer un message via Skype™ à thelvin
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)
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
Partagez vos connaissances, mais aussi comment s'en servir.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 10h52   #4
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 287
Points : 32 766
Points : 32 766
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2012, 10h56   #5
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 121
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 121
Points : 10 358
Points : 10 358
Envoyer un message via Skype™ à thelvin
Ah, effectivement.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
Partagez vos connaissances, mais aussi comment s'en servir.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h10.


 
 
 
 
Partenaires

Hébergement Web