2013-05-04 65 views
0

我们有一些以某些关键值为特征的元素。考虑到大致相同的元素

我们认为元素按键值的降序排列。因此,如果我们有十个具有关键值4,5,7,10,2,8,9,10,8.5和9的元素,我们按照它们的关键值对元素进行排序,并将具有相同关键值的元素放在一起。

同样,具有相同键值的元素,例如, 10将一起考虑,其次是关键值为9的元素,等等。当考虑一个元素,并且它传递了某个适应度函数时,它将从列表中移除并且不再被考虑。

现在我们放松一些有相同关键值的约束条件,并考虑具有大致相等关键值的元素。所以,当我们以排序顺序说第二个元素在第一个元素的10%以内时,他们应该一起考虑。

因此,现在将具有关键值10,10,9,9的元素一起考虑。并且提供了一个键值为9的元素不会在这里被移除,它将不得不再次被8.5考虑。

我能想到实施上述方案的唯一方法是这样的,

  1. 按降序键值的顺序的元素。
  2. 对于订单中的第一个元素,找到10%作为允许偏差。查找属于此偏差窗口内的元素。所以,我们在这里考虑10,10,9,9。
  3. 如果任何元素通过了适应度函数,则将其从列表中移除。
  4. 形成下一个窗口并重复循环。

这是我的想法得到惊吓的地方。我如何从下一个窗口开始形成开始?如果在第一个窗口中已经考虑了排序值10,10,9,9,8.5,8 ...和10,10,9,9,则下一个窗口应该以9开始并且由9,8组成5。

启动下一个窗口是否是前一个窗口的最后一个值总是足够的?我尝试了一些反例,他们都没有使我的猜想失效。但是,如果两个9都通过适应度函数并从列表中移除,那么哪个值开始下一个窗口呢?下一个可用在排序列表中?

所以,我的问题是,

  1. 是关于与上一个窗口的最后的值(如果它被删除下一个可用的)正确的开始下一窗口的猜想?
  2. 整个过程是否有更好的算法?
+0

为什么下一个窗口以9开头?为什么不是第二个10? – 2013-05-04 04:24:42

+0

这取决于你的真实问题。现在它看起来像XY问题http://www.perlmonks.org/?node_id=542341 – MBo 2013-05-04 04:27:05

+0

你想写一个聚类算法吗?例如http://en.wikipedia.org/wiki/K-means_clustering – 2013-05-04 05:09:12

回答

2

不,从上一个窗口的最后一个值开始窗口可能不太正确。

从最后一个窗口的中点开始尝试;然后动态降低上边缘,当您向下边缘迭代时,为窗口保持适当的“跨度”。


目前还不清楚你所描述的适应度函数&“从列表中移除”是否构成理想的元素,或者拒绝,或者是什么的接受

窗口的理想正确语义可能取决于对整体操作的准确说明/理解 - 而且您的问题非常缺乏。

相关问题