2

我正在寻求有关问题的搜索算法的帮助。问题可以简化为以下。

我们有一个可以采用某些属性的对象——X1、X2 ... XN。N 的数量级为 5000。但是,特定对象采用这些属性的子集,例如 Xi .. Xj(大约 50)。

配置是属性的特定子集。有某些配置,编号为 Z(10 万个)是最佳配置。

输入:

Configuration 1: X1, X2, X3.. Xf
Configuration 2: X4, X6, X7, .. Xz
:
:
Configuration Z: X10, X200… XN

问题:给定一个特定对象,具有属性子集 {Xi…Xj} 的 ALPHA 目标是找到最接近该对象的配置。配置可以是对象 ALPHA 配置的超集。也可能是没有配置具有 ALPHA 的所有属性。最接近的定义为具有最多 ALPHA 数量属性的配置。

我拥有的天真的解决方案基本上执行以下操作

1. Take each configuration
2. Loop through each attribute of ALPHA
3. Keep track of the configuration with maximum number of matches to ALPHA
4. Pop out the configuration maximum matches.

我认为天真的解决方案是正确的,但是它太慢了。有没有一种有效的方法来跨配置进行搜索?如果它非常快,即使是近似启发式也可以。

添加 C++、Java 标记以查看是否有软件可以执行此操作。

谢谢。

4

1 回答 1

4

这是一种更好的非启发式方法。反向存储您的最佳配置。 即将每个属性映射到它出现的配置。 例如(与您的示例无关)

X1 : C1 C4 C5 C99999
X2 : C1 C2
X3 : C1
X4 : C1 C2
...
XN : C100 C200 C300

现在,您创建一个长度数组Z来存储您找到的匹配数。您遍历 ALPHA,并为每个属性遍历关联的配置。对于每个配置,您将一个添加到阵列中的相应位置。

最后,您遍历数组并选择计数最多的配置。如果您愿意,您可以保持一个运行最大值,但只有当您希望进行的比较总数少于 Z(ALPHA 中的元素数乘以相关配置的平均数)时,这才会更有效。

这将找到最佳匹配,并且应该比您的幼稚解决方案快约 50 倍。

于 2013-10-18T02:31:58.220 回答