判斷具有多個屬性的行的連通性

2021-08-21 05:18:39 字數 1221 閱讀 9488

問題描述:

線上遇到的乙個問題,這裡做乙個變形。有若干行資料(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上的所有資...