4 个顶点的竞赛图如下:
4 个队得分(获胜场数)为(2,2,1,1)由得分排名为{(1,2),(3,4)},该竞赛 图是双向连通图,可通过以下方法给出名次排序。
该图的邻接矩阵为:
得分向量为
s=A*ones
记 s (1)=s
s (k)=A*s(k-1)=Ak*ones, k=1, 2, …(s (k)称为 k 级得分向量)
对于 n≥4 个顶点的双向连通竞赛图,其邻接矩阵 A 为素阵(存在正整数 r,使 A r>0), 且有
其中, L 为全 1 列向量,λ为最大实特征根且为正,s 为其特征列向量。
1.求元素互不相等的得分向量法
程序如下:
%文件名:fscore1.m
clear;clc;format compact;format short g;
A=[0 1 1 0;0 0 1 1;0 0 0 1;1 0 0 0];%邻接矩阵
s=A*ones(size(A,2),1);k=1;
n=length(s);
while 1
i=1;
while i<=n-1 & all(s(i+1:n)-s(i)~=0)
i=i+1;
end
if i==n
break;
end
s=A*s; k=k+1;
end
k % k级得分向量
s %元素不等的得分列向量
[ss,kk]=sort(s,'descend'); %降序
kk %排名
结果:
2. 特征根法
%文件名:fscore2.m
clear;clc;format compact;format short g;
A=[0 1 1 0;0 0 1 1;0 0 0 1;1 0 0 0];%邻接矩阵
[V,D]=eig(A); %返回 A 的特征值和特征向量。
%其中 D 为 A 的特征值构成的对角阵,每个特征值
%对应的 V 的列为属于该特征值的一个特征向量。
DD=diag(D); %返回矩阵 D 的对角线元素构成列向量。
for i=1:length(DD) %复数特征值用 0 代替
if ~isreal(DD(i))
DD(i)=0;
end
end
[lamda,I]=max(DD);
lamda
s=V(:,I)/sum(V(:,I)) %最大特征根对应的特征列向量(归一化)
[ss,kk]=sort(s,'descend'); %降序
kk
结果:
3.编写一个程序,求出 1~8 级得分向量,并依据 8 级得分向量给出排名
%文件名:fscore3.m
clear;clc;format compact;format short g;
A=[0 1 1 0;0 0 1 1;0 0 0 1;1 0 0 0];%邻接矩阵
s=A*ones(size(A,2),1);k=1;
n=length(s);
while 1
i=1;
while i<=n-1 & all(s(i+1:n)-s(i)~=0)
i=i+1;
end
if k==8
break;
end
fprintf('==============================\n');
fprintf('%d级得分向量:\n',k);
disp(s);
s=A*s; k=k+1;
end
fprintf('==============================\n');
fprintf('%d级得分向量:\n',k);
disp(s);
[ss,kk]=sort(s,'descend'); %降序
fprintf('排名:\n',k);
disp(kk);
结果:
==============================
1级得分向量:
2
2
1
1
==============================
2级得分向量:
3
2
1
2
==============================
3级得分向量:
3
3
2
3
==============================
4级得分向量:
5
5
3
3
==============================
5级得分向量:
8
6
3
5
==============================
6级得分向量:
9
8
5
8
==============================
7级得分向量:
13
13
8
9
==============================
8级得分向量:
21
17
9
13
排名:
1
2
4
3