贪心问题,套路深,技巧强。不过有一类可以尝试化为拟阵来解决。
拟阵matroid,广义拟阵greedoid
拟阵上的贪心算法。
Greedy(M,w):
A={}
sort M.S 单减 order by weight w
for x in M.S:
if A+{x} in M.T:
A=A+{x}
return A
步骤:
1 找出问题对应的拟阵及权重函数;(如果找不到那就换思路)
2 用上述算法求解。
对于更普遍的广义拟阵等见下面文献。
拟阵,广义拟阵,可行系统区别:
遗传性要求如果某集合X在集族S中,那么X的所有子集均在S中。
交换性要求任何一个集族中的集合X均可扩充为极大独立集。
可行性要求任何一个集族中的集合X存在一条从空集到达自己的路径(每次扩长度1):{x0},{x0,x1},...,{x0,x1,...}=X。
https://en.wikipedia.org/wiki/Greedoid#Examples
https://parasol.tamu.edu/~welch/teaching/411.f08/greedy.pdf