
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D ' U N H Y P E R C U B E D E D I M E N S I O N ' N ' : */
/* */
/* */
/* Definition ('v $xtc/hyper_cube.02$c') : */
/* */
/* Un cube peut etre defini par ses aretes et donc */
/* par des couples de sommets adjacents. Chacun d'entre-eux */
/* sera identifie par 'XYZ' ou 'X', 'Y' et 'Z' sont ses */
/* coordonnees que l'on suppose valoir 0 ou 1. Elles */
/* peuvent alors etre aussi considerees comme des bits */
/* et donc ces 3 bits 'XYZ' seront un numero des sommets */
/* entre 0 et 7... */
/* */
/* */
/* 011 ----------------------------- 111 */
/* /. /| */
/* / . / | */
/* / . / | */
/* / . / | */
/* / . / | */
/* / . / | */
/* / . / | */
/* / . / | */
/* / . / | */
/* 010 ----------------------------- 110 | */
/* | . | | */
/* | . | | */
/* | . | | */
/* | . | | */
/* | . | | */
/* | . | | */
/* | . | | */
/* | 001. . . . . . . . . . | . . . . | 101 */
/* | . | / */
/* | . | / */
/* | . | / */
/* Y^ | . | / */
/* | | . | / */
/* | Z | . | / */
/* | / | . | / */
/* | / | . | / */
/* |/ |. |/ */
/* O--------> 000 ----------------------------- 100 */
/* X */
/* */
/* */
/* On note alors que les deux sommets {n1,n2} */
/* definissant une arete sont codes par les memes */
/* bits sauf un. Le "ou exclusif" de leurs numeros */
/* ne contiendra donc qu'un seul bit 1, tous les autres */
/* etant nuls. Il correspondra a une puissance de 2, */
/* ce qui implique que son logarithme en base 2 */
/* sera un nombre entier. */
/* */
/* C'est donc ainsi que sera defini un hypercube */
/* de dimension N. Voici donc la procedure : */
/* */
/* 1-Generer la liste L1 des entiers 'n' dans [0,(2^N)-1]. */
/* */
/* 2-Generer la liste L2 des couples differents {n1,n2} */
/* 'n1' et n2' appartenant a L1 et l'ordre etant indifferent. */
/* */
/* 3-Calculer pour tout couple {n1,n2} : */
/* */
/* A = log (n1.EOR.n2) */
/* 2 */
/* */
/* ('.EOR.' etant l'operateur "ou exclusif"). */
/* */
/* Si 'A' est un nombre entier, alors le couple {n1,n2} */
/* defini une arete de l'hypercube de dimension N. */
/* */
/* */
/* A titre d'exemple, voici la generation de */
/* l'hypercube de dimension 3 (c'est-a-dire le */
/* cube "standard") donnee par 'v $xtc/hyper_cube.12$c' : */
/* */
/* */
/* Generation de la liste des entiers de 0 a 7 (liste 'L1') : */
/* */
/* n */
/* */
/* 000 */
/* 001 */
/* 010 */
/* 011 */
/* 100 */
/* 101 */
/* 110 */
/* 111 */
/* */
/* */
/* Generation des aretes (liste 'L2') : */
/* */
/* n1 n2 */
/* */
/* EOR(000,001)=001 log2=0 arete={000,001} */
/* */
/* EOR(000,010)=010 log2=1 arete={000,010} */
/* EOR(001,010)=011 log2=1.584963 */
/* */
/* EOR(000,011)=011 log2=1.584963 */
/* EOR(001,011)=010 log2=1 arete={001,011} */
/* EOR(010,011)=001 log2=0 arete={010,011} */
/* */
/* EOR(000,100)=100 log2=2 arete={000,100} */
/* EOR(001,100)=101 log2=2.321928 */
/* EOR(010,100)=110 log2=2.584963 */
/* EOR(011,100)=111 log2=2.807355 */
/* */
/* EOR(000,101)=101 log2=2.321928 */
/* EOR(001,101)=100 log2=2 arete={001,101} */
/* EOR(010,101)=111 log2=2.807355 */
/* EOR(011,101)=110 log2=2.584963 */
/* EOR(100,101)=001 log2=0 arete={100,101} */
/* */
/* EOR(000,110)=110 log2=2.584963 */
/* EOR(001,110)=111 log2=2.807355 */
/* EOR(010,110)=100 log2=2 arete={010,110} */
/* EOR(011,110)=101 log2=2.321928 */
/* EOR(100,110)=010 log2=1 arete={100,110} */
/* EOR(101,110)=011 log2=1.584963 */
/* */
/* EOR(000,111)=111 log2=2.807355 */
/* EOR(001,111)=110 log2=2.584963 */
/* EOR(010,111)=101 log2=2.321928 */
/* EOR(011,111)=100 log2=2 arete={011,111} */
/* EOR(100,111)=011 log2=1.584963 */
/* EOR(101,111)=010 log2=1 arete={101,111} */
/* EOR(110,111)=001 log2=0 arete={110,111} */
/* */
/* */
/*************************************************************************************************************************************/