2

我有 2 套AB.

存在一个将元素映射A到的表B。唯一需要注意的是一对(表中的行)可以出现不止一次。

A目标是按照条件定义的顺序对元素进行排序:

  1. A表中出现次数较多的元素是一个很好的元素。
  2. 与相同元素多次A配对的元素不好。B

以上当然是定性的,我计划在测试算法时制作一个正确的定量版本(通过多少12影响一个好元素的概念)。

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

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

在我的例子中,一个元素A几乎与B它出现的任何地方的相同元素完全配对,是一个非常“少”的元素。即使它的出现次数很多,它也会出现在其他所有事情之后。

我不知何故觉得这很令人困惑,并想知道是否有一些资源/研究可以处理这类事情。

4

1 回答 1

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

您必须使用公式来满足您的需求。我发现,除以计数太受欢迎了(即 AD 会给出 1/16)。除以平方根有助于最大限度地减少过度活跃的项目,但不能完全打折。

于 2013-04-19T19:13:20.797 回答