簡體   English   中英

當順序對於聚類很重要時,為字符串分配整數值

[英]Assign strings with integer values when order matters for clustering

我的網絡中有許多計算機名稱。 我想為每台計算機名稱分配一個int值,以便可以對具有接近int值的計算機名稱進行聚類。 同一群集中的計算機名稱應該是共享相同前綴(前綴長度不是常數)並且后綴不同(后綴長度不是常數)的計算機,它們的值將相對接近。

例如,假設我有3個計算機名稱:1.'wber1637'2.'wbcx9999'3.'abcx9999'。 第一個和第二個名稱具有相同的前綴(在這種情況下,前綴的長度為2 -'wb'),因此我希望為它們分配彼此接近的int值。 相反,第三個名稱與其他兩個名稱具有不同的前綴(盡管后綴“ cx9999”與第二個名稱相同)應分配一個與其他兩個名稱的int值相距較遠的int值名稱。

將名稱中的字符視為數字本身

這樣,以相似的開頭開頭的名稱將具有大約相同的大小,如果結尾不同,則將是較小的更改

例如:

wber1637在ascii中的字母是0x77、0x62、0x65、0x72、0x31、0x36、0x33、0x37

將它們連接成一個數字以獲取0x7762657231363337-十進制8602549779357381431

wbcx9999在ascii中的字母是0x77、0x62、0x63、0x78、0x39、0x39、0x39、0x39

將它們連接成一個數字以獲取0x7762637839393939-十進制8602547606238345529

與abcx9999相比,它們彼此之間有點靠近(請注意,它們都以860254開頭)

abcx9999在ascii中的字母為0x61、0x62、0x63、0x78、0x39、0x39、0x39、0x39

將它們連接成一個數字以獲得0x6162637839393939-十進制7017280537403930937


wbcx9999wber1637之間的區別是2173119035902

wbcx9999abcx9999之間的差異為1585267068834414592


在Java中,這將是一個簡單的任務

String name = "wber1637";
long output = 0; //note that an 8 digit string fits exactly into a long
for(char c : name.toCharArray())
    output = (output << 8) + c;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM