Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1009 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  complexite d un algorythm ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

complexite d un algorythm ?

n°1178857
xiluoc
un pc pour les unirs ....
Posté le 18-08-2005 à 15:48:07  profilanswer
 

:hello: ,  
J ai une matrix nXm (col * rows) et un nombre P
je test differentes decoupes  column et rows, qui se resume a traverser la matrix deux fois donc col*rows *2
Ensuite en utilisant divide and conqueer, je fait subir le meme processus aux deux sous matrices chacune se partageant P/2 (si paire)
jusqu a ce que P soit egal a 1.
 
quel serait la complexiter en big O ? big Theta (fct inferieur)? big Omega (fct superieur) ?
 
je sais que divide and conquer est n log n. mais dans mon cas ce devrais changer un peu non ?

mood
Publicité
Posté le 18-08-2005 à 15:48:07  profilanswer
 

n°1178915
theshockwa​ve
I work at a firm named Koslow
Posté le 18-08-2005 à 16:47:34  profilanswer
 

j'ai rien compris [:petrus75]
 
mais on écrit algorithme [:aloy]

n°1178925
nookonee
Hummm... Delicious!!!! :D
Posté le 18-08-2005 à 16:57:49  profilanswer
 

:lol:  
 
c'est clair que ca a l'air complexe  [:nookonee]

n°1179275
xiluoc
un pc pour les unirs ....
Posté le 19-08-2005 à 01:13:09  profilanswer
 

Et la ?
chaque partition demande col*rows *2 operations avant de savoir ou coupe.
http://img340.imageshack.us/img340/3653/diag5fj.png
 
haha en prime le correcteur orhto en anglais.


Message édité par xiluoc le 19-08-2005 à 01:14:25
n°1179276
xiluoc
un pc pour les unirs ....
Posté le 19-08-2005 à 01:13:49  profilanswer
 

nookonee a écrit :

:lol:  
 
c'est clair que ca a l'air complexe  [:nookonee]


on appelle pas ca complexite dun algo en francais ?
O(n) ect

n°1179789
_p1c0_
Posté le 19-08-2005 à 17:15:35  profilanswer
 

xiluoc a écrit :

on appelle pas ca complexite dun algo en francais ?
O(n) ect


 
en français ça donne: complexité d'un algorithme  :sarcastic:

n°1180166
dividee
Posté le 20-08-2005 à 14:23:08  profilanswer
 

