主題
Search

陣列


陣列是“列表的列表”,其中每個列表級別的長度相同。一個 d 維陣列的大小(有時稱為“形狀”)表示為 m×n×...×p_()_(d)。最常見的陣列型別是二維 m×n 矩形陣列,具有 m 列和 n 行。如果 m=n,則結果為方陣。有時,陣列中元素的順序很重要(如在矩陣中),而在其他時候,模反射(以及對於方陣的旋轉)等價的陣列被認為是相同的(如在幻方素數陣列中)。

Wolfram 語言中,深度為 n 的陣列使用巢狀列表表示,可以使用以下命令生成陣列[a, {i, j, ...}]。類似地,可以使用以下命令找到陣列的維度Dimensions[t],以及命令ArrayQ[expr] 測試表達式是否為完整陣列。例如,取

  t=Array[a,{2,2,2,3}]

給出深度為 4 的列表

  {{{{a[1,1,1,1],a[1,1,1,2],a[1,1,1,3]},
     {a[1,1,2,1],a[1,1,2,2],a[1,1,2,3]}},
    {{a[1,2,1,1],a[1,2,1,2],a[1,2,1,3]},
     {a[1,2,2,1],a[1,2,2,2],a[1,2,2,3]}}},
   {{{a[2,1,1,1],a[2,1,1,2],a[2,1,1,3]},
     {a[2,1,2,1],a[2,1,2,2],a[2,1,2,3]}},
    {{a[2,2,1,1],a[2,2,1,2],a[2,2,1,3]},
     {a[2,2,2,1],a[2,2,2,2],a[2,2,2,3]}}}}

維度為 {2, 2, 2, 3}

為了窮舉列出給定形狀的不同陣列的數量,其中每個元素都是 k 種可能選擇之一,透過遍歷每種情況並檢查它是否等價於較早的情況的樸素演算法幾乎已經是最高效的了。執行時間必須至少是答案的數量,這非常接近 k^(mn...p),以至於差異並不顯著。

然而,找到給定形狀的可能陣列的數量要容易得多,並且可以使用 波利亞列舉定理獲得精確公式。對於 m×n 陣列的簡單情況,即使這樣也證明是不必要的,因為只有幾種可能的對稱型別,允許顯式計數可能性。例如,考慮 mn 偶數且不同的情況,因此只需要包括反射。以一個具體案例為例,設 m=6n=4,因此陣列看起來像

 a b c | d e f; g h i | j k l; - - - + - - -; m n o | p q r; s t u | v w x,
(1)

其中每個 ab、...、x 可以取值從 1 到 k。可能的排列總數為 k^(24) (一般情況下為 k^(mn))。與其左右映象影像等價的排列數為 k^(12) (一般情況下為 k^(mn/2)),與其上下映象影像或旋轉 180 degrees 度也相同。還有 k^6 種排列(一般情況下為 k^(mn/4))具有完全對稱性。

一般來說,因此以下公式成立

 {k^(mn/4)   with full symmetry; k^(mn/2)-k^(mn/4)   with only left-right reflection; k^(mn/2)-k^(mn/4)   with only up-down reflection; k^(mn/2)-k^(mn/4)   with only 180 degrees rotation,
(2)

所以有

 k^(mn)-3k^(mn/2)+2k^(mn/4)
(3)

種排列沒有對稱性。現在除以每種型別影像的數量,對於 m!=nm,n偶數 的情況,結果為

N(m,n,k)=1/4k^(mn)+(1/2)(3)(k^(mn/2)-k^(mn/4))+1/4(k^(mn)-3k^(mn/2)+2k^(mn/4))
(4)
=1/4k^(mn)+3/4k^(mn/2)+1/2k^(mn/4).
(5)

因此,數字的數量級為 O(k^(mn)/4),其中“校正”項的階數要小得多。


另請參閱

反幻方, 尤拉方陣, 柯克曼女學生問題, 拉丁矩形, 拉丁方陣, 幻方, 矩陣, 珀金斯夫人的被子, 乘法表, 正交陣列, 完全平方數, 素數陣列, 商差表, 房間方陣, 方陣, 斯托拉爾斯基陣列, 張量, 真值表, 向量, 威佐夫陣列

使用 探索

請引用本文為

Weisstein, Eric W. "陣列。" 來自 Web 資源。 https://mathworld.tw/Array.html

主題分類