アルゴリズム評価シート。

良い一日、親愛なるhabrosociety。

1つのプロジェクトを作成する過程で、ユーザー評価を実装する問題に遭遇しました。 原則として、Habrとの類似性を引き出すことができます。 実際、ユーザーは未知のアルゴリズムに従ってランク付けされ、何らかの種類のインジケーターを受け取ります(habrasila、これをランクと呼びます)。 その後、シートが作成され、このインジケーターの降順に並べ替えられます。 すべてがシンプルなようです。 すべてが見えるように見えますが、どこも簡単ではありません。 しかし、ここにはいくつかの問題があります。 理論的には、2番目の問題は最初の問題に依存します。 結局のところ、ユーザーの位置とページに表示される数字を知っていれば、評価のどの部分に位置するかを計算できます。

_ = ___( / __ )





しかし、その後、問題が発生し、位置を計算する方法は? 他のすべてのユーザーに関連する必要があります。

解決策の1つは、一定の期間に1回実行される別個のスクリプトです。これにより、ランクごとにデータベースから膨大な選択が行われます(常に関連することを意味します)。 その後、各レコードにシリアル番号を割り当てて、データベースに保存します。 このオプションは機能していますが、重大な欠点があります。 位置計算は、ユーザープロファイルを開くときに行う必要があることを思い浮かべます。 同時に、彼はデータベースに対して複雑なクエリを行うべきではありません。 これですべてのタスクが解決しますが、実装方法がわかりません。 Harazhitelamiのタスクに対処するためにトピックを投稿してください。 助けてくれる人はたくさんいますが、それだけでなく、知りたい人もいます。 だからコメントを待っています。 何かが明らかになったらテキストを更新します。



UPD。 Eyesは、その場で位置決めするためのソリューションを提案しました。 ユーザーテーブルには、rankパラメーターを持つフィールドが既にあるため、ユーザーの位置を判断するには、select count(*)... where ... and rank> user_rankを実行するだけです。



UPD 2見つかったソリューションに新しい問題があります。 同じ評価のユーザーを分割する方法は? 結局のところ、評価のあるユーザーの数は多く、同じです。

あなたは単にそれに注意を払って、彼らに同じ場所を与えることができません。 それはhabrで作られています。 例として、これらのユーザーのプロファイルを見ることができます: NooLZada 。 彼らがどれだけ対等な立場に立つかはわかりませんが、ポイントはどちらもランキングで983位だということです。

理論的には、それはさらに正確で、同じ評価のユーザー間で差別はありませんが、正確な位置を知らずにリストの中央を参照する方法はありますか?



PS私は、Habrがフォーラムではないことを知っていますが、タスクを解決することに非常に興味があり、それによってカルモリスクが正当化されます。



All Articles