我确实有一对" manager
,worker
"对于某些层次结构。
什么是关系总数" manager, worker
"包括" manager, worker of my worker - my worker
"," worker of worker of my worker - my worker
"等关系等等...
例如:
Alex, Pete
Pete, Kane
Jones, Alex
Clark, Allen
连接总数为7:
Jones -> Alex -> Pete -> Kane
Jones -> Pete
Jones -> Kane
Alex -> Kane
Clark -> Allen
我必须计算约20k关系的连接总数。 这样做有什么特殊的方法吗?
答案 0 :(得分:0)
我认为在不分析结构的情况下,数学解决方案是不可能的 如果你已经对它进行了分析,可以直接计算它们 这是delphi中的解决方案,但您可以使用任何其他语言轻松翻译它。你只需用你的20k对来源填写字典。
program Project1;
uses
Generics.Collections;
function relationcount(dict:TDictionary<string,string>):Integer;
function _relationcount(_key:string):Integer;
begin
if dict.ContainsKey(_key) then
result:=1+_relationcount(dict.Items[_key])
else
result:=0;
end;
var k:string;
begin
result:=0;
for k in dict.Keys do
result:=result+_relationcount(k);
end;
var
relations:TDictionary<string,string>;
begin
relations:=TDictionary<string,string>.Create;
// replace this with your read from file algorithm //
relations.Add('Alex', 'Pete'); //
relations.Add('Pete', 'Kane'); //
relations.Add('Jones', 'Alex'); //
relations.Add('Clark', 'Allen'); //
// ----------------------------------------------- //
writeln(relationcount(relations));
end.
答案 1 :(得分:0)
当然有一个解决方案。基本上你要求每个人的主管人数总和。所以你可以做一些简单的事情
s = 0
for each worker w
for each worker v
if v is above w in the supervisory chain then s <- s+1
return s
根据您的数据存储方式以及您使用的语言,可能会有更有效的方法。