リスト内の各項目が同時にリストの一番上に向かって機能するように、重みバイアスを許可するリストのシャッフルを実行するための単純なアルゴリズムを誰かが知っているかどうか疑問に思っています。
ページ分割されたディレクトリにビジネス リスティングがあるサイトで作業しています。リスティングを公平に表示する必要があるため、あるビジネスが常に別のリスティングの上/下にあるとは限りません。ディレクトリの純粋なシャッフルは実際には十分ではありません。これのランダムな性質により、特定のビジネスがリスト内の同様の場所に長期間にわたってランダムにシャッフルされる可能性があるためです。リストはゆっくりとリストを上に移動し、時間の経過とともにディレクトリの最初のページに表示される機会が合理的に均等になるようにします。
編集:
Kevin からの感謝を込めて - 私はこれらのルールを形式化しようとしています:
1) n 個のリストの場合、各リストは n 回の「準シャッフル」で 1 番目の位置に表示する必要があります)
2) (あいまい) リストの平均 (?) 順位は、順位 1 に達するまで時間の経過とともに増加するはずです。
3) 任意の 2 つのビジネス (A と B) について、n 回のシャッフルの繰り返しで、A が 50% を超えて B を上回ってはなりませんか?
また、私は非常に複雑で入り組んだ「シャッフラー」を持つビジネスで働いていることも付け加えておく必要があります。これは、ディレクトリ内のビジネスのそれぞれのカテゴリに公平に分散することを主張する多数の有料クライアントをなだめるために必要です。顧客からの苦情は「本当の」問題です。ユーザーは通常、ページ分割されたページの最初の数ページからアイテムを選択するため、クライアントをアルファベット順 (デフォルト) で注文するのは公平ではなく、ユーザーが上から下に読むことを考えると、そうではありません。あるビジネスが常に他のビジネスよりも優れていることを公正に示します。
以前に実装した可能性のある、この問題に対する適切な解決策を誰かが持っているかどうかを知りたいです。
編集:
これらのアイテムがデータベースに保存されていることを考えると、アイテムが最初の位置に達したときに、順序付け (降順) に使用できる、時間の経過に伴う各リストの位置の合計である列を作成できます。リストを 0 に設定すると、リスト内のすべての項目が最終的にリストの一番上に表示されます。問題は、多数のリストの場合、時間の経過とともに、この数がかなり大きくなる可能性があることです...
編集:
データベースをバタンと閉めたくないので、ユーザーがブラウジングしている間は一貫性が必要なので、ディレクトリのすべての表示ではなく、毎晩(1日1回)「疑似シャッフル」を実行するだけです