バナー広告システムを開発中です。各バナーはdbに格納されます。各バナーにはワイト(int番号)があります。それをどのように効率的に変換できますか?バナー広告アルゴリズム
EXの場合:
banner_1 70 banner_2 90 banner_3 150
と私は、バナー1は、これが呼ばれた22% 秒29% 第三の48%
バナー広告システムを開発中です。各バナーはdbに格納されます。各バナーにはワイト(int番号)があります。それをどのように効率的に変換できますか?バナー広告アルゴリズム
EXの場合:
banner_1 70 banner_2 90 banner_3 150
と私は、バナー1は、これが呼ばれた22% 秒29% 第三の48%
:
SELECT BannerId, BannerUrl, BannerWeight, SUM(BannerWeight) as TotalWeight FROM Banners;
その後、値を見つけるために、このようなものを使用します。
public int GetRandomRow(Row[] rows)
{
int TotalWeight = 3;
int rnd = Random(rows[0].TotalWeight);
for (int row=0; row < rows.Count; row++)
{
if (rnd < rows[row])
return row;
}
}
表示したい(サプライズ) "加重乱数"を使用します。 this questionの最上位の答えがあなたを助けます。
重みがw[1]
、w[2]
、...、w[n]
ある場合には、i番目のバナー広告があることのための割合p[i]
:
p[i] = w[i]/sum(w)
、で割った特定の広告の重量であり、重みの総和あなたのデータベースシステムは、それをかなり簡単に計算できるはずです。
広告が比較的少なく、更新よりも多くの広告が表示される場合は、広告ごとにこのp[i]
をキャッシュし、広告の追加、削除、修正を行うたびに再計算する価値があります。
Banner1 = (70/(70 + 90 + 150)) * 100 s
Banner2 = (90/(70 + 90 + 150)) * 100 s
Banner3 = (150/(70 + 90 + 150)) * 100 s
ええと、単純なweighted averageロジックです。
重量から百分率への変換が必要な場合は、実際には簡単です。すべての重量を合計し、合計で100を掛け合わせて合計する必要があります。これはO(n)です。保存された重みを持つSQLデータベースを使用して、あなたと仮定すると、あなたは合計重量を返し、calcuationsのためにそれを使用することができます
あなたのパーセンテージは最大99になるので、いくつかの小数点以下を切り捨てたと思います。
あなたはこの方程式を解く、(100パーセントを見つけるために)すべての重みを合計しなければならないxのバナーの割合を検索するには:float percent = weight_x/sum of weights
どのようにあなたが、あなたの22%、29%、48%を見つけましたか? – tibur
これらのワイト値は時間とともに変化しますか、新しいバナーを追加しますか? –