代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

你怎么能确定一个问题表现出“贪婪的选择属性”?

  •  4
  • Aakash Goel  · 技术社区  · 15 年前

    恐怕有一种情况会使 greedy choice property

    对于任何问题,我只能检查小数据集。如果对于大型数据集,属性失败怎么办?

    我们能确定吗?

    1 回复  |  直到 15 年前
        1
  •  5
  •   dmeister    15 年前

    一个可能更理论的方法是证明你的问题有 Matroid 结构。如果你能证明你的问题有这样的结构,有一个贪婪的算法来解决它。

    "Introduction to Algorithms"

    * S is a finite nonemtpy set
    * l is a nonempty family of subsets of S, such that B element of l and 
      A a subset of B than also A is element of l. l is called the independent 
      subsets of S.
    * If A and B are elements of l and A is a smaller cardinality than B, then 
      there is some element x that is in B, but not in A, so that A extended 
      by x is also element of l. That is called exchange property.
    

    通常还有一个权重函数w,它为S中的每个元素x分配一个权重。

    如果可以将函数表示为加权拟阵,那么以下类似Python的伪代码可以解决您的问题:

    GREEDY(M,w):
       (S,l) = M
       a = {}
       sort S into monotonically decreasing order by weight w
       for x in S:
          if A + {x} in l:
             A = A + {x}