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


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




[101]

Простая оценка показывает, что время работы алгоритма Matrix-Chain-Order есть О (га3). В самом деле, число вложенных циклов равно трём, и каждый из индексов /, г и к принимает не более га значений. В упражнении 16.1-3 мы предложим вам показать, что время работы этого алгоритма есть ©(га3). Объём памяти, необходимый для хранения таблиц т и s, есть ©(га2). Тем самым этот алгоритм значительно эффективнее, чем требующий экспоненциального времени перебор всех расстановок.

Шаг 4: построение оптимального решения

Алгоритм Matrix-Chain-Order находит минимальное число умножений, необходимое для перемножения последовательности матриц. Осталось найти расстановку скобок, приводящую к такому числу умножений.

Для этого мы используем таблицу s[l. .га, 1. .га]. В клетке s[i,j] записано место последнего умножения при оптимальной расстановке скобок; другими словами, при оптимальном способе вычисления А\.,п последним идёт умножение А1--8[1)Гг] на 4s[ijra]+i..га-Предшествующие умножения можно найти рекурсивно: значение s[l,s[l,ra]] определяет последнее умножение при нахождении А1--8[1)Гг], a s[s[l, га] + 1, га] определяет последнее умножение при вычислении 4s[ijra]+i..ra- Приведённая ниже рекурсивная процедура вычисляет произведение A4-..j, имея следующие данные: последовательность матриц А = (А\, А2,..., Ап), таблицу s, найденную процедурой Matrix-Chain-Order, а также индексы г и j. Произведение AiA2...An равно Matrix-Chain-Multiply (A, s, 1, га).

Matrix-Chain-Multiply(A, s, i, j)

В примере на рис. 16.1 вызов Matrix-Chain-Multiply(A, s, 1, 6) вычислит произведение шести матриц в соответствии с расстановкой скобок

[Техническое замечание: следует позаботиться, чтобы при передаче массива s в процедуру не происходило копирования.]

1 2 3

4 5

if j > г

then X <- Matrix-Chain-Multiply(A, s, i, s[i, j])

Y <- Matrix-Chain-Multiply(A, s, s[i, j] + 1, j) return Matrix-Multiply(A, Y)

else return A{


Упражнения

16.1-1 Найдите оптимальную расстановку в задаче о перемножении матриц, если р = (5,10, 3,12, 5, 50, 6).

16.1-2 Разработайте алгоритм Print-Optimal-Parens, печатающий оптимальную расстановку скобок. (Таблица s уже вычислена алгоритмом Matrix-Chain-Order.)

16.1-3 Пусть R(i,j) обозначает количество обращений алгоритма Matrix-Chain-Order к элементу m[i,j] таблицы тп с целью вычисления других элементов таблицы [строка 9]. Покажите, что общее количество таких обращений равно

16.1-4 Покажите, что полная расстановка скобок в произведении п множителей использует ровно п-1 пар скобок.

В этом разделе мы укажем два признака, характерных для задач, решаемых методом динамического программирования.

Оптимальность для подзадач

При решении оптимизационной задачи с помощью динамического программирования необходимо сначала описать структуру оптимального решения. Будем говорить, что задача обладает свойством оптимальности для задач (has optimal substructure), если оптимальное решение задачи содержит оптимальные решения её подзадач. Если задача обладает этим свойством, то динамическое программирование может оказаться полезным для её решения (а возможно, применим и жадный алгоритм - см. главу 17).

В разделе 16.1 мы видели, что задача перемножения матриц обладает свойством оптимальности для подзадач: каждая скобка в оптимальном произведении указывает оптимальный способ перемножения входящих в неё матриц. Чтобы убедиться, что задача обладает этим свойством, надо (как в разделе 16.1) показать, что, улучшая решение подзадачи, мы улучшим и решение исходной задачи.

г = 1 j = l

16.2. Когда применимо динамическое программирование


Как только свойство оптимальности для подзадач установлено, обычно становится ясно, с каким именно множеством подзадач будет иметь дело алгоритм. Например, для задачи о перемножении последовательности матриц подзадачами будут задачи о перемножении кусков этой последовательности.

Перекрывающиеся подзадачи

Второй свойство задач, необходимое для использования динамического программирования, - малость множества подзадач. Благодаря этому при рекурсивном решении задачи мы всё время выходим на одни и те же подзадачи. В таком случае говорят, что у оптимизационной задачи имеются перекрывающиеся подзадачи (overlapping subproblems). В типичных случаях количество подзадач полиномиально зависит от размера исходных данных.

В задачах, решаемых методом «разделяй и властвуй», так не бывает: для них рекурсивный алгоритм, как правило, на каждом шаге порождает совершенно новые подзадачи. Алгоритмы, основанные на динамическом программировании, используют перекрытие подзадач следующим образом: каждая из подзадач решается только один раз, и ответ заносится в специальную таблицу; когда эта же подзадача встречается снова, программа не тратит время на её решение, а берёт готовый ответ из таблицы.

Вернёмся для примера к задаче о перемножении последовательности матриц. Из рисунка 16.1 видно, что решение каждой из подзадач, записанное в данной клеточке таблицы, многократно используется процедурой Matrix-Chain-Order при решении подзадач из расположенных выше клеточек. Например, га [3,4] используется четырежды: при вычислении га[2,4], га[1,4], га[3, 5] и га[3,6]. Было бы крайне неэффективно вычислять га[3,4] всякий раз заново. В самом деле, рассмотрим следующий (неэффективный) рекурсивный алгоритм, основанный непосредственно на соотношениях (16.2) и вычисляющий m[i,j] - минимальное количество умножений, необходимое для вычисления A4-..j = AiAi+i .. .Aj:

Recursive-Matrix-Chain(p, i,j)

1i£i = j

2then return 0

3m[i,j] <- oo

4for k <- i to j - 1

5do g f- Recursive-Matrix-Chain(p, i, k) +

+ Recursive-Matrix-Chain(p, k + + pi ipkPj

6if q < m[i, j]

7then m[i,j] <- q

8return m[i,j]



[стр.Начало] [стр.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]