Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[99]

приходится получать и хранить дополнительную информацию в процессе выполнения шага 3.

В этой главе мы решим несколько оптимизационных задач с помощью динамического программирования. В разделе 16.1 мы выясним, как найти произведение нескольких матриц, сделав как можно меньше умножений. В разделе 16.2 мы обсудим, какие свойства задачи делают возможным применение динамического программирования. После этого мы расскажем (в разделе 16.3), как найти наибольшую общую подпоследовательность двух последовательностей. Наконец, в разделе 16.4 мы воспользуемся динамическим программированием для нахождения оптимальной триангуляции выпуклого многоугольника. (Удивительным образом эта задача оказывается похожей на задачу о перемножении нескольких матриц.)

16.1. Перемножение нескольких матриц

Мы хотим найти произведение

АгА2...Ап(16.1)

последовательности п матриц (А\, А2,..., Ап). Мы будем пользоваться стандартным алгоритмом перемножения двух матриц в качестве подпрограммы. Но прежде надо расставить скобки в (16.1), чтобы указать порядок умножений. Будем говорить, что в произведении матриц полностью расставлены скобки (product is fully parenthesized), если это произведение либо состоит из одной-единственной матрицы, либо является заключенным в скобки произведением двух произведений с полностью расставленными скобками. Поскольку умножение матриц ассоциативно, конечный результат вычислений не зависит от расстановки скобок. Например, в произведении А1А2А3А4 можно полностью расставить скобки пятью разными способами:

(А1(А2(А3А4))); (А1((А2А3)А4)); ((А1А2)(А3А4)); (((АзАз))); (((А1А2)А3)АЛ;

во всех случаях ответ будет один и тот же.

Не влияя на ответ, способ расстановки скобок может сильно повлиять на стоимость перемножения матриц. Посмотрим сначала, сколько операций требует перемножение двух матриц. Вот стандартный алгоритм (rows и columns обозначают количество строк и столбцов матрицы соответственно):


Matrix-Multiply (А, В) 1 if columns[A] ф rows[B]

2then error «умножить нельзя»

3else for г <- 1 to rows[A]

4do for j <- 1 to columns[B]

5do C[i,j] <- 0

6for k <- 1 to со/итпв[А]

7do C[i,j]C[i,j] + ,fc]-£[M

8return С

Матрицы A п В можно перемножать, только если число столбцов у А равно числу строк у В. Если А - это р X g-матрица, а В - это q X r-матрица, то их произведение С является р X r-матрицей. При выполнении этого алгоритма делается pqr умножений (строка 7) и примерно столько же сложений. Для простоты мы будем учитывать только умножения. [В главе 31 приведён алгоритм Штрассена, требующий меньшего числа умножений. В этой главе мы принимаем как данность простейший способ умножения матриц и ищем оптимум за счёт расстановки скобок.]

Чтобы увидеть, как расстановка скобок может влиять на стоимость, рассмотрим последовательность из трех матриц (А\, А2, Аз) размеров 10 X 100, 100 X 5 и 5 X 50 соответственно. При вычислении ((А\А2)Аз) нужно 10 • 100 • 5 = 5000 умножений, чтобы найти 10 X 5-матрицу А\А2, а затем 10-5-50 = 2500 умножений, чтобы умножить эту матрицу на A3. Всего 7500 умножений. При расстановке скобок (Ai(A2A3)) мы делаем 100 X 5 X 50 = 25 000 умножений для нахождения 100 X 50-матрицы А2А3, плюс ещё 10 X 100 X 50 = 50 000 умножений (умножение А\ на А2А3), итого 75 000 умножений. Тем самым, первый способ расстановки скобок в 10 раз выгоднее.

Задача об умножении последовательности матриц (matrix-chain multiplication problem) может быть сформулирована следующим образом: дана последовательность из п матриц (А\, А2,..., Ап) заданных размеров (матрица Аг- имеет размер Pi-\ X рг); требуется найти такую (полную) расстановку скобок в произведении AiA2...An, чтобы вычисление произведения требовало наименьшего числа умножений.

Количество расстановок скобок

Прежде чем применять динамическое программирование к задаче об умножении последовательности матриц, стоит убедиться, что простой перебор всех возможных расстановок скобок не даст эффективного алгоритма. Обозначим символом Р(п) количество полных расстановок скобок в произведении п матриц. Последнее


умножение может происходить на границе между k-ъ и (к + 1)-й матрицами. До этого мы отдельно вычисляем произведение первых к и остальных п - к матриц. Поэтому

1,если га = 1,

п-1

2~2 Р(к)Р(п - к), если га 2. к=1

В задаче 13-4 мы просили вас доказать, что это соотношение задаёт последовательность чисел Каталана

Р(п) =С{п- 1),

где

С(га) = тС2\ = 0(47га3/2).

Стало быть, число решений экспоненциально зависит от га, так что полный перебор неэффективен. [Другой способ понять, что число вариантов экспоненциально: разобьём матрицы на группы по три; произведение для каждой группы можно вычислить двумя способами, так что для Зга матриц есть не менее 2п вариантов.]

Шаг 1: строение оптимальной расстановки скобок

Если мы собираемся воспользоваться динамическим программированием, то для начала должны описать строение оптимальных решений. Для задачи об умножении последовательности матриц это выглядит следующим образом. Обозначим для удобства через Aj-..j матрицу, являющуюся произведением AiAi+i .. .Aj. Оптимальная расстановка скобок в произведении А\А2 .. .Ап разрывает последовательность между Ак и Ak+i для некоторого к, удовлетворяющего неравенству 1 к < га. Иными словами, при вычислении произведения, диктуемом этой расстановкой скобок, мы сначала вычисляем произведения А\ к и Ak+i..n, а затем перемножаем их и получаем окончательный ответ Ai..n. Стало быть, стоимость этой оптимальной расстановки равна стоимости вычисления матрицы Ai..jt, плюс стоимость вычисления матрицы Ak+i..n, плюс стоимость перемножения этих двух матриц.

Чем меньше умножений нам потребуется для вычисления А\ к и Ajt+i..n, тем меньше будет общее число умножений. Стало быть, оптимальное решение задачи о перемножении последовательности матриц содержит оптимальные решения задач о перемножении её частей. Как мы увидим в разделе 16.2, это и позволяет применить динамическое программирование.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]