使用变量条目/参数生成列表

时间:2010-07-15 10:35:55

标签: c# algorithm

这个问题类似于我以前问过的Question

假设一个库。

图书馆有很多书(比如B(1到n))。 (n =书籍数量)

每本书都可以有很多章节(比如说C(1到k))。 (k =章节数)

每章都可以有多个课程(比如L(1到j))..(j =课程数)

每个课程都可以有多个主题(比如说T(1到i))..(i =主题数量) ... ...

现在假设我想要创建一个列表,使其具有“所有”条目,如

Book 1 Chapter 1 Lesson 1 Topic 1 ...    

Book 1 Chapter 1 Lesson 1 Topic 2 ...  

Book 1 Chapter 1 Lesson 1 Topic 3 ...  

Book 2 Chapter 1 Lesson 1 Topic 1 ...

Book 2 Chapter 1 Lesson 1 Topic 2 ...

Book 2 Chapter 1 Lesson 1 Topic 3 ...

Book 2 Chapter 1 Lesson 1 Topic 4 ...

Book 2 Chapter 2 Lesson 1 Topic 1 ...

Book 2 Chapter 2 Lesson 1 Topic 2 ...

Book 2 Chapter 2 Lesson 1 Topic 3 ...
.....

Book (x1) Chapter (x2) Lesson (x3) Topic (x4) ... 


  where  1 <= x1 <= n, 1 <= x2 <= k, 1<= x3 <= j, 1< = x4 < = i

(上面的示例显示了“第1册”,第1章第1课第3课主题 和“第2册”,第2章有“第1课”,第4章有4个主题 和“第1课”和第2章中的3个主题。 ) 如何有效地生成此列表?

此外,条目“Book(x1)Chapter(x2)Lesson(x3)Topic(x4)”并不仅限于主题 (4个变量) 它也可以变化。成长或缩小。
例如:主题可以有问题,问题可以有子问题。 (根据用户选择。)

注意:这纯粹是学术性的

这个问题属于NP类问题吗?

任何编程语言..算法:)

全部谢谢

2 个答案:

答案 0 :(得分:1)

这是一种非常常见的情况,由Relational Db模型和例如XML解决。

数据结构不能是NP问题,但是应用于您的库的算法可能是。

如果你使级别数变量,则需要一些元编程。

答案 1 :(得分:1)

  

这个问题是否属于NP类问题?

不,但生成所有组合在段系统的深度(书章等)中具有指数时间复杂度。

如果您有办法确定当前结构(例如章节)是否应该有孩子,您可以执行以下操作:

// The int value is the number of children
Tuple<string, int> GetChildStructure(string parentStructure) {
    if(parentStructure == "Library") return new Tuple<string, int>("Book", 3);
    if(parentStructure == "Book") return new Tuple<string, int>("Chapter", 2);
    // ...
    // You can get these from a config file/DB/etc
    return null;
}

void BuildStructure(Structure parent) {
   var childStruct = GetChildStructure(parent.StructName);
   if(childStruct != null) {
      for(int i=1; i <= childStruct.Item2; i++) {
         Structure child = new Structure(childStruct.Item1,  i);
         BuildStructure(child);
      }
   }
}

void Main() {
    var lib = new Structure("Library", 1);
    BuildStructure(lib);
}

您还应该检查this post