一些關係(離散數學中的)的程式設計思想
證明既定關係
給出如下所示的學生成績統計表
學生\課程 | 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
如果本文對你有幫助,請不要吝惜你的贊哦,這是對作者最大的鼓勵
相關文章
- ReactJS &Flux &Redux 的設計思想與關係ReactJSRedux
- SQL 程式設計思想:一切皆關係SQL程式設計
- 程式設計中的自頂向下設計思想程式設計
- 離散數學(集合論)
- 離散數學(數論基礎)
- 同構——程式設計中的數學程式設計
- 離散數學2 集合論
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- 離散數學 | (一)數理邏輯
- 程式設計師需要了解的邏輯學思想程式設計師
- 基礎安全產品相關係統設計的一些思考
- 離散數學(格與布林代數)
- 數學,離一個程式設計師有多近?程式設計師
- Django中ORM外來鍵和表的關係(Django程式設計-4)DjangoORM程式設計
- 計算機基礎:離散數學和完備性計算機
- 程式設計師的數學程式設計師
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- 程式設計思想 面向切面程式設計程式設計
- 離散數學——3.命題邏輯的等值演算
- 離散數學——6.命題邏輯的應用
- C++程式設計開發和指標的關係C++程式設計指標
- 非同步程式設計之Async,Await和ConfigureAwait的關係非同步程式設計AI
- Kafka 的設計思想Kafka
- 人人都能學會的python程式設計教程4:關係運算子與迴圈Python程式設計
- 離散數學——5.命題邏輯的推理理論
- 離散數學及其應用 (第2版)
- 聊聊程式設計中的 “魔數”程式設計
- 【程式設計素質】程式設計思想總結程式設計
- [譯] 關於你的程式設計生涯的一些告誡程式設計
- Python程式設計學習第八課之Python中的變數和關鍵字Python程式設計變數
- 關於分散式鎖在程式設計中的一些應用場景分散式程式設計
- Linux socke server程式設計:父程式和子程式關係LinuxServer程式設計
- 離散數學——4.命題邏輯公式的正規化公式
- JavaScript函數語言程式設計(1):基本思想JavaScript函數程式設計
- 大一下 離散數學 圖論 20240611圖論
- MySQL InnoDB中的事務隔離級別和鎖的關係MySql
- 多執行緒程式設計的核心思想執行緒程式設計
- 程式設計思想之冪等性 | 程式設計之道程式設計