Для равномерного случая все просто, вы все правильно сделали. Для неравномерного — сложно построить адекватную сетку, эпично сложно будет делать <сферический цикл> (поиск в ширину; волновой поиск).
Я свято верю, что у нас обоих нет времени это проверять, попрошу лиз дать ссылку на алгоритм/конкретную реализацию или просто описать конкретный способ. Это я к тому, что в вашем случаее (насколько я понял) нужно будет выделять доп. память для этого одного прохода, что более критично по скорости чем вытаскивать строки (если мы говорит про интерпретируемые языки).
Ну зато это ровно 1 запрос к БД (у меня в него-же получалось вписать и рейтинги, без вложенных select-oв), и на стороне сервера (который скорей всего не нативный) почти ничего не нужно создавать. В общем, я не понимаю, почему минусуют. Алгоритм проверен годами. Может описал не подробно? Или не на тот вопрос ответил?
А еще этот вариант расчитан на то, что просмотры — более частая операция чем добавление комментов; соответственно будет работать быстрее. Скорость будет хорошей даже без кэша. А построение дерева по набору id, pos — сложная операция.
Таблица факторов
id type info
1 "[0..9]" «Влияние некой случайно величины»
2 «float» «Влияние скорости вета»
3 «bool» «Влияние алкоголя»
//id, тип для JS (чтобы описывать функции которые возвращают значение типов которые предпологались при создании контента), описание (на всякий случай)
Таблица предметов:
id……………… special
1 [«1»:«0.3»:«power»]
2 [«1»:«0.4»:«power»;«3»:"-2":«speed»]
//special хронит набор строк [«x»:«y»:«z»] каждая из которых указывает, что на параметр Z влияет фактор Х c коэффициентом Y.
Этот алгоритм менее эффективен че те, что я предоставил, и они работают в любых условиях. У них проблемы со скоростью, у вами предоставленного — еще больше проблем со скоростью.
Ну тогда можно про isLeftRed… забыть, и давать указатели на красные грани, которые связаны с ячейкой, или действительно список возможных переходов (а еще лучше хранить только те ячейки к которым можно пройти)
P. S. дал эту задачу на собеседовании и забыл уточнить, что интересует решение для задачи, когда и красные и черные точки распределены в пространсте равномерно (в этом случае все очень просто), а теперь вот и сам не знаю, что с этой задачей делать?