2012-08-16 95 views
0

可以說我有分配給他們的標籤的項目,如「藍色」,「大」,「靈活」。比方說,我也有一個所有可能的標籤字典。創建標籤的可表示簽名

現在的問題是:如何將所有標籤壓縮到單個小號簽名,讓我們說一個浮點數。要求是具有相似標籤的項目具有類似的簽名。

所有的標籤是永遠知道的。簽名應該相對較小,例如一個浮點數或一組整數。

+0

還有其他假設嗎?每件商品數量有限?一組標籤是永久固定的?項目和標籤存儲在SQL數據庫中? – 2012-08-16 11:04:16

+0

剛剛更新了要求。 – jQguru 2012-08-16 11:12:14

回答

0

坦率地說,我認爲把這個降到一個數字的方案是不值得的。只需使用16位int或32位int來表示標記。併爲每個要應用於項目的標籤使用這些字段中的一個。您節省空間的追求只會增加不必要的複雜性。

爲每個標籤分配一個ID號。您可能希望將標記的映射存儲到單獨的表中。調用標籤總數N和給定項目可以有的標籤數量M.標籤簽名將作爲M數字base-N編號的ID。

因此,如果N = 50K和M = 3

標籤1 = 49999 標籤2 = 1 標籤3 = 2

標記簽名= 49999 + 1 * 50000^1 + 2 * 50000^2 = 5,000,099,999

您將需要超過64位來表示這一點。使用足夠大的整數類型來表示該值。必要時使用多個整數。不要使用浮標,你會失去精度。

+0

如果您希望簽名具有有限大小(如浮點數),您如何做到這一點。 – jQguru 2012-08-16 11:13:32

+0

它們將存儲在哪裏?數據庫?你想多久閱讀一次物品的標籤?您想多久搜索一組給定的標籤的所有項目?您希望從所有項目中刪除單個標籤的頻率如何?那裏有多少個標籤?多少項目?每件商品有多少個標籤? – 2012-08-16 11:18:14

+0

可以說1M個項目,每個項目有10個標籤,共有50K個不同的標籤,存儲在MySQL中,標籤和簽名更新更新。 – jQguru 2012-08-16 12:04:28