gpt4 book ai didi

algorithm - 在集合的分区上最大化 AND 和 XOR 的 bool 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:56 25 4
gpt4 key购买 nike

给定一组不同的正整数 S,我们需要 partition以下列函数最大化的方式设置。设 S1, S2, ... Sn 为分区。 n 至少可以为 2。

F(S1, S2, ..., Sn) = AND(XOR(S1), XOR(S2), ..., XOR(Sn)))其中,AND为按位与运算,XOR为按位异或运算

我们需要打印所有可能的分区。

我尝试了如下所示的指数方法。我正在寻找复杂性较低的解决方案。

这个问题是家庭作业的一部分,所以只提供提示。

from functools import reduce
from collections import defaultdict

def partition(collection):
if len(collection) == 1:
yield [ collection ]
return

first = collection[0]
for smaller in partition(collection[1:]):
# insert `first` in each of the subpartition's subsets
for n, subset in enumerate(smaller):
yield smaller[:n] + [[ first ] + subset] + smaller[n+1:]
# put `first` in its own subset
yield [ [ first ] ] + smaller
# print("END OF THE LOOP")


x = 4
initialAssum = [2, 4, 8, 16]
something = initialAssum

def andxor(xs):
def xorlist(xs):
return reduce(lambda i, j: i ^ j, xs)

tmp = [xorlist(x) for x in xs]

return reduce(lambda i, j: i & j, tmp)

ans = defaultdict(list)
for n, p in enumerate(partition(something), 1):
r = andxor(p)
if len(p) > 1:
ans[r].append(p)

m = max(ans.keys())
for a in ans[m]:
print(a)
#print(a, len(a))
print(f'{m}')

输入:集合本身输出:可能的最大值,然后是产生它的所有分区

输入:

[2, 3, 4]  

输出:

2  
[[4, 2], [3]]
[[2], [4, 3]]

输入:

[2, 4, 6, 8]

输出:

0   
[[2], [4, 8, 16]]
[[2, 4], [8, 16]]
[[4], [2, 8, 16]]
[[2], [4], [8, 16]]
[[2, 4, 8], [16]]
[[4, 8], [2, 16]]
[[2], [4, 8], [16]]
[[2, 8], [4, 16]]
[[8], [2, 4, 16]]
[[2], [8], [4, 16]]
[[2, 4], [8], [16]]
[[4], [2, 8], [16]]
[[4], [8], [2, 16]]
[[2], [4], [8], [16]]

最佳答案

This problem is part of a homework, so only provide the hint.

提示:如果我们从最高到最低分别考虑每个位,当且仅当该位在每个位中出现奇数次时,我们可以认为位 k 被设置在结果中分区的一部分。

关于algorithm - 在集合的分区上最大化 AND 和 XOR 的 bool 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57443351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com