質問

ている"色"テーブルのデータベース.

ユーザカラーの谷のユーザーインターフェースのバックエンドの検索のための最も同様のみの色の色表計算までの距離の色のHCLとします。

私は実施するキャッシュアルゴリズムにある店舗との距離を従来の計算色距離のための繰り返し数学の業務です。

何が最高のレイアウトは、そのような目的のために?

役に立ちましたか?

解決

としてOsama、このような早期の最適化。に基づきご説明のアルゴリズムのう:

  • 事前計算し、HCLとしてベクトルを用いる全ての色のデータベース、テーブルにマップカラーのidはその塩ベクトルとなっています。
  • のテーブルに格納されるべき使用 MySQL空間の拡張子, を可能にするクエリーのために近隣のポイントです。
  • 新しい色を選択すると変換する塩、クエリーのために近隣の点HCLとします。
  • 場合キャッシュが必要で、キャッシュの粗粒の色があるので万一、ユーザーが再度以前選択したカラーです。

他のヒント

あなたはこれを行うことができます:

table colors(r,g,b)
table colordistance(user_r,user_g,user_b,r,g,b,distance)

しかし、あなたはあなたのユーザーが同じ数字を入力保つことを期待します?あなただけの最も近い色が含まれている場合、このテーブルの最大行番号は16777216です。

私はまだデータベースへのアクセスが計算よりも遅くなると思われるので、私は引用符と思っています「は時期尚早の最適化は諸悪の根源であるの」ます。

私は実際問題としてそれを見るまで、私は計算のキャッシングなしでそれを実行します。

私はあなたの色「距離」はのようなもののように計算されていることを前提としています:

sqrt((r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2)

あなたは8ビットピクセルを使用していると仮定すると、^(256 ^ 3)あなたのテーブル内の2つの異なるマッピングが存在することになります。これは、テーブルスペースのLOTです。 (おそらく多く、それを圧縮するが...次の点を見ることができました。)

あなたが考慮する必要がある他の事は、計算を行うための費用対色距離を見つけるために、データベース・ルックアップのコストです。私の推測では、データベースの検索がミリ秒以上かかるだろうが、メトリックの計算は、1マイクロ秒以下を取る必要があることになります。

すべてのすべてで、データベース・テーブルを使用することは私には本当に悪いアイデアのように聞こえるます。

ここに私がお勧めするものです。

table colors(color_id, color_name, r, g, b)

table color_distances(color_1_id, color_2_id, distance)

インデックス: PRIMARY(color_1_id、color_2_id) INDEX(color_1_id、距離、color_2_id)

color_distancesは、すべての可能なCOLOR_IDの組み合わせを含むことになり、必要に応じてのみ更新されます。

の選択は、シンプルになります:

SELECT similar_colors.*
FROM colors as similar_colors, color_distances
WHERE color_distances.color_1_id = <selected_color_id>
ORDER BY color_distances.distance ASC

私は、HCLとあまり慣れていないんだけど、色の記述に基づいて: :類似:: HCLは、2つの色が、距離の入力として必要とされているようです

だから私は、少なくとも二つのRGBのセットとそれらの間の距離に従ってを保存しなければならないと思うだろう。私はあなたのユースケースのわからないんだけど、選択肢の範囲が選択されている場合、あなたは同様にユーザーの選択を保存したい場合があります。

それだけでいえ組み合わせの有限数があるだろうと思われますか?それはあなたがそれぞれの組み合わせに対して一度計算を行うことができように思える、とだけルックアップテーブルを持っている?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top