2010-05-16 3 views

Répondre

0

code exemple suivant:

void addMatrix(unsigned int size, double const * const a, double const * const b, double * const res) { 
    int i; 
    for (i = 0; i < size * size; ++i) 
     res[i] = a[i] + b[i]; 
} 

double findThirdSmallest(unsigned int size, double const * const input) { 
    //save the three smallest values inside res 
    double res[3]; 
    int i; 
    for (i = 0; i < 3; ++i) { 
     res[i] = LDBL_MAX; 
    } 
    for (i = 0; i < size * size; ++i) { 
     int j; 
     for (j = 0; j < 3; ++j) { 
      if (input[i] < res[j]) { 
       int k; 
       for (k = 2; k != j; --k) { 
        res[k] = res[k - 1]; 
       } 
       res[j] = input[i]; 
       break; 
      } 
     } 
    } 
    return res[2]; 
} 

EDIT: Modification du type et de la taille de la matrice sera votre travail.

+0

Et si j'ai int mat1 [50] [50], mat2 [50] [50] est vraiment nessaire d'utiliser double et LDBL_MAX? THX – Heigan

0
  • D'abord décider comment représenter la matrice (indice: utiliser un tableau de tableaux)
  • ensuite comprendre comment ajouter deux matrices - est simple
  • Alors, comment trouvez-vous le 3ème plus petit élément dans une séquence? Il y a plusieurs façons! L'efficacité est-elle particulièrement importante pour vous? Quelle complexité algorithmique est requise?
+0

1) Par exemple int mat1 [50] [50], mat2 [50] [50]; 2) Je ne sais pas comment faire l'addition et après trouver le 3ème plus petit élément dans le résultat et l'imprimer - une sorte de cycle etc. – Heigan

+0

Est-ce encore possible? – Heigan

+0

@Heigan: bien sûr que c'est possible. N'avez-vous pas appris comment l'addition de la matrice fonctionne? Sinon, essayez de le trouver en ligne - devrait être très facile. –

0

Si vous essayez d'accéder aux instructions SIMD, je ne crois pas qu'il existe une approche qui fera les deux à la fois. Si vous n'essayez pas d'utiliser SIMD, gardez simplement un tableau temporaire des trois plus petites valeurs (comme une file d'attente prioritaire) qui est mise à jour chaque fois qu'une somme est calculée dans la matrice.

S'il s'agissait de C++, la file d'attente prioritaire pourrait être conservée dans un objet foncteur utilisé par les algorithmes STL.

+0

A propos de votre conseil pour garder une variable temporaire: notez que c'est un peu plus complexe dans son cas puisqu'il cherche le 3ème plus petit objet, pas * le * plus petit article –

+0

Alors quelqu'un sait comment cela peut-il être fait? Thx – Heigan

Questions connexes