шпоры3 (1079650), страница 2
Текст из файла (страница 2)
Отсюда видно, что второй, третий, пятый, седьмой и восьмой элементы исходного массива не являются нулевыми, а хранящийся во втором элементе IP индекс 1 указывает на то, что элемент а2 хранится в первом элементе массива АN(1), а элемент а7 – во втором элементе массива АN (2),
2. Просматривается массив JB. Если соответствующий элемент массива IP ненулевой, т.е. позиции элементов в векторах a и b совпадают, то вычисляются произведения ai * bi и накапливаем в сумму произведений h до тех пор, пока не будет исчерпан массив JB. В результате
JB(1) = 4, IP(4) = 0 - действий нет;
JB(2) = 3, IP(3) = 3.
Следовательно, третий элемент массива AN не является нулевым, т.е. AN(3) = 1,5, а BN(2) = 1,2. Получаем произведение BN(2) * AN(3) = 1,8 и накапливаем результат в сумму произведений h.
Количество операций в данном алгоритме пропорционально числу ненулевых элементов, не считая засылки N нулей в массив IP.
Применение этого алгоритма особенно эффективно в ситуации, когда вектор нужно скалярно умножить на несколько векторов. В этом случае массив IP заполняется только один раз и затем используется для вычисления всех требуемых скалярных произведений. Эта ситуация возникает при необходимости перемножить разреженную матрицу и разреженный вектор.















