用N重写O(N W)

时间:2014-04-14 19:51:52

标签: algorithm dynamic-programming discrete-mathematics

我有这个问题要求只用N来重写子集和问题。

如果没有意识到问题是给定的权重,每个都有成本1,你会在给定最大权重的情况下找到最佳解决方案。

因此O(NW)是空间和时间成本,其中空间将用于2d矩阵和动态编程的使用。这个问题是knapsac问题的一个特例。

我不知道如何处理这个问题,因为我试图考虑它,而我唯一想到的就是找到所有权重的总和,并且只有一般的最坏情况。谢谢

2 个答案:

答案 0 :(得分:1)

如果权重不受限制,因此复杂性必须仅依赖于N,则至少存在O(2 N )方法,即尝试N个元素的所有可能子集并进行计算他们的总和。

答案 1 :(得分:0)

如果你愿意使用指数空间而不是多项式空间,你可以在O(n 2 ^(n / 2))时间和O(2 ^(n / 2))空间中解决问题将n个权重集合成大小大致相等的两个集合A和B,并计算两个集合中所有子集的权重之和,然后散列A中的所有子集和散列W-x中的所有子集x的子集B,如果在哈希表中A的子集和B的子集之间发生冲突,那么您找到了一个总和为W的子集。