≡,稱為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 大都研究的是...