伪代码的2个简单部分的等价

时间:2011-02-25 09:52:23

标签: algorithm pseudocode

我要实现一种算法,其中我在纸上认为的方式与我们的教科书中建议的伪代码略有不同。我试图说服自己,下面的两个和一个分别实现'包含'和生成所有子集时,下面伪的2个片段将做同样的事情而没有时间复杂度的任何重大差异。我无法想出能说服我的严谨的事情。

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

Snippet One:

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++
  }
}

Snippet Two:

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
}

1 个答案:

答案 0 :(得分:1)

这取决于您如何实现子集生成和包含功能。我的猜测是,在大多数情况下,生成所有这些子集并不值得(a A_t if a位于A和子集中t aA_t a A位于ta包含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

而你的第二个片段是

A

(在两种情况下,假设a.count中的所有{{1}},{{1}}最初设置为0)