Пример использования алгоритма
Проиллюстрируем работу алгоритма L-Shaped метода на простом примере:
|
1 |
2 |
4 |
|
1/3 |
1/3 |
1/3 |
Поставленная в примере задача была искусственно развёрнута в предположении, что
,
.
Тем самым видно, что эта задача сводится к нахождению минимума функции одной переменной. Точное решение задачи можно получить, построив график этой функции.
Теперь становится ясным, что получаемые в ходе применения алгоритма ограничения на самом деле совпадают со звеньями ломанных, на пересечении которых лежит оптимальное решение.
Практическая ценность l-Shaped метода
Основными показателями работающей программы (алгоритма) являются:
Скорость работы (вычисления) - v
Затраты памяти - m
Как известно эти два показателя находятся в обратной зависимости (v~1/m). Из которого можно найти оптимальное для каждой задачи соотношение v к m. В некоторых типах задач вопрос об экономии памяти, при решении задачи напрямую, становится существенным, настолько, что мы не укладываемся по ресурсам «железа». Как раз в таких случаях приходится применять специальные методы и алгоритмы, которые в ущерб скорости помогут нам сэкономить на памяти. Как известно большие объемы памяти требуют задачи большой размерности. Матрица размерностью nxm, где элементы матрицы вещественные числа будет занимать в памяти машины n*m*sizeof(элемент матрицы), где sizeof(.) – число байт занимаемое элементом матрицы.
Например: В языке C# тип sizeof(double) равен 8 байтам, это означает, что матрица 1000х1000 будет занимать 8 мегабайт. А вот матрица 10000x10000 (800 Мб) уже может вызвать затруднение в выделении памяти на персональной машине.
Конечно, можно заметить, что эти матрицы будут содержать много нулей (разреженные матрицы) и применить методы хранения разреженных матриц, но этот метод не только сэкономит нам много памяти, но и резко снизит скорость выполнения операций над матрицами. Причина тому – экзотический доступ к элементам матрицы, что вызывает дополнительные вычислительные расходы. Даже прямой доступ к ячейке памяти по адресу довольно медленная операция (например, доступ к элементу массива array[i]). Можно дальше продолжить оптимизацию по скорости, а именно, специфическим образом выравнивать матрицу в памяти и обходить ее элементы так, чтобы эффективно задействовать конвейерную архитектуру процессора и шины, а так же кэш процессора. Это так называемая оптимизация под определенную платформу.
L-Shaped метод специально создан для таких целей. Он позволяет решать нам задачи высокой размерности, которые решением напрямую не решались, из-за ограничения по «железу». Вся суть этого метода состоит в том, что он решает огромное количество задач малой размерности. Если проанализировать работу L-shaped метода, то можно заметить, что на малой размерности и при увеличении размерности L-Shaped метод будет проигрывать прямому методу, но на большой размерности прямой метод не сможет продолжить исполнение, в то время как L-Shaped метод будет успешно справляться с задачей.