Python 離線等價類

2022-04-06 02:31:54 字數 907 閱讀 7724

離線等價類的概念見離線等價類

最近在清洗資料的時候涉及到要將相似度比較高的資料夾合併,特徵比對得到是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.傳遞性,如...