?

Log in

"Идеальный" алгоритм объединения ячеек - Забавные задачки [entries|archive|friends|userinfo]
Забавные задачки

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

"Идеальный" алгоритм объединения ячеек [Aug. 27th, 2008|11:00 pm]
Забавные задачки

brain_survey

[_kolya_]
[Tags|, ]

Как-то начали появляться у нас с Игорем свои любимые темы:)
У меня жизненная задачка на разработку алгоритма. Разработанная мною версия имеет ряд недостатков, и мне интересно, можно ли придумать что-то лучше:) Но... мое решение потом, а сейчас условие:

Преамбула к условию, то есть, собственно, откуда задачка.
В Excel'е есть проблема: обращение через VSTO .NET обертку к нему довольно медленно и, если надо изменить свойство отдельных ячеек таблицы, то изменение этого свойства для каждой ячейки в отдельности работает оооооочееееень медленно (изменение свойства выливается в 2 строки: запросить объект Range для конкретной координаты, и изменить заданное свойство у полученного объекта). Но Range - это может быть прямоугольник, а не только 1 ячейка. Таким образом, делается логичная оптимизация: выявляется сначала набор прямоугольников, подлежащих изменению, запрашивается для них Range, а потом меняется нужное свойство. Но заморачиваться в каждом отдельном случае очень не хочется!

Таким образом, появляется задача:
Реализовать класс, собирающий произвольный набор ячеек в группы. То есть, он должен реализовывать 4 операции, вызываемых по следующему сценарию:
StartCollectionCells() - начала массовой операции
AddCell(x, y) - пометить отдельную ячейку, как подлежащую массовой операции
FinishCollectingCells() - произвести над группами ячеек нужную операцию

4 операция опциональна - это RemoveCell(x, y), без нее иногда неудобно.

Интересны требования алгоритма по памяти и сложность каждого из 4 методов.

PS: фактически изначально всегда известно, сколько колонок в таблице, но количество рядов - не всегда.
LinkReply