Chord arranges vertices (nodes) in a circle. Each node remembers its successor (and predecessor to support joining/leaving nodes), and log-N nodes distance from it.
k
2
In[]:=
chordFingerGraph[nodeCount_,opts___]:=Graph[Range[nodeCount],Catenate[Table[nMod[n+,nodeCount,1],{n,nodeCount},{k,0,Max[Log2[nodeCount-1],-1]}]],opts]
k
2
In[]:=
chordConnectivityGraph[args___]:=UndirectedGraph[chordFingerGraph[args]]
In[]:=
chordFingerGraph[8,VertexLabelsAutomatic,GraphLayout{"CircularEmbedding","OptimalOrder"False}]
Out[]=
Compare to cube-connected graphs:
In[]:=
cubeConnectedGraphs=PrependTable[GraphData[{"CubeConnectedCycle",n}],{n,3,5}],
Out[]=
For the same number of nodes, we get:
In[]:=
Join[{{"Cube-connected","Chord circular layout","Chord Automatic layout"}},{#,chordConnectivityGraph[VertexCount[#],GraphLayout{"CircularEmbedding","OptimalOrder"False}],chordConnectivityGraph[VertexCount[#]]}&/@cubeConnectedGraphs]//Grid
Out[]=
They are not isomorphic:
In[]:=
IsomorphicGraphQ[#,chordConnectivityGraph[VertexCount[#]]]&/@cubeConnectedGraphs
Out[]=
{False,False,False,False}