0

任意の次元のハイパーキューブの隣接行列を生成するアルゴリズムまたは方法はありますか? あなたの入力が5だとすると、5次元のハイパーキューブが作成されます

私が見つけることができるのは wikiからのソースだけです

ウルフラム

4

1 に答える 1

3

ND ユニットのハイパーキューブの頂点を生成する場合、基本的には N 値の真理値表を作成できます。そのために使用するコードを次に示します。

function output = ttable(values)

  output = feval(@(y)feval(@(x)mod(ceil(repmat((1:x(1))', 1, numel(x) - 1) ./ repmat(x(2:end), x(1), 1)) - 1, repmat(fliplr(y), x(1), 1)) + 1, fliplr([1 cumprod(y)])), fliplr(values));
end

5-D ハイパーキューブの頂点を取得するには、次のように呼び出します。

vertices = ttable(ones(1, 5) * 2) - 1;

ここから、1 ビットだけ異なるすべての頂点を見つけることで、隣接行列を計算できます。つまり、次のようになります。

adj_list = zeros(2^5, 5);
adj_mat = zeros(2^5, 2^5);
for v=1:2^5
  L1_dists = sum(abs(vertices - repmat(vertices(v, :), 2^5, 1)), 2);
  adj_list(v, :) = find(L1_dists == 1);
  adj_mat(v, find(L1_dists == 1)) = 1;
end
于 2012-04-09T17:25:54.093 に答える