1. 程式人生 > >矩陣的妙用一例

矩陣的妙用一例

宿舍3哥們,小A,小B,小C都喜歡下片,在那個年代,網路上大部分片都是打包的。下完了就要解壓,一般解壓完了之後壓縮包就刪除掉了,免得佔空間。為了讓問題簡單點,我們假設解壓都是全部解壓出來的,而且解壓出來的檔案不會刪除。

問題:現在有一些統計資料,請你推測哪些片應該是同一個壓縮包的。

在3人電腦上統計的Film(簡寫為F)資料如下(0代表該電腦沒有這部片,1代表該電腦有這部片):

\ F1 F2 F3 F4 F5
A 0 1 1 1
0
B 1 1 0 0 1
C 1 0 1 1 1
當然,目測的話,我們會看到F1在B,C的機器上出現了(且只在BC的機器上出現),滿足這一條件的還有F5,所以我們可以推測F1和F5應該是一個壓縮包裡面的檔案。

同樣的道理,我們推測F3,F4應該是一個壓縮包裡的檔案,因為F3和F4同時出現在A,C的機器上且只出現在AC的機器上。

最後剩下F2,F2出現在A和B的機器上,但是A,B的機器上同時出現的檔案除了F2沒有其他檔案了。所以F2可能是一個孤立的檔案。

以上這個判斷過程,如果藉助矩陣,我們將更容易地判斷出來。過程如下:

我們首先把上面的0,1數值放到一個矩陣中,如下:


則A的轉置矩陣為:


將A的轉置矩陣乘以A得到結果為:


容易看出A的轉置矩陣乘以A得到的是一個對稱矩陣。

接下來我們求兩個檔案的相關性,我們這樣定義兩個檔案的相關性 P = ( S1、S2求交集 )/ ( S1、S2求並集)=  (S1∩S2)/ (S1∪S2) = (S1∩S2)/ (S1+S2-S1∩S2) 

其中檔案1出現在誰的電腦上的集合記為S1,檔案2出現在誰的電腦上的集合記為S2

上面式子中的S1、S2和S1∩S2其實我們都可以在 A的轉置矩陣乘以A得到的對稱矩陣(為了方便我們記做矩陣K

)中找到。

以求檔案1和檔案2的相關性為例:

S1 = 矩陣K的第1行第1列 = 2(表示檔案1在兩個人的電腦上存在,矩陣乘法中正好1*1=1)

S2 = 矩陣K的第2行第2列 = 2

S1∩S2 = 矩陣K的第1行第2列 = = 矩陣K的第2行第1列 (所以矩陣K必須是對稱矩陣)= 1 (表示檔案1和2都有的電腦只有一臺)

所以檔案1和2的相關性P = 1/(2+2-1) = 1/3

因為有5個檔案,所以共有C(5,2) = 10種組合。

這10種組合中,利用上面求相關性的公式:P = ( S1、S2求交集 )/ ( S1、S2求並集)=  (S1∩S2)/ (S1∪S2) = (S1∩S2)/ (S1+S2-S1∩S2)

最後得到P(F1,F5) = (2) / (2+2-2) = 1

        P(F3,F4) = (2) / (2+2-2) = 1

其他組合的相關性都達不到1。這與上面目測的結論一致。


(全文完)