一些關係(離散數學中的)的程式設計思想
證明既定關係
給出如下所示的學生成績統計表
學生\課程 | A₁ | A₂ | …… | An |
---|---|---|---|---|
X₁ | A₁(X₁) | A₂(X₁) | …… | …… |
X₂ | A₁(X₁) | A₂(X₁) | …… | …… |
…… | …… | …… | …… | …… |
Xm | …… | …… | …… | An(Xm) |
根據學生的學習成績,寫出求解獲取所有學生的集合上序關係的演算法描述:即 若學生Xi,在所有課程上的成績都優於學生Xj,則學生對(Xi,Xj)滿足序關係,這一序關係以矩陣的形式輸出。
思路
有n個學生,就構建一個n行n列的學生矩陣,比對每個學生與其他學生的關係
滿足“序關係”(成績全方面超過別人)就置為1,否則置為0
虛擬碼形式如下:
Input 學生成績統計表
獲取成績表中學生人數m,課程數目n
初始化學生矩陣student_matrix(m,m)為零矩陣
for i=1:m
for j=1:m
if 第i個學生所有成績 > 第j個學生所有成績
student_matrix(i,j)=1;
end if
end for
end for
Output student_matrix
證明等價關係
給定一個m×m的矩陣M,用以表示定義在集合A上的一個二元關係,設計演算法用以判斷這一矩陣所表示的二元關係是否滿足等價關係
思路
等價關係分三步:自反、對稱、傳遞
自反性用一次for迴圈,遍歷關係矩陣M對角線上元素即可
對稱性用兩次for迴圈,遍歷M中(i,j)為1的部分,判斷(j,i)是否為1
傳遞性用三層for迴圈,遍歷M中(i,j)為1且(j,k)為1的部分,M(i,k)是否為1
虛擬碼形式如下:
Input 關係矩陣M,矩陣規模m
定義函式 reflective: 引數M,m
for i=1:m
if M(i,i)!=1
return false
end if
end for
return true
end
定義函式 symmetric: 引數M,m
for i=1:m
for j=1:m
if M(i,j)==1 and M(j,i)!=1
return false
end if
end for
end for
return true
end
定義函式 transitive: 引數M,m
for i=1:m
for j=1:m
for k=1:m
if M(i,j)==1 and M(j,k)==1 and M(i,k)!=1
return false
end if
end for
end for
end for
return true
end
主函式:
if reflective(M,m)and symmetric(M,m)and transitive(M,m)
output 這是一個等價關係
else
output 這不是一個等價關係
end if
證明關係的劃分
給定一個m×m的矩陣M用以表示一個等價關係,該等價關係是定義在集合A上的,即|A|=m,設計演算法求得這個等價關係所對應的劃分。
思路
首先了解等價關係對應的劃分
通俗來講
等價關係→劃分:彼此滿足關係的元素構成一個集合(block),所有的block組成對應的劃分
比如關係對(1,1)(1,2)(2,1)(2,2)構成集合{1,2},關係對(3,3)構成集合{3}那麼整個關係(1,1)(1,2)(2,1)(2,2)(3,3)對應的劃分就是{{1,2},{3}}
劃分→等價關係:劃分中的每個block自己與自己形成笛卡爾積,其元素就形成關係對,所有關係對合起來就是對應的等價關係,例子我就不舉了,傳送門裡面說的很詳細
回到題目,要求關係對應的劃分,根據關係矩陣找出每個關係對形成的block,所有block合併就是對應的劃分
虛擬碼如下:
Input 等價關係矩陣M,矩陣長度m,集合A
for i=1:m
for j=1:m
if M(i,j)==1
block中加入A(j)
end if
end for
block內元素去重
Output block
block清空
end for
找尋LUB和GLB
給定一個非空有限偏序集(A,≤),設計演算法求解A中任意兩個元素最小上邊界儲存在矩陣MLUB中,設計演算法求解A中任意兩個元素最大下邊界,儲存在矩陣MGLB中。
思路
這裡要用到一個推論(證明很簡單,我就不證了)
a∨b=b,當且僅當a≤b
a∧b=a,當且僅當a≤b
所以遍歷整個集合A
對每個元素i,再遍歷集合A一次
用A(i)對比A(j),如果滿足A(i)≤ A(j),則A(i)存入MGLB中第(i,j)位,A(j)存入MLUB第(i,j)位。
輸出MLUB 和 MGLB
虛擬碼如下:
Input 集合A
求出A的模m
for i=1:m
for j=1:m
if A(i)和A(j)滿足≤關係
GLB(i,j)=A(i)
LUB(i,j)=A(j)
end if
end for
end for
Output GLB 和 LUB
如果本文對你有幫助,請不要吝惜你的贊哦,這是對作者最大的鼓勵
相關文章
- SQL 程式設計思想:一切皆關係SQL程式設計
- ReactJS &Flux &Redux 的設計思想與關係ReactJSRedux
- 離散數學(數論基礎)
- 程式設計中的自頂向下設計思想程式設計
- 程式設計師的成長和程式碼行數的關係程式設計師
- 設計模式中類的關係設計模式
- Java程式設計思想中關於閉包的一個例子Java程式設計
- JDK 7中的函數語言程式設計思想[轉載]JDK函數程式設計
- 同構——程式設計中的數學程式設計
- CQRS與OO思想的關係
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- 計算機基礎:離散數學和完備性計算機
- 數學,離一個程式設計師有多近?程式設計師
- Go學習筆記:關於Java、Python、Go程式設計思想的不同Go筆記JavaPython程式設計
- 高考數學常用數學思想:函式與方程思想,在數列中的應用函式
- 程式設計中的一些感悟程式設計
- 離散數學及其應用 (第2版)
- 關於程式設計的一些反思程式設計
- 一些程式設計相關的分享程式設計
- 程式設計師需要了解的邏輯學思想程式設計師
- 程式設計與雞和蛋的關係 (轉)程式設計
- 基礎安全產品相關係統設計的一些思考
- Django中ORM外來鍵和表的關係(Django程式設計-4)DjangoORM程式設計
- 從李小龍的思想看程式設計師程式設計之道程式設計師
- 最近關於程式設計的一些反思程式設計
- 程式設計就像兩性關係程式設計
- 淺析視覺設計中的圖文關係視覺
- Java中的按位操作——Java程式設計思想筆記Java程式設計筆記
- 關於網頁設計的一些統計數字網頁
- 關於Spark中RDD的設計的一些分析Spark
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- 程式設計思想 面向切面程式設計程式設計
- React程式設計思想React程式設計
- Android的一些設計思想(201603)Android
- 老程式設計師的思想變遷程式設計師
- 聊聊程式設計中的 “魔數”程式設計
- 程式設計師經驗值和程式碼行數有啥關係?程式設計師
- 程式設計中的一些感悟(收藏) (轉)程式設計