グラフ理論

  • まずは、ブログの最初にある、k次元超立方グラフ(こちら)
module Main (main) where
import Math.Combinatorics.Graph
main = print $ q 2
    • Gのあとに、二つのリストがあって、第一のリストはベクトル型、第二のリストは、長さ2のベクトルのリスト。第一のリストはノードのリスト、第二のリストはノードペア=エッジのリスト
G [0,1,2,3] [[0,1],[0,2],[1,3],[2,3]]
  • これがどうなっているか、と見ると、qという関数の背後にq'という関数があり、それは、k次元の[0,1]の総当たりをしつつ、隣接ノードにだけエッジを発生させている
  • その上で、q'が利用したノードが「座標」だったので、それをノードIDに変換するために、二進法を使っている

>||haskell|

    • |q k is the graph of the k-cube

q :: (Integral t) => Int -> Graph t
q k = fromBinary $ q' k

q' :: (Integral t) => Int -> Graph [t]
q' k = graph (vs,es) where
vs = sequence $ replicate k [0,1] -- ptsAn k f2
es = [ [u,v] | [u,v] <- combinationsOf 2 vs, hammingDistance u v == 1 ]
hammingDistance as bs = length $ filter id $ zipWith (/=) as bs

    • can probably type-coerce this to be Graph [F2] if required

|