/*************************************************************************************************************************************/ /* */ /* 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} */ /* */ /* */ /*************************************************************************************************************************************/