我正在尝试为应用程序提出加权算法。在应用程序中,不同元素的可用空间有限。一旦所有空间都被占用,算法应该选择要删除的最佳元素,以便为新元素腾出空间。
有不同的属性会影响这个决定。例如:
- T:自上次访问以来的时间。(最好更换一段时间未访问的东西。)
- N:访问次数。(最好更换没有多次访问的东西。)
- R:为新元素腾出空间而需要移除的元素数量。(最好替换最少数量的元素。理想情况下,这还应该考虑到每个被替换元素的 T 和 N 属性。)
我有两个问题:
- 计算出给这些属性中的每一个赋予多少权重。
- 弄清楚如何计算元素的权重。
(1)我意识到为这样的事情提出权重是非常主观的,但我希望有一种标准方法或其他东西可以帮助我决定赋予每个属性多少权重。例如,我在想一种方法可能是提出一组两个样本元素,然后手动比较两者并决定最终应该选择哪一个。这是一个例子:
元素 A:N = 5,T = 2 小时前。
元素 B:N = 4,T = 10 分钟前。
在这个例子中,我可能希望 A 成为被选择替换的元素,因为虽然它被访问了一次,但与 B 相比,它已经很长时间没有被访问了。这种方法似乎需要很多时间,并且会涉及做出很多艰难的、主观的决定。此外,最后得出最终的权重可能并非易事。
我想出的另一种方法是任意选择不同属性的权重,然后使用该应用程序一段时间。如果我发现算法有任何明显错误,我可以进入并稍微修改权重。这基本上是一种“猜测和检查”的方法。
这两种方法似乎都不是很好,我希望有更好的解决方案。
(2) 一旦我计算出重量,我不确定哪种方法最适合计算重量。我应该添加所有内容吗?(在这些示例中,我假设具有最高元素的元素replacementWeight
应该是要被替换的元素。)
replacementWeight = .4*T - .1*N - 2*R
或乘以一切?
replacementWeight = (T) * (.5*N) * (.1*R)
不使用常量作为权重怎么办?例如,确定“时间”(T) 可能很重要,但是一旦经过了特定的时间量,它就不会产生太大的影响。本质上,我会将所有内容归为“已经过去了很多时间”的垃圾箱。(例如,即使 8 小时和 7 小时两者之间有一个小时的差异,这种差异可能不如 1 分钟和 5 分钟之间的差异那么显着,因为这两个时间要近得多。)(或另一个示例:替换 (R ) 1 或 2 个元素很好,但是当我开始需要替换 5 或 6 个时,这应该被严重加权......因此它不应该是线性的。)
replacementWeight = 1/T + sqrt(N) - R*R
显然(1)和(2)是密切相关的,这就是为什么我希望有更好的方法来提出这种算法。