générer une masortingce distanciée pour un hypercube à n dimensions

Existe-t-il un algorithme ou une méthode permettant de générer la masortingce d’adjacence pour un hypercube pour une dimension quelconque? dire que votre entrée est 5, cela créerait un hypercube à 5 dimensions

tout ce que je peux trouver sont des sources de wiki

et wolfram

Si vous souhaitez générer les sumts d’un hypercube d’unité ND, vous pouvez créer une table de vérité à N valeurs. Voici un code que j’utilise pour cela:

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 

et pour obtenir les sumts d’un hypercube 5-D, appelez-le ainsi:

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

À partir de là, vous pouvez calculer la masortingce d’adjacence en recherchant tous les sumts qui ne diffèrent que d’un bit, c’est-à-dire:

 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