2013-05-04 72 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

不,從上一個窗口的最後一個值開始窗口可能不太正確。

從最後一個窗口的中點開始嘗試;然後動態降低上邊緣,當您向下邊緣迭代時,爲窗口保持適當的「跨度」。


目前還不清楚你所描述的適應度函數&「從列表中移除」是否構成理想的元素,或者拒絕,或者是什麼的接受

窗口的理想正確語義可能取決於對整體操作的準確說明/理解 - 而且您的問題非常缺乏。

相關問題