堆疊應用(五) 離線等價類

2022-04-06 02:49:35 字數 2433 閱讀 5125

例子:假定 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...