У меня есть n элементов в наборе U (допустим, представлен массивом размера n).Я хочу найти все возможные способы разделения множества U на два множества A и B, где | A |+ | B |= n.
Так, например, если U = {a, b, c, d}, комбинации будут:
- A = {a} - B = {b, c, d}
- A = {b} - B = {a, c, d}
- A = {c} - B = {a, b, d}
- A = {d} - B = {a, b, c}
- A = {a, b} - B = {c, d}
- A = {a, c} - B = {b, d}
- A = {a, d} - B = {b, c}
Обратите внимание, чтоследующие два случая считаются равными, и только один должен быть вычислен:
Случай 1: A = {a, b} - B = {c, d}
Случай 2: A = {c, d} - B = {a, b}
Также обратите внимание, что ни один из наборов A или B. не может быть пустым.
Я думаю о том, как реализовать это,просто отслеживая индексы в массиве и перемещая их шаг за шагом.Количество индексов будет равно количеству элементов в наборе A, а набор B будет содержать все оставшиеся неиндексированные элементы.
Мне было интересно, знает ли кто-нибудь о лучшей реализации.Я ищу лучшую эффективность, потому что этот код будет выполняться на довольно большом наборе данных.
Спасибо!