sách gpt4 ai đã đi

Thuật toán: Làm thế nào để tìm tập hợp con của một tập hợp khi thêm các phần tử mới?

In lại 作者:塔克拉玛干 更新时间:2023-11-03 06:13:38 26 4
mua khóa gpt4 Nike

我有一个子集算法,可以找到给定集合的所有子集。原始集合的问题在于它是一个不断增长的集合,如果向其中添加元素,我需要再次重新计算它的子集。

有没有一种方法可以优化子集算法,该算法可以从最后一个计算点重新计算子集,而不是一次又一次地计算整个事情。

        public static IEnumerable<>> SubSetsOf(IEnumerable source)
{
if (!source.Any())
return Enumerable.Repeat(Enumerable.Empty(), 1);

var element = source.Take(1);

var haveNots = SubSetsOf(source.Skip(1));
var haves = haveNots.Select(set => element.Concat(set));

return haves.Concat(haveNots);
}

private static bool Valid(IEnumerable set)
{
bool flag = false;

foreach (var element in set)
{
var f = element > 0;
if (f == flag)
{
trả về false;
}

flag = f;
}

trả về giá trị đúng;
}

1 Câu trả lời

当然你只需要将相同的算法应用于每个先前生成的元素到额外的集合(只有增长的部分)

Ví dụ:

如果生成的子集是 s1, s2, ... , sn

你的集合从 a1a2a3 增长到 a1a2a3a4a5

你需要迭代子集到额外添加的集合:

for set x in subsets do :
generate(x)
generate(x + a4)
generate(x + a5)

顺便说一句 我看到你添加了动态编程标签,但我认为这不是 dp 问题,因为 dp 主要用于需要最大化/最小化/计算子集的问题,但不是自己生成子集。

关于算法:添加新元素时如何找到集合的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44696864/

26 4 0
Bài viết được đề xuất: algorithm - 用于检测温度波动的合适公式/算法
Bài viết được đề xuất: Python连接图像上的分割轮廓
Bài viết được đề xuất: algorithm - 如何得到一组集合的所有组合?
Bài viết được đề xuất: java - 我如何检查列表是否是最小二进制堆(java)?
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com