Легко доказать, что проблема разбиения сводится к этой задаче в полиномиальное время.
Представьте, что вы хотите разрешить раздел для некоторого массива A, но знаете только, как решить свою проблему. Вам просто нужно удвоить длину массива, заполнив его нулями. Если вы можете решить это с помощью своего алгоритма, то вы решили проблему раздела. Это доказывает, что ваша проблема - NP-hard.
Но вы увидите, что эту проблему нельзя свести к разделу (т.е. она не является NP-полной), если вы не ограничиваете точность своих поплавков , В этом случае один и тот же алгоритм разрешил бы оба.
В общем случае лучшее, что вы можете сделать, это откат.
Сортировка в хронологическом порядке проста, если вы используете метку времени Unix, например, 1547608677790
с использованием метода .orderBy
. Тем не менее, это оставляет вам потенциальную гору запросов для повторения (по одному на каждого друга).
Итак, я думаю, вы хотите переосмыслить схему хранилища данных.
Воспользуйтесь преимуществами облачных функций для триггеров Firebase . Когда пишется новый пост, пусть облачная функция подсчитает, кто все должен его видеть. Каждый пользователь может иметь свойство типа массива, содержащее все unread-posts
, read-posts
и т. Д.
Нечто подобное будет быстрым и наименее затратным.