0001 function ssca2stats (inscale, seed)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 if nargin < 2
0056 seed = 1;
0057 elseif isempty(seed)
0058 seed = sum(100*clock);
0059 end
0060 rand('state',seed);
0061
0062 fprintf ('\n');
0063 fprintf ('SCALE #VERTICES #CLIQUES #EDGES #EDGES\n');
0064 fprintf (' UNDIRECTED DIRECTED\n');
0065 fprintf ('--------------------------------------------------------------\n');
0066
0067 for scale = inscale
0068
0069
0070 TotVertices = 2.^scale;
0071 ProbInterCliqueEdges = 0.5;
0072 ProbUniDirectional = 0.2;
0073 MaxParallelEdges = 3;
0074 MaxCliqueSize = floor(2.^(scale/3));
0075
0076
0077 ncliques = ceil(2*TotVertices/MaxCliqueSize);
0078 cliquesizes = 0;
0079 while sum(cliquesizes) < TotVertices
0080 ncliques = round(1.05 * ncliques + 1);
0081 cliquesizes = 1 + fix(MaxCliqueSize * rand(1,ncliques));
0082 end
0083 firstvtx = cumsum([1 cliquesizes]);
0084 ncliques = min(find(firstvtx > TotVertices)) - 1;
0085 firstvtx = firstvtx(1:ncliques);
0086 cliquesizes = diff([firstvtx TotVertices+1]);
0087 ncliques = length(cliquesizes);
0088
0089
0090 cedges = sum((cliquesizes .* (cliquesizes-1))/2);
0091
0092
0093 possibles = [];
0094 for dist = 2.^(1:(scale-2));
0095 prob = ProbInterCliqueEdges * (2 / dist);
0096 possibleedges = cliquesizes;
0097 possibleedges (cliquesizes > dist) = dist;
0098 possibles = [possibles fix(prob*sum(possibleedges))];
0099 end
0100 uedges = cedges + sum (possibles);
0101
0102
0103 dedges = fix((1 + (1-ProbUniDirectional)) * uedges);
0104
0105
0106 pedges = dedges;
0107 nnew = pedges;
0108 for dups = 2:MaxParallelEdges;
0109 prob = (MaxParallelEdges-dups+1) ./ (MaxParallelEdges-dups+2);
0110 nnew = fix(prob * nnew);
0111 pedges = pedges + nnew;
0112 end
0113
0114 fprintf ('%2d %15d %8d %15d %15d\n', ...
0115 scale, ...
0116 TotVertices, ...
0117 ncliques, ...
0118 uedges, ...
0119 pedges);
0120
0121 end
0122
0123 fprintf ('\n');