opérations et complexités

opérations et complexités - Java - Programmation

Marsh Posté le 05-07-2007 à 17:08:50    

Bonjour,
 
Je me pose des questions sur la façon dont je peux optimiser mes algorithmes de traitement d'images.
 
Je voudrai savoir comment Java gère ce calcul par exemple:
 
a=false;
b=c=d=true;
result = a & b & c & d;
 
Est-ce que le calcul est fini dès que a est évalué, ou est-ce qu'il continu?
 
 
 
Sinon est-ce que la complexité de ceci:
 
int a;
for(int i=0; i<4; i++){
   a=i;
}
 
est plus grande que cela:
 
int a;
a=0;
a=1;
a=2;
a=3;
 
 
Merci

Message cité 3 fois
Message édité par letesp le 05-07-2007 à 17:22:46
Reply

Marsh Posté le 05-07-2007 à 17:08:50   

Reply

Marsh Posté le 05-07-2007 à 17:18:00    

letesp a écrit :

Bonjour,
 
Je me pose des questions sur la façon dont je peux optimiser mes algorithmes de traitement d'images.
 
Je voudrai savoir comment Java gère ce calcul par exemple:

Code :
  1. //3


Est-ce que le calcul est fini dès que a est évalué, ou est-ce qu'il continu?
 
 
 
Sinon est-ce que la complexité de ceci:

Code :
  1. //3


est plus grande que cela:

Code :
  1. //3


Merci


je vois pas de traitement d'images  [:jagstang]  


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 05-07-2007 à 17:24:05    

J'ai remis le code. Elle marche les balises "code"?
 
Maintenant à chaque fois que je les mets ça remplace le code par "//3".

Reply

Marsh Posté le 05-07-2007 à 17:59:37    

letesp a écrit :

Bonjour,

 

Je me pose des questions sur la façon dont je peux optimiser mes algorithmes de traitement d'images.

 

Je voudrai savoir comment Java gère ce calcul par exemple:

 

a=false;
b=c=d=true;
result = a & b & c & d;

 

Est-ce que le calcul est fini dès que a est évalué, ou est-ce qu'il continu?


Les opérateurs booléens en java, comme avec environ 90% des langages de prog modernes (sauf le VB) utilisent le shortcutting, donc seul a est évalué.

 


edit: merde, bidem a raison l'opérateur booléen c'est "&&" pas "&" [:sisicaivrai]

letesp a écrit :

Sinon est-ce que la complexité de ceci:

 

int a;
for(int i=0; i<4; i++){
   a=i;
}

 

est plus grande que cela:

 

int a;
a=0;
a=1;
a=2;
a=3;

 


Merci


Je ne vois pas comment ça pourrait l'être


Message édité par masklinn le 06-07-2007 à 09:37:48

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-07-2007 à 09:29:08    

Citation :

a=false;
b=c=d=true;
result = a & b & c & d;
 
Est-ce que le calcul est fini dès que a est évalué, ou est-ce qu'il continu?


 
vu comment c'est écrit, toute l'expression est évaluée. Si tu veux utiliser les shortcut, il faut écrire comme suit :
 
result = a && b && c && d;

Reply

Marsh Posté le 06-07-2007 à 10:10:47    

Citation :

vu comment c'est écrit, toute l'expression est évaluée. Si tu veux utiliser les shortcut, il faut écrire comme suit :
 
result = a && b && c && d;
 


Oui effectivement  :pt1cable: . Pour l'instant je fais surtout du pseudo-code, ce qui explique les erreurs de syntaxe.
 
 

Citation :

Je ne vois pas comment ça pourrait l'être
 


Bah je n'en ai aucune idée non plus. Je m'étais dit que à chaque boucle, il y avait une opération d'incrémentation sur le i, et peut-être une comparaison pour vérifier qu'il ne dépasse pas la valeur maximum. Ca parait forcément insignifiant pour une boucle qui va jusqu'à 4.
 
Mais comme je l'ai dit c'est pour du traitement d'images. Pour certains filtres, il faut faire 2 boucles for pour parcourir toute l'image, et 2 autres boucles for à l'intérieur pour parcourir les 8 voisins (ou 24, ou 48...). Et ensuite il faut enchainer les filtres.
 
Alors la moindre miliseconde que l'on peut gagner sur une boucle peut avoir une grosse incidence au final
 
 
Merci de vos réponses pour les opérations logiques en tout cas.


Message édité par letesp le 06-07-2007 à 10:11:43
Reply

Marsh Posté le 11-07-2007 à 22:50:57    

pour la traitement d'image, tu est obligé de faire des boucles imbriqueés (4 en général) pour réaliser ton traitement d'image. Il n'y a pas vraiment d'optimisation possible (sauf dans le cas de filtres particulier, avec un structuring element particulier par exemple)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2007 à 13:50:34    

letesp a écrit :

Bonjour,
 
Sinon est-ce que la complexité de ceci:
 
int a;
for(int i=0; i<4; i++){
   a=i;
}
 
est plus grande que cela:
 
int a;
a=0;
a=1;
a=2;
a=3;
 
Merci


 
Il y a fort à parier que le compilateur va transformer ta boucle en une suite d'assignations, comme tu l'as fait, vu que tout peut être déterminé au compile-time. Et s'il est très malin, il va peut-être même supprimer les trois premières qui sont tout à fait inutiles... On serait étonné de voir tout ce que peuvent faire les compilateurs modernes ;)

Reply

Marsh Posté le 20-07-2007 à 14:07:04    

jyles a écrit :


 
Il y a fort à parier que le compilateur va transformer ta boucle en une suite d'assignations, comme tu l'as fait, vu que tout peut être déterminé au compile-time. Et s'il est très malin, il va peut-être même supprimer les trois premières qui sont tout à fait inutiles... On serait étonné de voir tout ce que peuvent faire les compilateurs modernes ;)


 
Je viens de vérifier, et à mon grand désarroi, il n'en est rien... C'est nul javac ! ^^

Reply

Marsh Posté le 20-07-2007 à 16:27:46    

jyles a écrit :


 
Je viens de vérifier, et à mon grand désarroi, il n'en est rien... C'est nul javac ! ^^


C'est pas nouveau ça


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-07-2007 à 16:27:46   

Reply

Marsh Posté le 21-07-2007 à 00:29:49    

jyles a écrit :


 
Je viens de vérifier, et à mon grand désarroi, il n'en est rien... C'est nul javac ! ^^


 
Juste par curiosité (débutant java inside), comment tu as fait pour savoir comment travaillait javac?


---------------
...
Reply

Marsh Posté le 21-07-2007 à 00:55:33    

plzhelp a écrit :


 
Juste par curiosité (débutant java inside), comment tu as fait pour savoir comment travaillait javac?


Il est possible de décompiler les .class pour récupérer du bytecode lisible (ça ressemble un peu à de l'ASM de plus haut niveau).


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-07-2007 à 11:28:18    

Ok, merci.


---------------
...
Reply

Marsh Posté le 22-07-2007 à 13:09:26    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed