Обновления
Хрущовки
Архитектура Румынии
Венецианское Биеннале
Столица Грац
Дом над водопадом
Защита зданий от атмосферных осадков
Краковские тенденции
Легендарный город Севастополь
Новый Париж Миттерана
Парадоксы Советской архитектуры
Реконструкция города Фрунзе
Реконструкция столицы Узбекистана
Софиевка - природа и искусство
Строительство по американски
Строительтво в Чикаго
Тектоника здания
Австрийская архитектура
Постмодернизм в Польше
Промышленное строительство
Строительство в Японии
Далее
|
Главная -> Вычислительные алгоритмы матрицы постсложений множители 1/2. Таким образом,
1 ol Так как вычисление вектора G является предваряющим алгоритм вычислением, то эту матрицу можно в дальнейшем просто отбросить. Наконец, матрица постсложений имеет вид
1 -1 Описанный алгоритм в матричной форме приведен на рис. 3.9. Порядок выполнения сложений в такой форме алгоритма не ука-зан. Читатель может сам поэкспериментировать с выбором по- i рядка сложений, минимизируя их число; никакой специальной теории выполнения такой минимизации не разработано. Легко выполнить все предсложения с помощью четырех вещественных сложений. Постсложения можно реализовать с помощью следующих восьми вещественных сложений: So = S , % = + Cl + Sj, Cl = Sl - Sj, Sl = Sl + Cj - S2, Ca = Sj -f Sj, S3 = C3 - So -f Sl. Это завершает рассматриваемый пример построения алгоритма Винограда для свертки, но построенный алгоритм можно улучшить. Более общая форма алгоритма Винограда соответствует 10 0 0 0 1 1 2 1-1 1 0-2 О 2 I I 0-1 -1 i О . 1 1 10 0 I 1 1 1 1-1 1 0-1 о 1 о Рис. 3.9. Пример алгоритма Винограда вычисления свертки. выбору многочлена т (х) меньшей степени. Это приводит к неправильному вычислению свертки, но ошибка легко подправляется с помощью нескольких дополнительных вычислений. Согласно алгоритму деления для многочленов можно записать s{x) = Q(x)m(x) + [s(x)]. Мы уже рассмотрели случай deg т (х) > deg s (х), в котором частное Q (х) тождественно равно нулю. Если deg т (х) < deg s (х), то алгоритм Винограда позволяет вычислить s (х) по модулю многочлена т (х). Член Q (х) ш (х) представляет собой погрешность, которую можно вычислить дополнительно и прибавить к результату. Простейшим является случай, когда deg т (х) = = degs(x). Тогда многочлен Q (х) является константой, так как его степень должна быть равной нулю. Если т (х) - приведенный многочлен степени п, то, очевидно, Q (х) = s , где s - коэффициент при х в многочлене s (х). Следовательно, S (х) = s /n (х) + R ( Is (х) 1, и s легко вычисляется как произведение старших коэффициентов многочленов g {х) и d (х). Эту модификацию можно формально включить в основной алгоритм Винограда для вычисления свертки путем замены многочлена т (х) формальным выражением т (х) (х - оо). Утверждение S (х) = S (х) (mod т (х) (х - оо)) представляет собой просто удобное сокращение для данного выше точного утверждения. Вернемся к предыдущему примеру и применим описанную модификацию алгоритма к вычислению свертки S (X) = (gix -f go) (djx 4- dix -Ь do). В качестве модуля выберем теперь многочлен х (х - 1) {х + -Ь 1) (х - оо). Алгоритм будет содержать четыре умножения; 4 Блейхут Р. множителю {х - оо) соответствует произведение gid, а остальные три умножения - это произведения вычетов по модулям х, х - 1 и X -\- [. Сразу видно, что
Коэффициенты многочлена s (x) вычисляются в соответствии с китайской теоремой об остатках: S (X) = а< ) (X) S + aW (х) S, + а<> (х) S, + х (х - 1) (х + 1) S3 = = (-х + 1)So+ (4-х + 4- х) S, + (т - Т ) 5 + Следовательно,
Окончательная формулировка алгоритма приведена на рис. 3.10. Алгоритм содержит четыре умножения и семь сложений при условии, что диагональная матрица вычисляется заранее.
Рнс. 3.10. Другой пример алгоритма Винограда вычисления свертки. 3.4. Построение алгоритмов коротких линейных сверток Рассмотренный в предыдущем разделе метод Винограда построения коротких сверток приводит к хорошим алгоритмам. Однако следует подчеркнуть, что эта конструкция не исчерпывает всех возможных путей построения хороших алгоритмов. Иногда хорошие алгоритмы удается получить с помощью удачной факторизации. Рассмотрим следующие тождества: g di + g,d = (go + gi) (d + d,) - g do - gjdi, g (4 + gA + еЛ = (go + Si) (do + (4) - goo + + ёЛ-еЛ. еЛ + = (gi + gj) (dl + da) - gidi - gjd gA = gA- Этл тождества позволяют вычислить коэффициенты свертки s (х) = = (go + g: + gj- *) (do + di + daX-) с помощью шести умножений и десяти сложений. Этот алгоритм, однако, не может быть построен с помощью китайской теоремы об остатках. Матричная форма записи алгоритма дается равенством 1 0 0 0 0 0 8, 1-1 О I 0 0 - I 1-1 о о - 1 -1 о о I 1 о о о 1 <go + S,) (е. + Si) (Sl + 1 1 О о о I о 0 о 1 1 I о I о I О 1 I Этот алгоритм следует сравнить с наивным алгоритмом, содержащим девять умножений и четыре сложения, и с оптимальным алгоритмом, который вскоре будет построен и содержит пять умножений и 20 сложений. Нельзя сказать, какой из этих алгоритмов лучше. Это зависит от области применения. Позже мы будем строить большие алгоритмы из малых так, что и число умножений, и число сложений большого алгоритма будут в основном зависеть от числа умножений в малом алгоритме. В этой ситуации число сложений малого алгоритма не играет существенной роли. На рис. 3.11 затабулированы характеристики некоторых алгоритмов линейных сверток; на рис. 3.12 приведены некоторые нз них. Оптимальный алгоритм линейной (ЗХЗ)-сЕертки выписан в виде примера на рис. 3.12. Ойтима.чьный по числу умножений алгоритм содержит пять умножений. Он подсказан описанным в разд. 3.8 алгоритмом Кука - Тоома, который также содержит пять умножений. По существу он совпадает с алгоритмом Кука - Тоома и получается выбором многочлена m (х) = X (X - 1) (X -f 1) (х - 2) (X - оо). Так как все множители являются многочленами первой степени, то всего имеется пять умножений. (Если заменить один из множи-4 S (х) = g (*) d (х) degg(x)= L-\ deg d{x) = N -\ Вещественные свертки
Рис. 3.11. Характеристики некоторых алгоритмов вычисления коротких линейных сверток. Линейная свертна 2*Ъ 3 умножеммя, 3 сложения 10 0 -I 1-1 О О I П о1 Линейная свертна 3x3 Ъ умомеммй, 20 сложений О О ~1 -1 3 О 01 Ti Предсложения (j = rfj - rf, Z) = + r, = rfo + h D) =/, + /, + (3 + D, 1 + 2) iigb + 2gi Постсложения io = 5o + So Г, = S + s, 7-; = 5г + Sj Г, = * S4 Г. = r, - So - S, T, = 5, + J, = Г - r, * Sj = -So + -t- Г, - S4 I, = - Г4 - r, 5. = Рис. 3.12. Некоторые алгоритмы вычисления линейных сверток. телей многочленом второй степени, то получим шесть умножений, но меньшее число сложений.) Выходной многочлен дается равенством S {X) = (.+,> (.-2) [g {X) d {х)\ + g2d2X (X - 1) (X + 1) (л- - 2). Остатки определяются матричными уравнениями где с целью сохранения стройности и упорядоченности принятых обозначений G, и D, формально определяются как вычеты по модулю многочлена (х - оо). Таким образом, 5(, = GJ~)k Для = О, 4. Наконец, используя китайскую теорему об остатках, для многочлена s (х) получаем выражение
s(x) = -i-S (x -2x=-x- + 4-5Л- + Зх-2х)-Запись последнего шага -2)--i-S,(x -x -2x) + ~-1 S3 (х- X) + S* (х* - 2х + х + 2х). в матричном виде дается равенством
Постоянные множители можно похоронить в константах диагональной матрицы, переопределяя величины и 0. Для выполнения свертки требуется пять умножений. Матрица предсложений может быть реализована семью сложениями, а матрица постсложений 13 сложениями. Окончательная форма алгоритма показана на рис. 3.12. Хотя алгоритм построен для поля вещественных чисел, он пригоден и в поле комплексных чисел: пять умножений становятся пятью комплексными умножениями, а 20 сложений становятся 20-ю комплексными сложениями.
|