例子:假定 n= 1 4, r= 。我們忽略了所有形如 ( a , a )的關係,因為按照反身屬性,這些關係是隱含的。同樣也忽略了所有的對稱關係。比如 ( 1 , 11) € r,按對稱屬性應有 ( 11,1) €r。其他被忽略的關係是由傳遞屬性可以得到的屬性。例如根據 ( 7 , 11) 和( 11 , 1 2 ),應有(7,12) €r。如果(a , b) €r,則元素a 和b 是等價的。等價類( equivalence class)是指相互等價的元素的最大集合。 「最大」意味著不存在類以外的元素,與類內部的元素等價。
考察例 中的等價關係。由於元素 1 與11, 11 與1 2是等價的,因此,元素 1 , 11 , 1 2是等價的,它們應屬於同乙個等價類。不過,這三個元素還不能構成乙個等價類,因為還有其他的元素與它們等價(如 7)。所以 不是等價元素的最大集合。集合 才是乙個等價類。關係 r還定義了另外兩個等價類: 和。
定義:假定有乙個具有 n 個元素的集合u= ,另有乙個具有 r 個關係的集合 r= 。關係 r是乙個等價關係( equivalence relation),當且僅當如下條件為真時成立:
• 對於所有的 a,有(a, a) €r 時(即關係是反身的)。
• 當且僅當 (b, a) € r時(a, b) €r(即關係是對稱的)。
• 若(a, b) €r且(b, c) €r,則有(a, c) € r(即關係是傳遞的)。
在給出等價關係 r時,我們通常會忽略其中的某些關係,這些關係可以利用等價關係的反身、對稱和傳遞屬性來獲得。
在離線等價類( o ffline equiralence class)問題中,已知 n 和r,確定所有的等價類。注意每個元素只能屬於某乙個等價類。
可以為n個元素分別建立乙個鍊錶,鍊錶其他元素為與當前元素等價的元素。從頭掃瞄元素,對於未輸出過的元素,將其先壓入乙個堆疊,然後掃瞄對應這個元素的鍊錶,並對這個鍊錶中的元素重複著一過程。直到堆疊為空。
堆疊實現見:堆疊的鍊錶方式實現
1執行:#ifndef offlineequiralenceclass_h
2#define offlineequiralenceclass_h
34 #include 5 #include "
chain.h
"6 #include "
linkedstack.h"7
using
std::cout;
8using
std::cin;
9using
std::endl;
1011
class
offlineec
1218
19 ~offlineec()24}
2526 friend void
offline_equiralence();
2728
private
:29 chain* c;//
儲存等價關係的鍊錶
30int num;//
元素個數
31void findequiralence();//
查詢等價類
32};
3334
35void
offlineec::findequiralence()
3645
46for (int i = 1; i < num + 1; ++i)
4766 q =ci.next();67}
68}69 cout <
71}72}
7374
void
offline_equiralence()
7584
85 cout << "
輸入關係對的個數:
"<
86 cin >>r;
87if (r<1)88
9293
offlineec ec(n);
94 cout << "
輸入關係對:
"<
95int
a, b;
96for (int i = 0; i < r;++i)
97108
109 ec.c[a].insert(0
, b);
110 ec.c[b].insert(0
, a);
111}
112113
ec.findequiralence();
114}
115#endif
1 #include "執行結果:offlineequiralenceclass.h"2
3int
main()
4
離線等價類問題
等價類是滿足自反性,傳遞性的一組關係,其具有find和union兩個方法。這之前我們已經說過了。這裡我們介紹的離線等價類是find的公升級版本,find只找尋root,而離線等價尋找,乙個等價類的所有元素。其原理就是首先隨便尋找乙個等價類元素,然後利用傳遞性去把所有和他相關的元素找出來。int ma...
Python 離線等價類
離線等價類的概念見離線等價類 最近在清洗資料的時候涉及到要將相似度比較高的資料夾合併,特徵比對得到是1 1的對,比如 a,b c,d a,c 那麼合併的時候就涉及到將這些等價的對合併成乙個大類,直觀上這就是乙個離線等價類的問題。import os import pickle with open r ...
軟體測試 多個輸入的等價類劃分方法應用
多個輸入等價類劃分測試用例例子 1.問題 在三個文字框中輸入1到6個英文本元或數字,按ok結束。2.等價類劃分 編號有效等價類 編號無效等價類 1文字框1長度 1 6 8文字框1長度 1 或者 長度 6 2文字框2長度 1 6 9文字框2長度 1 或者 長度 6 3文字框3長度 1 6 10文字框3...