Я пишу немного кода JavaScript, который должен выбирать случайный элемент на холсте, если элемент соответствует определенным требованиям. Существуют различные виды предметов (круги, треугольники, квадраты и т. Д.), И, как правило, не одинаковое количество предметов для каждого вида. Элементы расположены в иерархии (поэтому квадрат может содержать несколько кругов, а круг может содержать другие круги и т. Д. - все они могут быть вложенными).
Прямо сейчас мой (примитивный) подход к выбору случайного элемента заключается в следующем:
- Рекурсивно пересеките холст и создайте (возможно, огромный!) Список предметов
- Перемешать список
- Повторяйте перетасованный список спереди, пока я не найду предмет, отвечающий некоторым дополнительным требованиям.
Проблема в том, что он плохо масштабируется. Я часто сталкиваюсь с проблемами памяти, потому что либо глубина рекурсии слишком велика, либо общий список элементов становится слишком большим.
Я собирался переписать этот код, чтобы выбрать элементы при прохождении холста, но я не знаю, как я мог бы «случайным образом» выбрать элемент, если не знаю, сколько всего элементов .
Кто-нибудь знает, как решить эту проблему?