用什么算法来选择具有良好发生计数但分布值的密钥?

时间:2013-04-19 17:31:09

标签: algorithm distribution

我有2套AB

存在表格元素AB的表格。 唯一需要注意的是,一对(表中的行)可以出现多次。

目标是按照标准定义的顺序订购A的元素:

  1. A中的元素在表格中出现的次数是一个很好的元素。
  2. A中与B中的同一元素配对太多次的元素并不好。
  3. 上述内容当然是定性的,我计划在测试算法时制作正确的量化版本(12影响好元素的概念)。

    您能否建议我应该查看哪些算法和数据结构(如果已存在)?

    编辑:一般来说,如果决定哪个元素在哪个之前,取决于两个几乎不是线性的因素,它是如何编写的?

    就我而言, A中的一个元素几乎完全与B中出现的相同元素配对,是一个非常“较少”的元素。即使它具有巨大的发生次数,它也会出现在其他所有事物之后。

    我不知何故觉得这很混乱,想知道是否有一些资源/研究可以解决这类问题。

1 个答案:

答案 0 :(得分:0)

您可以创建一个基本上是:

的结构
struct
{
    Element  // 'A', for example
    Count    // total number of 'A' elements
    HashMap(Element, count) // A hash map keyed by element ('B', for example),
                            // count is the number of times A is paired with B
    Value   // computed "quality", based on your criteria
}

如果您浏览映射表并构建这些结构的列表,则可以计算每个元素,并为每个元素计算与其他元素配对的次数。

然后,您可以使用您的条件来确定每个元素的值,最后按该值排序。

如何计算价值是一个悬而未决的问题。一个好的起点是将值1 / sqrt(count)相加。下表显示元素A多次与元素B,C和D配对,以及每个配对的结果值:

A  B   1   1/sqrt(1)  = 1/1
A  C   4   1/sqrt(4)  = 1/2
A  D  16   1/sqrt(16) = 1/4

所以A的总得分是1 + 0.5 + 0.25,或1.75

您必须使用公式来满足您的需求。我发现,按计数划分太多了(即A-D会给出1/16)。除以平方根有助于最小化过度活跃的项目,但不会完全折扣它们。