等價關係 離散數學

2021-08-19 16:01:50 字數 1535 閱讀 2822

≡,稱為s上為等價關係,當且僅當它在s上是對稱的,自反的,傳遞的。

例如:x=y意味著y=x

x=y且y=z意味著x=z

可以使用等價關係將集合s劃分為等價類,s的兩個元素x和y屬於同一等價類,當且僅當≡

≡,例如,有12個編號為0至11元素:0≡≡

4,3≡

≡1,6≡

≡10,8≡

≡9,7≡

≡4,6≡

≡8,3≡

≡5,2≡

≡11,11≡≡0

那麼根據關係≡

≡的自反性,對稱性和傳遞性的結果,可以歸為以下幾個等價類:

;;.如果用二維陣列去表示其等價關係,不僅會浪費大量空間,還需相當的時間去尋找兩個等價元素之間的第三個等價元素。那麼我們可以考慮用鍊錶來去查詢等價類的元素,來減少時間和空間複雜度,其用鍊錶設計查詢等價類的結構如圖:

**實現:

#include 

#include

#include

//等價關係最大範圍(0-max_size)其中不包括max_size

#define max_size 24

#define is_full(ptr) (!(ptr))

//標記輸出過

#define false 0

//標記沒有輸出過

#define true 1

typedef struct node *node_pointer;

//儲存結構

struct node

;using namespace std;

int main()

printf("enter a pair of numbers (-1 -1 to quit):" );

//迴圈輸入等價關係的元素對

scanf("%d

%d",&i,&j);

while(i>=0)

//插入到第i個鍊錶的前端

x->data=j;

x->link=seq[i];

seq[i]=x;

x=(node_pointer)malloc(sizeof(node));

if(is_full(x))

//插入到第j個鍊錶的前端

x->data=i;

x->link=seq[j];

seq[j]=x;

printf("enter a pair of numbers (-1 -1 to quit):" );

scanf("%d

%d",&i,&j);

}for(i=0;i//判斷是否輸出

if(out[i])

else

}if(!top) break;

//查詢第top->data個等價鍊錶的元素

x=seq[top->data];

top=top->link;}}

} }

《離散數學》關係

為什麼要研究乙個關係的演算法?我總是在想這個 難道是現實世界關係的模型對於我們來說,都是數學中研究的關係 關係把世界連線為了乙個巨大的網 一,關係的定義以及性質 從數學的角度來說,關係是笛卡兒的子集,就是乙個二維表,還可以是乙個矩陣,乙個有向圖。關係有一些性質,自反 a,b有相同的父母 對稱 a,b...

已知等價關係求商集 等價關係習題

習題十 等價關係與等價類 1 設r和r是集合a上的等價關係,用例子證明r?r不一定是等價關係。2 試問由4個元素組成的有限集上所有的等價關係的個數為多少?3 給定集合s 1,2,3,4,5 找出s上的等價關係r,此關係r能夠產生劃分 1,2 3 4,5 並畫出關係圖。4 設r是乙個二元關係,設s?a...

離散數學 集合關係

集合 集合a,集合b。運算。集合裡的元素是不相容的,運算後是羅列在一起。純數字的運算,元素都是相容的。最後出來乙個元素。可以認為是特定規則的元素運算。比如 乘法2 3,先數字分解成集合 按照笛卡爾積。相融成6.關係rr arb 關係r又可以看作集合。關係中集合的數量上 兩元 a1,b1 大都研究的是...