Tu aurais pu continuer le thread précédent (http://forum.hardware.fr/hardwaref [...] 5337-1.htm) au lieu d'en créer un nouveau, ça t'aurait évité de devoir réexpliquer...
 
Je peux me tromper mais voilà ma réflection:
A chaque étape, on doit parcourir au moins une fois tous les éléments de la matrice pour trouver la meilleur partition. Par exemple, on commence avec P=8. On doit parcourir tous les éléments pour trouver la meilleure partition. On se retrouve avec deux sous-problèmes où P=4. Pour ces 2 sous-problèmes pris ensembles, on doit à nouveau parcourir tous les éléments de la matrices, etc jusqu'à ce que P=1.
La complexité est donc O(N*M*log(P)), vu qu'il faut de l'ordre de log(P) étape pour arriver à P=1.
Quelques mesures effectuées semblent confirmer ce résultat lorsque P << N*M (P bcp plus petit que N*M). Dans mes tests, ca colle assez bien tant que P < N, mais je n'ai essayé qu'avec des matrices carrées contenant des élements choisis aléatoirement avec un distribution uniforme.
Toutefois, il manque certainement une partie du raisonnement vu que lorsque P est plus grand, le temps de calcul augmente significativement et je ne sais pas trop comment l'expliquer.

n°1180493
xiluoc
un pc pour les unirs ....
Posté le 21-08-2005 à 09:03:43  profilanswer
 

jai fait aussi letude de mon cote et voila ce que jai trouve

Code :
  1. >> Efficiency analysis using Asymptotic notation
  2.     Since the algoryhtm is using recurcion we write
  3.  
  4.    T(row * col) = Theta(row * col)  if P = 1    (1)
  5.     Even if there is one cpu, to attribute we still need to calculate the Maxload
  6.     which is the sum of the matrix. we could write in our case
  7.     T(row * col) = Theta(1) + C(n)
  8.    
  9.     T(row * col) = T((row * col) / (P - P/2)) + T((row * col) / (P/2)) + D(n) + C(n)
  10.     if P > 1
  11.     D(n) corresponding to the time to divide
  12.     and C(n) to the time to process the vector and display the answer.
  13.    
  14.     D(n) = Theta(row * cols) (2) + Theta((rows -1) * cols) (3) + Theta(row * (cols-1) (4)
  15.     which can be simplified to 3 * Theta(row*cols)
  16.     C(n) = Theta(row * cols) (1)
  17.     we got : T(n) = T(n/(P-P/2)) + T(n/(P/2)) + 4 Theta(n)
  18.     since P-P/2 = P/2 even if in the program P/2 may be the closes interger if P is odd.
  19.     T(n) = T(n/(P/2)) + T(n/(P/2)) + 4 Theta(n)
  20.     ==> T(n) = 2 T(n/(p/2)) + 4 Theta(n)
  21.     From the Master theorem we can see clearly that we are in the second case
  22.     f(n)= Theta(n^log(b)a)
  23.     Therefore T(n) =  Theta( 4 * n log n)


le seul truc que je ne suis pas trop sur cest lapplication du master theorem, ou doit aller le 4.

n°1180975
dividee
Posté le 22-08-2005 à 00:25:37  profilanswer
 

Le 4 on s'en fout, Theta est défini à une constante près:
Theta(4*n) = Theta(n) = 4 * Theta(n) ...
 
Mais je ne suis pas sûr de te suivre dans ton raisonnement. Comment P disparait de l'équation ? Cela voudrait dire que la complexité asymptotique est indépendante de P ?
(j'utilise 'O' au lieu de 'Theta' car c'est plus lisible, mais il s'agit vraiment de Theta)
T(n,p) = 2 T(n/2,p/2) + O(n)
--> T(n/2,p/2) = 2 T(n/4,p/4) + O(n/2)
--> T(n,p) = 4 T(n/4,p/4) + 2 O(n)
--> T(n,p) = 8 T(n/8,p/8) + 3 O(n)
...
On sait que T(n,1) = O(n).
Comme p <= n, on arrivera à p=1 avant d'arriver à n=1
--> T(n,p) = p T(n/p, 1) + O(log p) * O(n)
--> T(n,p) = p O(n/p) + O(n log p)
--> T(n,p) = O(n) + O(n log p)
--> T(n,p) = O(n log p)
 
Mais j'ai fait l'hypothèse que la matrice est à chaque fois divisée en 2 parties égales (d'où le n/2 dans la récurrence), cette démonstration n'est donc pas générale. Elle nous donne donc tout au plus une borne inférieure de T(n,p).
 
Essayons un cas particulier, pour nous faire une idée:
supposons que la matrice est une matrice-ligne (un vecteur): 1 x n. Prenons le cas où, à chaque division, un seul élément est séparé du reste.
T(n,p) = T(n-1, p/2) + T(1,p/2) + O(n)
--> T(n-1,p/2) = T(n-2, p/4) + T(1, p/4) + O(n-1)
et  T(1,p) = O(p/2) (il faut bien dire à tous ces processeurs sauf 1 qu'ils ne doivent rien faire)
--> T(n,p) = T(n-2, p/4) + O(p/4) + O(n-1) + O(p/2) + O(n)
...
--> T(n,p) = T(n-log p, 1) + [O(p/2) + O(p/4) + O(p/8) + ... + O(1)] + [O(n) + O(n-1) + O(n-2) + ... + O(n-log p)]
log p est négligeable par rapport à n (puisque p <= n)
--> T(n,p) = O(n) + O(p) + O(n)*log p
O(p) <= O(n)
--> T(n,p) = O(n*log p)
 
Même résultat...
 
Cela me donne une idée pour trouver une borne supérieure dans le cas général:
T(n,p) = T(n1,p/2) + T(n-n1,p/2) + O(n)    ; 0 < n1 < n
En réalité, la valeur de n1 sera plus contrainte: elle sera toujours un multiple du nombre de lignes ou de colonnes de la matrice considérée.
T(n1,p/2) = T(n2,p/4) + T(n1-n2,p/4) + O(n1)         ; 0 < n2 < n1
T(n-n1,p/2) = T(n3,p/4) + T(n-n1-n3,p/4) + O(n-n1)   ; 0 < n3 < n-n1
-->
T(n,p) = T(n2,p/4) + T(n1-n2,p/4) + O(n1) + T(n3,p/4) + T(n-n1-n3,p/4) + O(n-n1) + O(n)
T(n,p) = T(n2,p/4) + T(n1-n2,p/4) + T(n3,p/4) + T(n-n1-n3,p/4) + 2*O(n)
Cela commence à faire bcp de paramètres, essayons de voir vers quoi nous allons
Après (log p) étapes, nous aurons  
T(n,p) = S + O(n*log p)
où S est une somme de p termes de la forme T(n_i, 1) (avec n_i qui varie)
T(n_i, 1) = O(n_i).
Essayons donc de majorer cette somme...
Cela n'est pas bien compliqué... Vu que l'on divise chaque fois la matrice en sous-matrices distinctes, la somme de tous les n_i sera toujours égale à n...
Par exemple, dans le développement ci-dessus: n2 + n1-n2 + n3 + n-n1-n3 = n
Donc T(n,p) = O(n) + O(n*log p) = O(n*log p)
 
Ouf
Nous y voilà. La borne supérieure est égale à la borne inférieur donc  T(n,p) = O(n*log p) dans le cas général.
C'est peut-être pas très rigoureux, mais si qq'un voit une faute dans le raisonnement, je serais intéressé de la connaître.


Message édité par dividee le 22-08-2005 à 00:28:15

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  complexite d un algorythm ?

 

Sujets relatifs
Structures de données et complexitécomplexite algo, question simple
[C++] STL et complexité[Complexité] Cout d'un calcul MD5 | Cout de calcul d'une clé RSA
complexité[C] Implémentation de fonctions et calcul de complexité
Théorie de la complexité 
Plus de sujets relatifs à : complexite d un algorythm ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR