Например, есть двухмерный массив:
[ ] [ ] [ ] [x] [ ]
[ ] [x] [x] [x] [ ]
[ ] [x] [x] [ ] [ ]
[ ] [ ] [x] [ ] [ ]
[ ] [ ] [x] [ ] [ ]
,
в котором [x] обозначает 1 закрашенную ячейку, а элементов [] не существует. Этот список coords всегда выглядит как непрерывающаяся кривая. Задачей является
постоянный рендер всех этих пикселей(т.к. список всегда обновляется, а надо всегда обновлять то, что показывается на экране), которую легко можно реализовать списком
for x in coods:
. Но что, если наше пространство в 4 раза больше, закрашенных ячеек тоже больше, а мы запускаем данный рендер на очень медленном оборудовании? В результате чем больше наш список coords, тем больше требуется времени на то, чтобы отрисовать все эти ячейки.
Но мы знаем, что каждая ячейка отрисовывается, например, функцией
newRect(x, y, width, height)
, которая отрисовывает прямоугольник. Значит, зная, что у нас кривая линия никогда не прерывается, как змея, а иногда и могут случаться моменты, когда координаты могут создавать группу из прямоугольников или даже квадратов, наверняка возможно разделить эти координаты на группу из прямоугольников,которые, оптимизировав, можно будет также отрисовать через тот же цикл for. Но отличие при этом будет в том, что элементов в новом списке будет гораздо меньше, что улучшит производительность.
И вот главный вопрос: возможно ли реализовать такой алгоритм, который будет тратить меньше времени, чем простейший цикл for? А если и возможно, то как это можно реализовать в Python?