gpt4 book ai didi

algorithm - 伪代码的两个简单部分的等价性

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:29 24 4
gpt4 key购买 nike

我要实现一种算法,我在纸上的想法与教科书中建议的伪代码略有不同。我试图说服自己,当必须分别在下面的两个和一个中实现所有子集的“包含”和生成时,下面伪的 2 个片段将做同样的事情,而时间复杂度的顺序没有任何重大差异。我很难想出能让我信服的严谨的东西。

T 和 A 是有限集 I 的子集集。没有集合或子集是空的,每个集合都有一个名为“计数”的“字段”。

片段一:

For-each t in T do {
A_t = A intersected with the set of all non-empty subsets of t
For-each a in A_t do {
a.count++
}
}

片段二:

For-each a in A do {
a.count = count(a, T)
}

这里的计数定义为

count(a, T) {
c = 0
For-each t in T do {
if (t contains a) {
c++
}
return c
}

最佳答案

这取决于您如何实现子集生成和包含函数。我的猜测是,在大多数情况下,生成所有这些子集是不值得的(因为 aA_t iff aA 并且在 t 的子集中,即 aA_t 中当且仅当 a是在 At 包含 a) 你可以只重写你的第一个片段到

For-each t in T do {
For-each a in A do {
if (t contains a){
a.count++
}
}
}

当你的第二个片段是

For-each a in A do {
For-each t in T do {
if (t contains a){
a.count++
}
}
}

(在这两种情况下,假设对于 A 中的所有 aa.count 初始设置为 0)

关于algorithm - 伪代码的两个简单部分的等价性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5115784/

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