「blue」、「big」、「flexible」などのタグが割り当てられたアイテムがあるとします。考えられるすべてのタグの辞書も持っているとしましょう。
問題は、すべてのタグを単一の小さな署名に圧縮するにはどうすればよいかということです。浮動小数点数としましょう。要件は、同様のタグを持つアイテムには同様の署名があることです。
すべてのタグは永遠に知られています。署名は比較的小さくする必要があります。たとえば、浮動小数点数や数個の整数のセットです。
「blue」、「big」、「flexible」などのタグが割り当てられたアイテムがあるとします。考えられるすべてのタグの辞書も持っているとしましょう。
問題は、すべてのタグを単一の小さな署名に圧縮するにはどうすればよいかということです。浮動小数点数としましょう。要件は、同様のタグを持つアイテムには同様の署名があることです。
すべてのタグは永遠に知られています。署名は比較的小さくする必要があります。たとえば、浮動小数点数や数個の整数のセットです。
率直に言って、これを 1 つの数字に煮詰めるというスキームには価値がないと思います。タグを表すには、16 ビットの int または 32 ビットの int を使用するだけです。そして、アイテムに適用したいタグごとに、これらのフィールドの 1 つを使用します。スペースを節約しようとすると、不必要に複雑さが増すだけです。
各タグに ID 番号を割り当てます。タグから ID へのマッピングを別のテーブルに保存したい場合があります。タグの総数を N と呼び、特定のアイテムが持つことができるタグの数を M と呼びます。タグの署名は、M 桁の N を基数とする ID になります。
したがって、N = 50k で M = 3 の場合
タグ 1 = 49,999 タグ 2 = 1 タグ 3 = 2
タグ署名 = 49,999 + 1 * 50,000 ^ 1 + 2 * 50,000 ^ 2 = 5,000,099,999
これを表すには 64 ビット以上が必要です。この値を表すのに十分な大きさの整数型を使用してください。必要に応じて、複数の整数を使用してください。フロートを使用しないでください。精度が失われます。