【发布时间】:2012-06-06 23:23:51
【问题描述】:
我有一个代理列表a = {a1, a2, a3,..., an},其中每个代理可以与零个或多个其他代理配对。例如,对于n = 6,我可以:
a1: a2, a3, a5
a2: a1, a3, a4
a3: a1, a2. a5
a4: a2
a5: a1, a3
a6:
每一对相互交互,每个代理都获得一个值作为交互的结果(例如,他们可以玩游戏,但交互的细节可以在这里抽象出来)。 我有兴趣根据给定的成对结构计算和存储这些交互的结果,例如上面。
显然,一个简单的算法是遍历每个代理,然后逐个计算与每个交互伙伴的成对交互。 但是,很明显这种方法会重复一些(或可能很多)计算。使用上面的示例:
当我们完成代理 a1 时,我们已经获得了 (a1, a2)、(a1, a3) 和 (a1, a5) 的结果,因此当我们为代理a2、a3和a5,
一种改进的算法是在两个维度(即沿着代理本身和沿着它们各自的伙伴)按升序对输入结构进行排序,如上例所示,因此对于每个代理(例如a3),我们只需要计算这个代理(a3)和比他“更高”的代理(a5)之间的交互,因为我们知道他和“低”伙伴之间的交互((a1, a3),@987654335 @) 已经计算过了。
我想知道这个问题是否有不同的更好的算法?更好是指在时间和空间方面更高效的计算。
【问题讨论】:
-
一旦你对某样东西进行排序,你的算法就会变成 O(n log(n)),所以输给任何 O(n) 实现
标签: python algorithm data-structures