離線等價類的概念見離線等價類
最近在清洗資料的時候涉及到要將相似度比較高的資料夾合併,特徵比對得到是1:1的對,比如:
(a,b),(c,d),(a,c)...,那麼合併的時候就涉及到將這些等價的對合併成乙個大類,直觀上這就是乙個離線等價類的問題。
import os
import pickle
with open(r"d:\photolibrary\uface_cropped_pairs\same_pairs0.8.pkl",'rb') as f:
pairs = pickle.load(f)
#construct pair list
pairs_lst={}
for pair in pairs:
a,b = pair
if a not in pairs_lst:
pairs_lst[a]=
if b not in pairs_lst:
pairs_lst[b]=
pairs_lst[a].insert(0,b)
pairs_lst[b].insert(0,a)
flag={}
classes=
s=for item in pairs_lst.items():
if not item[0] in flag:
flag[item[0]]=true
set=[item[0]]
while len(s)>0:
a=s.pop()
for b in pairs_lst[a]:
if not b in flag:
flag[b]=true
for s in classes:
print(s)
print("test")
離線等價類問題
等價類是滿足自反性,傳遞性的一組關係,其具有find和union兩個方法。這之前我們已經說過了。這裡我們介紹的離線等價類是find的公升級版本,find只找尋root,而離線等價尋找,乙個等價類的所有元素。其原理就是首先隨便尋找乙個等價類元素,然後利用傳遞性去把所有和他相關的元素找出來。int ma...
堆疊應用(五) 離線等價類
例子 假定 n 1 4,r 我們忽略了所有形如 a a 的關係,因為按照反身屬性,這些關係是隱含的。同樣也忽略了所有的對稱關係。比如 1 11 r,按對稱屬性應有 11,1 r。其他被忽略的關係是由傳遞屬性可以得到的屬性。例如根據 7 11 和 11 1 2 應有 7,12 r。如果 a b r,則...
計算等價類
首先,什麼是等價關係 等價關係是集合元素間的一種代數關係,用字母e來表示,對於乙個集合中的兩個元素,如果他們之間存在一種等價關係,那麼必須滿足以下性質 1.自反性,對於任意乙個元素x,它與自己存在等價關係,即 x,x 滿足e 2.對稱性,如果 x,y 滿足 e,那麼 y,x 也屬於e 3.傳遞性,如...