離散數學學習心得(二)基礎結構

離散數學中的基礎結構有,集合,函數,序列,求和,矩陣。之所以叫做基礎結構,是因爲其後的很多結構都是基於這些結構的。之後會慢慢介紹。可以說,離散數學中的基礎結構衍生了數據結構,數據結構衍生了不少算法。

1、集合

德國數學家,喬治.康托爾提出了樸素集合論。他定義集合就是對象的聚集,同樣這也是我們平時所理解的集合。不過集合論作爲基礎數學的研究,它想要提出集合就是最爲基本的定義 。但是既然集合是由對象組成的,那麼最基本的定義就是對象而不是集合。那麼我們在定義集合之前就必須定義對象,對象怎麼定義?宇宙間的萬事萬物都可以是對象,最終數學家選擇了另一種解決方案,就是公理集合論。那就是設立一個公理,然後所有的理論都建立在這個公理上,這裏就不多提了。在應用中樸素集合論也是大有用處的。

樸素集合論還有一個問題那就是悖論,在說明悖論之前首先需要理解一個概念。

1.1冪集

冪集就是集合所有子集(A的每個元素都是B的元素,那麼A就是B的子集)的集合。

例如,假設有一個集合A={a,b,c}(集合全部用大括號作爲集合符號)。那麼A的冪集就是:

P(A)={{a},{b},{c},{a,b},{a,c},{b,c},{abc},∅}  ∅就是指的空集,空集中沒有元素。A的冪集用P(A)表示。注意,冪集中的元素數量一定比原集合的元素數量多

那麼有一個問題,是否存在一個最大的集合包含宇宙萬物和所有可能性呢?平時我們有一個集合叫全集一般用U或者E來表示,這全集是否可以是最大的集合呢?

要解答這個問題,我們就做出一個假設。假設有最大的集合E,它包含了世界所有的可能性。既然E也是集合,那麼我們也可以對它取冪集,假設A=P(E),那麼A中的元素數量一定比E的中的元素數量多,那麼E就不是最大的集合。與假設相矛盾,所以不存在最大的集合。

這個時候就可以搬出你八成聽說過的一些通俗的悖論了。

上帝悖論:假設上帝是萬能的。那麼上帝可不可以創造出一顆自己舉不起來的石頭呢?如果能,那麼上帝的力量不是無敵的,如果不能,那麼上帝的創造力不是萬能的。這個悖論與“是否存在最大的集合”這個問題有幾分相似呢。

理髮師悖論:理髮師說,我只爲那些不爲自己理髮的人理髮。那麼誰爲理髮師理髮呢?

這些都是經典的悖論,也是樸素集合論的問題,在這裏我也不繼續深入研究了,不過這些問題絕對不是沒有意義的。準確的說這些問題可能比很多應用問題更加有意義。基礎研究終究是推動科學發展的第一動力。

1.2集合運算與恆等式

在高中時,我們就學習過集合的並集,交集,補集。不過,這三種簡單的運算可以延伸出很多推論,例如容斥原理(在以後的文章中再詳細介紹)。下面給出運算的定義:

交集:集合A與集合B的交集就是某個集合中,元素x即屬於A又屬於B。

並集:集合A與集合B的交集就是某個集合中,元素x屬於A或者屬於B。

