Третье наименьшее число в матрицах и его сложение - PullRequest
0 голосов
/ 16 мая 2010

Как я могу добавить одну + одну матрицу (структура данных массива) и после нее найти третье наименьшее число в нем на языке C (не C ++)? Спасибо за код.

Ответы [ 3 ]

0 голосов
/ 16 мая 2010

Если вы пытаетесь получить доступ к инструкциям SIMD, я не верю, что есть подход, который будет делать оба одновременно. Если вы не пытаетесь использовать SIMD, просто сохраните временный массив из трех наименьших значений (например, очереди приоритетов), который обновляется каждый раз, когда в матрице вычисляется сумма.

Если бы это был C ++, очередь с приоритетами могла бы храниться в объекте функтора, используемом алгоритмами STL.

0 голосов
/ 16 мая 2010

Пример кода следующий:

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];
}

РЕДАКТИРОВАТЬ: изменение типа и размера матрицы будет вашей работой.

0 голосов
/ 16 мая 2010
  • Сначала решите, как представить матрицу (подсказка: используйте массив массивов)
  • Тогда выясните, как добавить две матрицы - это просто
  • Тогда, как вы находите 3-й самый маленький элемент в последовательности? Есть много способов! Эффективность особенно важна для вас? Какая алгоритмическая сложность требуется?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...