問題描述:
線上遇到的乙個問題,這裡做乙個變形。有若干行資料(2000w)左右,每行有若干個屬性,比如姓名、郵箱、位址等等;如果兩行資料有至少乙個屬性值相同,就認為這兩個行是連通的;並且連通性有轉移,比如a與b連通,b與c連通,就可以認為a與c連通。那麼這兩千萬行資料哪些是連通的?
name
address
tel…
aabc
135a
bcd136
bcde
136
如上第一行與第二行name相同,可認為行1連通行2;
第二行與第三行第三個屬性相同,可認為行2連通行3;
於是1 2 3可認為是乙個組。
暴力解法:對每個屬性遍歷,對每行資料遍歷,時間複雜度最少為m∗
n2m ∗n
2(n為行數)
思路1:看到連通性立馬可以想到並查集,但是並查集是已經知道哪些行資料是連通的,然後再根據並查集構造的數判斷哪些屬於乙個組,這是整體思路。對並查集不清楚可參考
接下來,如何判斷行與行之間的連通性呢?
遍歷做法直接捨棄。考慮到一行有若干屬性,可以聯想到樹的層級結構。對每行資料,如果對應的屬性值已經存在,則連通。判斷屬性值是否已經存在最快的是使用hashmap的key來判斷。
每行資料有m個屬性,初始化m個ha
shma
pring
,int
eger
>
h as
hmap
ring ,int eger > string為屬性值,int為行號。對每行資料判斷對應層級的map,是否存在,若存在 uf.union(m1,m2);若不存在map.put(string,m); 時間複雜度為m∗ n m∗n m為屬性個數,n為行數 如果想要判斷哪些連通,需要使用bfs或者dfs。這裡略過。 **如下:public
class vert ,,
,};union_find u = new union_find(line.length);
for(int i = 0;ifor(int j = 0;jif(i == 0) else }}
system.out.println(u.isconnected(1, 2));
}}
python 實現判斷ip連通性的方法總結
python 以下是個人學習 python 研究判斷ip連通性方法的集合。缺點可能有辦法解決,如有錯誤,歡迎矯正。方法一import os return1 os.system ping n 2 w 1 17www.cppcns.com2.21.1.183 print return1 缺點 會彈出cm...
測試Lync連通性的工具
操作如下 如果你想手動指定邊緣伺服器,就請指定第二項 我現在想測試自動發現服務並登入,所以選擇第一項,並選擇next 2.輸入完整的資訊,以下是虛擬的,請按實際輸入資訊。如果你覺得在別人的 上輸入密碼不安全,那就請你建立個測試帳號吧。如果你的邊緣伺服器證書不是公共可信任的證書 如自己ad的證書 請選...
連通性 SaaS揮之不去的短板
本文講的是連通性 saas揮之不去的短板,it168 資訊 提到saas和雲計算,很多人都會談論到它們的安全 隱私和合規問題,但卻很少有人談及它們的連通性。由於saas應用完全依靠網際網路接入,因此一旦網際網路中斷,企業對saas的訪問馬上就會受到影響,包括erp crm和sfa。saas上的所有資...