将1-1项与rust中的部分信息匹配



我在编写程序时遇到了以下情况,我不确定解决它的最佳方法是什么,可能有一些最适合它的算法,但我不确定它的正确术语是什么

我有三个列表:

  1. 单个用户的详细信息的无序列表。
  2. 用户无序列表
  3. "提示"列表用于将用户与其信息匹配,其正确性各不相同

我知道列表中的每个信息项都属于一个用户,并且用户和信息项的数量相等。

"hints"可以用"用户B在其信息项索引52处的数字= 8"或"用户C在其信息项索引12处的数字= 6"的形式来描述。

关键是,对于任何给定的信息项,我可以检查它是否满足该用户的提示,或者不满足用户的提示。当然,一个提示对于多个项目可以为真,并且一个项目不能属于多个用户。

注意提示的数量是很重要的我未必足以匹配每个用户一个项目,但我想缩小它尽可能多的信息,我有可能得到结果描述,例如,第五项属于,要么6项属于B, C,第五项属于e和f,但项目6肯定属于C如果第五项属于f。

我也不相信所有的提示都是平等的。我有一些提示,几乎肯定是真的,我希望这些被认为不能自相矛盾,如果他们确实与所提供的信息项列表相矛盾或创建一个不可能的情况,那就发现了错误。我也有一些暗示,我不太相信,这些可能会相互矛盾,如果是这样,信任的人被优先考虑,而这些不太信任的人只被用作最后的手段,建议进一步缩小可能性的方法,甚至只在最后。

我在我的程序中使用rust和petgraph,直到我在这一点上,我认为有一种方法,你应该为它创建一个图,并使用一些算法来解决这个问题。

您可以将其设置为二部图,使用边权重来反映您的信息,然后找到最大匹配。

有两组节点:一组用于用户,另一组用于信息。用户和信息节点之间有加权边,边的权重代表我们对连接的置信度。

我假设对于每一个提示,你都有一个介于0到1之间的置信度分数,代表你认为该提示是真实的可能性。

下面是如何将提示转换为边权重:假设我们有3个提示(用户,信息)对:h1, h2, h3,置信度评分c1, c2, c3。然后user和info之间的边得到1 - ((1 - c1) * (1 - c2) * (1 - c3))。

。,假设我们的信心得分是0.9、0.3、0.2。则边权变为1 -((1 - 0.9)*(1 - 0.3)*(1 - 0.2))= 1 - 0.1 * 0.7 * 0.8 = 0.944。

将没有提示的(user, info)对保留为没有边。

然后,求二部图的最大权匹配。(例如,https://www.geeksforgeeks.org/maximum-bipartite-matching/)。这将最大限度地提高你对以上分数的信心。

最后,我们留下了(user, info)对,没有提示,你可以随意配对。

最新更新