【发布时间】:2015-01-17 16:56:42
【问题描述】:
我有一个由无向图表示的电阻网络,其边代表电阻值。一些节点称为驱动程序,一些节点称为接收器,其他节点是内部节点。目标是计算从每个驱动器到每个接收器的有效阻力。该图可以有循环,星三角网络。所以可以用下面的公式来计算有效电阻。
请注意,如果图形没有任何循环,那么简单的 DFS 遍历将为每个接收器提供一个驱动器有效电阻。但如果它有循环,则必须删除循环。一种方法是将图形复制到临时图形中,然后使用上述公式从临时图形中删除除驱动程序和接收器之外的所有节点。对所有驱动接收器对执行此操作,但这种方法对于大型密集图非常耗时。通过将图形存储在 tcl 哈希表或 std::tr1::unordered_map 中,我得到了这么长的运行时间。
您对计算每个驱动器对每个汇电阻的有效方法有任何想法吗?
我有一个低效的解决方案,即 每个接收器的每个驱动程序 将原始图复制到临时图 然后使用我上面提到的 wiki 文章从临时图中删除除源和接收器之外的所有节点。 最终的临时图表将给出该源和该汇之间的有效阻力。 此解决方案的运行时间对于大输入数据是不可接受的,因此我需要更好的解决方案。
【问题讨论】:
-
正确的方法应该是执行Nodal analysis而不是图形转换。
-
我没有查看 wiki 文章,但为什么不计算生成树呢?例如 DFS 生产的那个?
-
我认为您可以将此建模为
max flow问题,其中流动是阻力并计算路线 -
我不知道如何对这个问题进行节点分析,因为不存在电压,只给出了电阻网络。另外我不认为生成树,最大流量可以解决这个问题。你能解释一下这些将如何解决我的问题吗?
-
1.指定源节点为1V,汇节点为0 2.进行节点分析,得到总电流
I3.R = V / I = 1 / I
标签: c++ algorithm data-structures graph