定格回転子アルゴリズムの設計

最近、私はいくつかのオブジェクトの「回転子」を作成するタスクに直面しました。優先度を設定する必要があります。 一番下の行は単純です。優先度を上げる-オブジェクトの印象を増やす。

ただし、アルゴリズムの設計段階で、いくつかの不快な機能が見つかりました。

まず、最初に、データベースへの最小限の変更で対処したかったのです。 インプレッションの数をカウントするためにmysqlに別のテーブルを作成したくありませんでした。 しかし、この事実に辞任し、彼は設計を続けました。 私が構築した最初のアルゴリズムはすべて愚かでしたが、紙の上では、いくつかの回転が行われ、非常にうまく機能しました。

その本質は、ローテーションテーブルに実際のインプレッションの数だけでなく、式(以下、低下式)に従って特定の数を記録することでした



20 - 2i







ここで、iはローテーションの優先度です。 この式の意味は、オブジェクトを表示するときに、データベースから最小引き下げ式でインスタンスを選択し、以前の引き下げ式の現在の量にもう1単位を追加することです。 したがって、より低い数値がより低い係数を持つオブジェクトよりも低い数式に追加されるため、大きな回転係数を持つオブジェクト(より多く表示したいオブジェクト)がより一般的であることがわかります。

私が調べた次の問題は、「20」問題です。 つまり、このアルゴリズムでは、0から9までの回転係数のみを設定することができます(多数の自然から数値のみを取得する場合)。 低下式は、オブジェクトの数に応じて変換されました。



2n - i







nは、ローテーションに適したデータベース内のオブジェクトの数です。 しかし、現在、いくつかの制限が課されています。回転係数は、回転オブジェクトの総数を超えることはできません。 つまり、



2n - i

0 <= i <= n









これから先、私は実際に1.5匹のウサギを殺すと言います。 そして、新しいオブジェクトを追加するときに問題の1つが解決されるという事実によって殺されます。 さて、オブジェクトを追加するとき、それは少しの操作を行うためだけに残ります:

1-現在のすべてのオブジェクト係数を1増やすかどうかを決定します。

2-ロータリー記録にイニシアチブ低下式を書き留めるか、すでに記録から金額を取得します。 数回のイテレーションの後、ショーは必要に応じて進行します。

一般に、この形式が適しているのは、係数を下げる式に設定することにより、回転係数を与える効果の力をランク付けできることです(つまり、係数2がインプレッションに与える影響は1または0より大きくなります)



しかし、私が言ったように、データベースに別のテーブルを作成したり、ガベージフィールドを追加したりする方法に満足していませんでした。 最後の実用的なソリューションは、次のことを考えたときに思いついたものです。「係数は、オブジェクトがサンプルにどれだけ表示されるべきかを示す必要があります。 係数が2 3 1 1個ある場合、7回のオブジェクトはそれぞれ約2 3 1 1回表示されるはずです。」そして、別の考えが出てきました。 必要なのは、オブジェクトに回転係数を追加することだけでした。 さらに、それはすべて選択に関するものです。選択中に、すべての回転オブジェクトを選択し、回転係数に従って配列を複製で埋めます。 つまり、オブジェクトと係数を持つ:



1 2 3 4

2 3 1 1









回転配列は次のようになります。



o1 o1 o2 o2 o2 o3 o4









今では、それを混ぜて、ランダムな要素を選択するだけです。 確率理論によると、すべてが正しいです。回転係数が大きいほど、このオブジェクトを選択する機会が多くなります。 一見すると、回転に及ぼす係数の影響力の順位付けは機能しないように見えますが、係数の係数を作成したり、正方形や立方体(多くのオブジェクトがある場合)に入れたりすることを誰も気にしません。 新しい機能は、松葉杖なしでこのような回転スキームに適合することに注意してください。



All Articles