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. 整个过程有没有更好的算法?
4

1 回答 1

2

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

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


目前尚不清楚您描述的适应度函数和“从列表中删除”是否构成对理想元素的接受,或者拒绝,或者什么。

窗口化的理想正确语义可能取决于对整体操作的准确规范/理解——而您的问题在这方面非常缺乏。

于 2013-05-04T04:28:43.267 回答