0

我有一个问题,我有几个离散的 ID 列表,例如。

列表 (A) 1,2,3,4,5,7,8
列表 (B) 2,3,4,5
列表 (C) 4,2,8,9,1
等...

然后我有另一个 ID 集合...
例如:1,2,4

我需要尝试将一个匹配到每个列表中。如果我可以完美匹配辅助集合中的所有 ID(一个集合 ID 与每个列表中的一个 ID 匹配),那么我会得到一个真实的结果......

我发现它变得复杂,因为如果您只是遍历与遇到的第一个集合/列表对匹配的列表,它可能会导致您排除可能的组合,从而返回错误的否定结果。

例如:

列表 (A) 1,2,3,4
列表 (B) 1,2,3,4
列表 (C) 3,4

收藏为:3,1,2

集合 (3) 中的第一个 ID 与列表 A 中的条目匹配,集合中的第二个 ID (1) 与列表 B 中的项目匹配,但是集合 (2) 中的最终 ID 不匹配列表 C 中的任何条目但是,如果您将集合的顺序重新排列为:2,1,3,则找到匹配项....因此,我正在寻找某种形式的逻辑,以有效地尝试对所有可能的组合进行匹配(?)

为了使其更复杂,ID 实际上是 GUID,因此不能仅按升序排序

我希望我已经很好地描述了这一点,以清楚地说明我正在尝试什么,并且如果运气好的话,有人能够告诉我我需要做的事情非常简单,我错过了一些真正简单的事情!
我被迫在 VB6 中对此进行编码,但任何方法或伪代码都会很棒。它的后端是 SQL 服务器,所以如果使用 TSQL 的解决方案是可能的,这会更好,因为所有的 ID 都已经保存在表中。

提前谢谢了。

4

2 回答 2

0

Jake,是的,列表和集合都包含 GUIDS。我使用纯整数来稍微简化问题。

一旦一个列表被匹配,它就不能被再次搜索,因此我试图解释排序问题。如果您说列表为“匹配”,则不会再尝试匹配该列表。正是这种行为可能导致假阴性。

以各种可能的订单组合“发送”收藏品会起作用,但将是一项艰巨的工作......

我觉得我必须在这里错过一个非常简单的概念或解决方案??!
感谢您迄今为止的帮助。

于 2010-12-02T14:07:06.883 回答
0

我看不到针对集合中的每个 GUID 检查列表中包含的每个 GUID 的方法。您必须记录集合中的每个 GUID 出现在哪些列表中。

要使用您的 Collection (3, 1, 2) 示例,列表 A、B 和 C 中出现 3。您基本上会留下这个数据集。

  • 3(A、B、C)
  • 1 (A, B)
  • 2 (A, B)

将其提炼到此数据集后,您可以确定列表中是否存在任何出现次数为零的 GUID,这将导致否定结果。

我完全不精通算法,但之后我会这样做:从第一组(A、B、C)开始,然后检查它在数据集中进一步出现的次数。在这种情况下,没有发现任何事件。

继续下一个集合(A,B),如果发现该集合的出现次数大于该集合的长度,即多于两次出现,将导致否定。如果出现的次数与长度完全匹配,就像这里的情况一样,集合 (A, B) 可以从任何进一步的考虑中删除。

  • 3 (C)
  • 1 ()
  • 2 ()

我猜你会继续重复这个过程,直到确定否定或所有事件都被排除。这类问题可能有一种公认的算法,但我在这方面的知识有点缺乏。:(

于 2010-12-03T08:16:38.903 回答