在图表中搜索节点图

时间:2016-10-07 15:21:58

标签: algorithm math search graph graph-theory

假设您有一个有向无环图。此图NormalError节点中有两种节点。节点有这样的依赖:

在检查节点之前,如果发生错误,您会在该节点上获得一些概率信息。每个节点告诉你:我不知道我是否是一个错误节点,但如果是下一个节点,我可能是一个错误节点。对于每个边缘,您都有与2个节点相关的条件概率。

  

对于每个(A)--->(B),如果B是错误,则有概率P(A | B)表示A是错误节点的概率。

您只能检查图表中的多个节点N。图表中的节点总数大于N

如果图中有error个节点,您最有可能找到它,那么在此图中查找节点的好算法是什么?

  

非正式问题是这样的:你有一些你想要的产品   检查他们是否被打破。但是为了检查你的消费   钱。你的钱有限。重点在于   如果您发现包装中有破损的产品,您需要进行检查   你买不到,你去其他地方做生意。你最好的方式是什么?   可以花钱来增加找到破碎的可能性   产品,如果有的话?我想你也可以代表   线性规划的问题。可能还有其他一些方法   代表问题,你会如何解决?

1 个答案:

答案 0 :(得分:1)

基于注释说明错误节点将(仅)错误子节点,一个简化将集中在叶节点上:如果任何内部节点是错误节点,那么必须至少有一个叶节点是错误。

如果叶子数量也超过 N ,那么您必须选择要测试的叶子。您希望最大化这些叶子所涵盖的节点总数。即找到一组 N 叶子,它们最大化了这些叶子的祖先数量。

贪婪策略会计算每个叶子的祖先数量,然后选择一个具有最大祖先数量的祖先,并重新计算所有其他叶子的祖先计数。蛮力策略会尝试选择 N 叶子的所有组合。

类似于线性编程的模型每个叶子可能有一个二进制(即{0,1})变量。 0意味着选择它,而1意味着不选择它,所以你有一个等式表明所有这些叶子的总和等于叶子数减去 N 。目标函数是每个内部节点具有一个加数的和。它们中的每一个的术语都是叶子后代的变量的乘积。因此,如果所有叶子都是1,则每个内部节点的值将为1;如果至少有一个叶子为0,则每个内部节点的值为0.最小化这些叶子的总和并最大化覆盖的内部节点的数量。目标显然是高度非线性的,因此它不是线性编程,甚至也不是二进制整数编程。

如果数字 N 与叶子数量相比非常大或非常小,您可以通过假设某种独立性来近似最佳解决方案。如果您可以选择几乎所有叶子,您可以查找那些内部节点最少但不会导致其他叶子的叶子。也许在每个这样的步骤之后从树中移除掉落的部分。如果你可以选择几乎没有叶子,上面的贪婪策略会让你选择那些最大数量的祖先。在这两种情况下,您可能会认为您的个人选择不会过多地相互作用,证明了贪婪的方法。