2009年12月13日

物件導向?

最近在唸代數結構時 一直覺得「結構搭上操作」的形式很物件導向

1. 群
  不過就是個集合 搭上操作 GxG → G
(x, y)|→ x+y
  且此操作滿足一些條件

2. 環
  不過就是個加法交換群 搭上元素的乘法 GxG → G
                                      (x, y)|→ x*y
  且此操作滿足一些條件

3. 體
  不過就是個 可除交換環

4. 向量空間
  不過就是個 加法交換群 搭上 純量(體)乘法 FxV → V
                                          (r, v)|→ r*v
  滿足一些條件

5. 李代數
  不過就是個 向量空間 搭上 李括號 LxL →  L
                                  (x, y)|→ [x,y]
  滿足一些條件
───────────────────────────────────
題外話 之前我曾懷疑定義這些東西到底有沒有用啊
我現在的解釋是 這些東西幾乎涵蓋了所有本質上簡潔美麗的規則
所以任何學門
對於探討真理的本質時
只要那個本質夠美麗 層層溯源而上 必定會追溯到這些代數結構
───────────────────────────────────
我最近試圖把這些代數結構看成 c++ 的 class
(聽說是有人真的實做過了)

譬如說(有限)群 可能就是

class group{
    public:
        int order;              // 群中有多少元素
        int* element;           // 給群中所有元素一個編號
        int** op;               // op[x][y] 存 群中把x對y的操作丟到哪個元素

        // 建構函式
        group(int,int*,int**);  // 硬填值進去
          bool isGroup();       // 檢查填進去的值是否滿足群的運算公理
        group(int,int);         /* 前者是個元素 後者是該元素 order
                                      生成以該元素生成的 cyclic group */

        //一般性質
        bool isAbelian();
        bool isSolvable();
        bool isSimple();
        group centralizer(group);
        group normalizer(group);
        ....etc
};

而 環 體 向量空間 李代數便可以一層層疊上去
數學家不斷的發現這些 classes 中的性質函式並且維護程式碼
或是發明新的演算法來降低函式的運算複雜度

  譬如說
    isSimple() 這個函式在最初我們可能只能用 DFS 去搜所有可能的子集
               然後逐個子集判斷它是否 normal in G

    但是在有限單群分類定理出來以後 便看看它是否與 交替群、李群或26個例外同構

不過 我們是在替真理寫程式

沒有留言:

張貼留言