数学测验

时间:2014-03-18 06:36:48

标签: math graph

我确实有一对" managerworker"对于某些层次结构。 什么是关系总数" 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关系的连接总数。 这样做有什么特殊的方法吗?

2 个答案:

答案 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

根据您的数据存储方式以及您使用的语言,可能会有更有效的方法。