補集:集合A的補集就是指某個集合中,元素x屬於全集合U但不熟與集合A。(全集必須要定義,前面證明過,沒有絕對的全集

恆等式就是指某些集合恆定相等的式子,這些公式可以利用邏輯證明的知識來推導。想要證明某個恆等式成立,那就要證明等號兩邊的兩個集合相等,證明集合相等的通用辦法就是證明兩個集合互爲子集。另外一種簡單粗暴地方式就是成員表

 德摩根定律:\overline{A\bigcap B}=\overline{A}\bigcup \overline{B}    (這裏“——”意思是補集,倒U是交集,U是並集)

邏輯推論如下:

1.\overline{A\bigcap B}也就是一個集合,集合中的元素x不屬於A和B的交集。

2.也就是說x不屬於A或者x不屬於B(交集的定義)。

3.進一步推理,x屬於A的補集或者x屬於B的補集(補集的定義)。

4.那麼x屬於A的補集和B的補集的並集(並集的定義)。

成員表的方法如下:

圖片取自百度百科,這就是利用真值來判斷。當兩個集合的真值表中每一個可能性真值都一樣,那麼就說明兩個集合相等。

注意:這裏的真值指的是任意元素x是否屬於這一列的集合,舉個例子:第一行的意思是,元素x不屬於A(A列的真值爲0)也不屬於B,這種情況下x是否屬於其他列的集合。

1.3計算機中的集合

計算機中的集合往往可以用於存儲信息,也可以用於集合運算。在集合運算時會利用布爾代數,也就是計算機中的或、且、非、異或運算。

另外,在存儲時同樣按照樸素集合論的要求,集合中某個對象只能存在一個。所以C++中的set就可以利用紅黑樹來作爲數據結構。這樣的集合在搜索時只需要耗費常數時間。當然也可以設定集合中的同一個元素不止出現一次。也就是多重集,那麼每個元素都會有一個出現次數,我們叫做重數,這種集合就可以使用到C++中的map。map中有一個值key,key也是唯一的,但是每個key值對應一個value,value是數字可以當成重數。同樣map的結構和set沒有什麼區別,只是map以key來排序後續接上一個value。

模糊集:模糊集合中的元素也有類似於重數的概念,但是每個元素可以有多個重數,而且這些數可以不是整數。在社會網絡,聚類算法中都應用甚廣。

2、函數

從初中開始我們對函數就耳濡目染,學習了編程之後我對函數的理解就是輸入一個值進入函數,函數就返回一個值。

不過現在對函數的理解變爲了映射,函數是從某一個集合映射到另一個集合的關係。先來看看書上的一些定義。

函數:令A和B爲非空集合,f是從A到B元素的一種指派,即a是A中的元素,b是B中的元素,有唯一的b,f(a)=b。

定義域:集合A就是函數f的定義域。

陪域:集合B是函數f的陪域。

在應用時,函數需要理解的概念不多。但是我們對函數必須有一些思考,不能廉價的認爲函數就是某個公式然後代入數字計算。我們將函數想象成映射或者是轉換。

例如函數中有定義一對一函數和映上函數:

一對一函數:符合a!=b 則 f(a)!=f(b) ,那麼f是一對一函數。

映上函數:對於陪域B中每一個元素b,都有f(a)=b。那麼f是映上函數。

這些定義看上去沒有太多意義,其實這可以表達很多實用的現象和問題。例如函數有一個是否可逆的問題。

如何去判斷一個函數是否可逆呢?如果你能想象一個函數就是一種轉換,那麼就很輕鬆的想到函數是否可逆取決於轉換過程中信息是否丟失。這一點十分的好理解,假設存在a!=b 但是y=f(a)=f(b)。那麼這時已知y和f也不能知道原來的參數究竟是a還是b。這樣的情況下函數就不可逆。所以當陪域中對象的數量大於定義域對象的數量時,函數一定不可逆。自然一對一函數就是可逆的,因爲每個a都對應了單獨的b。

陪域也是老是被人誤解成值域。值域指的是集合A被函數f映射之後的所有元素的集合。例如A={1,2,3} ,f(x)=x+2。那麼計算每一個a,得到3,4,5三個數。那麼{3,4,5}就是f的值域。而f的陪域可以是任何集合,當陪域等於值域時,就叫f是映上函數。

3、序列與求和

序列是元素的有序列表,在計算機中我們常常要解決序列和問題。例如等比數列(幾何級數): a,a*r,a*r^2.........a*r^n。

等差數列(算數級數):a,a+d,a+2d,a+3d........a+nd。這些都是大部分人有所接觸的數列了,當然序列不會只是這兩種就能概括的。例如斐波那契數列  f(n)=f(n-1)+f(n-2)    f(1)=1  f(2)=1。

1、遞推關係

一個遞推關係和初始條件就可以確定一個序列。就像斐波那契數列,初始條件就是f(1)=1,f(2)=1。遞推關係就是f(n)=f(n-1)+f(n-2)。所以說,尋找一個序列的遞推關係是非常重要的。我們需要給序列的每一項都找到一個顯示公式,也叫閉公式。這樣才能找到遞推關係的解。下面將引用書上的例子:

例如:an=a(n-1)+3  a0=3。 

已知an的遞推關係以及初始條件a0=3。利用迭代法來在反覆利用遞推關係。

正向替換:a0=3             a2=2+3          a3=2+3*2            a4=2+3*3   .............. an=2+3(n-1)

反向替換:an=a(n-1)+3=a(n-2)+3*2..............=a0+3(n-1)  

正向替換就是從第0項開始一直迭代到第n項時的通項,反向替換則是從第n項與第n-1項的關係一直迭代到第一項。

再舉一個稍微複雜一些的例子:

漢諾塔:相信漢諾塔是大家都很熟悉的問題,這裏不多贅述問題本身,n個盤子的漢諾塔有遞推關係:a(n)=2a(n-1)+1   T(n)表示n個盤子移動需要多少步,那麼我們用迭代法來尋找其顯示公式。

正向替換:a0=1    a2=2*1+1   a3=2*(2*1+1)+1=2^4+2+1    a4=2*(2*(2*1+1)+1)+1=2^3+2^2+2+1   an=2^(n-1)+2^(n-2)+....1

an=2^n -1 

反向替換:an=2a(n-1)+1

                      =4a(n-2)+2+1

                      =8a(n-3)+4+2+1

                      =...........=2^(n-1)a0+2^(n-2)+.....1 =   2^n -1

這便是迭代法的大致思路,不過迭代法具有很大的限制,而且迭代法使用時往往考驗我們的經驗。

2、求和

關於求和\sum符號的性質我認爲不需要多做贅述和證明,因爲求和符號就是指多項序列相加。拆開求和符號思考就和加法的性質差不多。值得寫的是多種數列的求和公式。

幾何級數:\sum_{k=0}^{n}ar^k (r!=0)=\frac{ar^n+1-a}{r-1} (r!=1)      這裏因爲公式編輯器的問題,右邊式子中應該是ar^(n+1)   而不是ar^n+1。

至於如何證明,我目前只是看懂了證明的過程,沒有搞清楚其中的思維不過依舊寫下來以備後用。

Sn=\sum_{j=0}^{n}ar^j

rSn=r\sum_{j=0}^{n}ar^j

         =r\sum_{j=0}^{n}ar^j+1(這裏依舊是公式編輯器問題,應該是ar^(j+1))

         =r\sum_{k=1}^{n+1}ar^k

         =r\sum_{k=0}^{n}ar^k+(ar^k+1-a)(同上是ar^(k+1),另外這個過程中從求和式中提取一個k=n+1項,增加了一個k=0項)

rSn=Sn+(ar^k+1-a)

Sn=\frac{ar^n+1-a}{r-1} (r!=1)

這是幾何級數求和公式的全部證明過程。

3、其他重要的求和公式

\sum_{k=1}^{n}k=\frac{n(n+1)}{2}

\sum_{k=1}^{n}k^2=\frac{n(n+1)(2n+1)}{6}

\sum_{k=1}^{n}k^3=\frac{n^2(n+1)^2}{4}

還有幾個涉及無窮的級數

\sum_{k=0}^{\infty }x^k=\frac{1}{1-x} (|x|<1) 

\sum_{k=1}^{\infty }kx^k-1=\frac{1}{(1-x)^2} (|x|<1)  (此處是kx^(k-1))

這些無窮級數只需要一些簡單的微積分知識就能解決。

例如第一個無窮級數:我們令初始項a=1  r=x  那麼\sum_{k=0}^{n}x^k=\frac{x^k+1-1}{x-1} (|x|<1)(此處依舊是公式編輯器原因,分子是x^(k+1)-1)。因爲|x|<1   當k趨於無窮大時,x^(k+1)趨於0。那麼用0替換x^(k+1)就得到了閉合式。

序列和求和是計算機中很重要的一部分,我所寫到的只是很少的很淺顯的一部分,後續有機會還會繼續研究。

4、矩陣

線性代數中所討論的矩陣不在這裏討論,當然無論是矩陣乘法的原理還是思考方式,都很重要。最近我也在看MIT線代的公開課,也許之後會有相關博客。

這裏討論的是0-1矩陣矩陣中的元素非0即1。0-1矩陣是可以進行布爾運算的,在圖論中有應用(雖然現在我也不清楚)。

1、0-1矩陣的交和並:

矩陣A=\begin{bmatrix} 1 & 0 &1 \\ 0 & 1& 0 \end{bmatrix}                  B=\begin{bmatrix} 0 & 1 & 0 \\ 1& 1 &0 \end{bmatrix}

A V B=\begin{bmatrix} 1 \vee0 & 0 \vee1 &1 \vee0 \\ 0 \vee1&1 \vee1 &0 \vee0 \end{bmatrix}    =    \begin{bmatrix} 1 &1 &1 \\ 1& 1& 0 \end{bmatrix}

\wedge B=\begin{bmatrix} 1\wedge0 & 0\wedge1 &1\wedge0 \\ 0\wedge1&1\wedge1 &0\wedge0 \end{bmatrix}   =\begin{bmatrix} 0 & 0 &0 \\ 0 & 1& 0 \end{bmatrix}

2、0-1矩陣的布爾積和布爾冪:

0-1矩陣的布爾積和普通矩陣的乘積相似,不過\vee代替了加法,用\wedge代替了乘法

也就是說矩陣乘法和布爾積遵循同樣的規則,布爾積用\odot符號表示。A\odotB時,矩陣A爲n*k,則矩陣B必須是k*m。矩陣A的列必須等於矩陣B的行。

例如:A=\begin{bmatrix} 1 &0 \\ 0& 1\\ 1 & 0 \end{bmatrix}     B=\begin{bmatrix} 1 &1 &0 \\ 0& 1& 1 \end{bmatrix}     A\odotB=\begin{bmatrix} (1\wedge 1)\vee (0\wedge 0) & (1\wedge 1)\vee (0\wedge 1) & (1\wedge 0)\vee (0\wedge 1)\\ .. & .. &.. \\ .. & .. & .. \end{bmatrix}      =\begin{bmatrix} 1 &1 &0 \\ 0&1 &1 \\ 1& 1 & 0 \end{bmatrix}

 

布爾冪:布爾冪類似於矩陣求冪,矩陣A的r次冪:A^r=A\odot A\odot A.....\odot A  (此處r個A求布爾積)

布爾冪在計算機網絡和圖論中都有所應用,但是我還沒有用到過,這些都是書上寫的。

 

 

結語

離散數學中的結構應用在計算機時直接決定了算法的“形狀”。也就是說結構決定使用什麼樣的算法,算法是建立在數據結構之上的,數據結構就是建立在這些基礎結構上的。其實這些基礎結構都有許多的基礎結論和研究,在應用時我們往往不需要過於糾結其中的部分基礎理論,而是讓這些結論給與我們思考,讓我們真正理解其中的含義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章