Я знаю, что есть довольно много вопросов о создании комбинаций элементов, но я думаю, что у этого есть определенный поворот, чтобы стоить новый вопрос:
Для моего любимого проекта мне нужно предварительно вычислить много состояний, чтобы позже улучшить поведение приложения во время выполнения. Один из шагов, с которыми я борюсь, заключается в следующем:
Учитывая N кортежей из двух целых чисел (давайте теперь будем называть их точками, хотя они не в моем случае использования. Хотя они примерно связаны с X / Y), мне нужно вычислить все действительные комбинации для данного правила.
Правило может быть что-то вроде
- «Каждая включенная точка исключает любую другую точку с такой же координатой X»
- «Каждая включенная точка исключает любую другую точку с нечетной координатой X»
Я надеюсь и ожидаю, что этот факт приведет к улучшению процесса отбора, но мои математические навыки просто восстанавливаются, когда я печатаю, и я не могу придумать элегантный алгоритм.
- Множество точек (N) начинается с малого, но вскоре перерастает 64 (для решений «использовать как битовую маску»)
- Я делаю это в C #, но решения на любом языке должны быть хорошими, если они объясняют основную идею
Спасибо.
Обновление в ответ на ответ Влада:
Может быть, моя идея обобщить вопрос была плохой. Мои правила выше были изобретены на лету и просто заполнителями. Одно реалистичное правило будет выглядеть так:
- «Каждая включенная точка исключает любую другую точку в треугольнике выше выбранной точки»
По этому правилу и выбрав (2,1) я бы исключил
- (2,2) - прямо над
- (1,3) (2,3) (3,3) - следующая строка
- и т. Д.
Так что правила фиксированные, а не общие. К сожалению, они более сложны, чем образцы X / Y, которые я первоначально дал.