Список картинок
От: mrhru Россия  
Дата: 24.02.03 08:36
Оценка:
Добрый день и с праздником!

Задачка родилась из практики, но для "Алгоритмов", наверное, не очень подходит.

В Windows есть такая штука, как ImageList (IL) — хранилище для картинок одинакового размера в виде одного большого (длинного) изображения. Одна из "замечательных" особенностей IL — если к нему добавить новую картинку, то (внутри) происходит следующее:
— создаётся копия внутреннего изображения с дополнительным "местом" для новой картинки,
— в это дополнительное место вставляется добавляемое изображение,
— старое изображение удаляется.

IL способен также добавлять изображения из другого IL. Алгорит его действий такой-же, только место выделяется сразу для всех добавляемых картинок.

Если в IL последовательно добавлять картиноки, то общее время работы растет (приблизительно) в арифметической прогрессии.

Попробуем уменьшить трудозатраты добавления картинок. Будем считать, что трудозатраты добавления к списку из N1 картинок другого списка из N2 картинок — пропорциональны N1 + N2. Сами картинки пусть загружаются извне, и затраты на их загрузку учитывать не будем (как общие для всех возможных алгоритмов).

Для начала, примем что составление списка из двух картинок требует 2 единицы времени:
 (1)   (1)     |трудозатраты 
    \ /        |
     2         | = 2


Тогда, при последовательной загрузке 4-х изображений "тупым" способом, потребуется 9 единиц времени:
 (1)   (1)     |трудозатраты 
    \ /        |
     2  (1)    | = 2
      \ /      |
       3  (1)  | = 2 + 3
        \ /    |
         4     | = 2 + 3 + 4 = 9


Если мы предварительно разобъем на две группы по две картинки, то получим:
(1)(1) (1)(1)  |трудозатраты
  \ /   \ /    |
   2     2     | = 4
    \   /      |
     \ /       |
      4        | = 4 + 4 = 8


А теперь вопросы (уже, наверное, понятно какие )
— Составить оптимальный алгоритмы загрузки для произвольного N
— оценить трудозатраты для этого оптимального алгоритма.
Евгений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.