アプリケーションの加重アルゴリズムを考え出そうとしています。アプリケーションでは、さまざまな要素に使用できるスペースが限られています。すべてのスペースが占有されると、アルゴリズムは、新しい要素用のスペースを作成するために、削除するのに最適な要素を選択する必要があります。
この決定に影響を与えるはずのさまざまな属性があります。例えば:
- T:最後にアクセスしてからの時間。(しばらくアクセスされていないものを交換することをお勧めします。)
- N:アクセスされた回数。(何度もアクセスされていないものを交換することをお勧めします。)
- R:新しい要素のためのスペースを作るために削除する必要がある要素の数。(最小限の要素を置き換えるのが最善です。理想的には、これは、置き換えられる各要素のT属性とN属性も考慮に入れる必要があります。)
私には2つの問題があります:
- これらの各属性に与える重みを計算します。
- 要素の重量を計算する方法を理解する。
(1)このような重みを考え出すのは非常に主観的だと思いますが、各属性にどの程度の重みを与えるかを決めるのに役立つ標準的な方法などがあることを期待していました。たとえば、2つのサンプル要素のセットを考え出し、手動で2つを比較して、どちらを最終的に選択するかを決定する方法があるのではないかと考えていました。次に例を示します。
要素A:N = 5、T=2時間前。
要素B:N = 4、T=10分前。
この例では、Aを、もう一度アクセスされたものの、Bと比較して長い時間アクセスされていないため、置き換えられる要素として選択する必要があります。この方法は、時間がかかるようです。多くの時間、そして多くの難しい、主観的な決定をすることを含みます。さらに、最後に結果の重みを考え出すのは簡単ではないかもしれません。
私が思いついたもう1つの方法は、さまざまな属性の重みを任意に選択してから、しばらくの間アプリケーションを使用することでした。アルゴリズムに明らかに問題があることに気付いた場合は、入って重みを少し変更することができます。これは基本的に「推測とチェック」の方法です。
これらの方法はどちらもそれほど素晴らしいとは思えないので、もっと良い解決策があることを願っています。
(2)体重を計算した後、どちらの方法で体重を計算するのが最適かわかりません。すべてを追加するだけでいいですか?replacementWeight
(これらの例では、最も高い要素が置き換えられる要素であると想定しています。)
replacementWeight = .4*T - .1*N - 2*R
またはすべてを掛けますか?
replacementWeight = (T) * (.5*N) * (.1*R)
重みに定数を使用しないのはどうですか?たとえば、「時間」(T)は重要かもしれませんが、特定の時間が経過すると、それほど大きな違いはありません。基本的に、私はそれをすべて「多くの時間が経過した」ビンにまとめます。(たとえば、8時間と7時間の間に時間差がありますが、この2つははるかに新しいため、この差は1分と5分の差ほど重要ではない可能性があります。)(または別の例:(R )1つまたは2つの要素で問題ありませんが、5つまたは6つを置き換える必要が生じた場合は、大幅に重み付けする必要があります...したがって、線形であってはなりません。)
replacementWeight = 1/T + sqrt(N) - R*R
明らかに(1)と(2)は密接に関連しているので、この種のアルゴリズムを考え出すためのより良い方法があることを望んでいます。