【发布时间】:2016-05-27 04:55:46
【问题描述】:
我需要解决的问题是计算电路的总电阻,给定一个连接电阻列表(如果将电阻视为节点,则为邻接列表)。
例如在以下电路中:
列表如下所示:
R1 -> R2
R1 -> R3
R2 -> R4
R3 -> R4
每个电阻都有一个 ID 和它的电阻值。连接元组存储在具有getFrom 和getTo 方法的结构中。
到目前为止,我开发的递归算法考虑了计算 2 个任意电阻器之间的总电阻:
private double calculateResistance(Resistor c1, Resistor c2){
double res = 0;
for(ComponentConnection cc : getGraph()){
if(cc.getFrom().getId() == c1.getId()){
if(cc.getTo().getId() == c2.getId())
return c1.getRes() + c2.getRes();
res += (1/calculateResistance(cc.getTo(),c2));
}
}
return c1.getRes() + 1/res;
}
问题在于,当电路中有分叉时,算法无法确定何时完成并复制一些组件(在示例中,R4 被考虑两次)。
任何想法如何解决这个问题或用另一种方法解决问题?
【问题讨论】:
-
这真的是only关于算法的吗?您是否考虑过所有奇怪的情况,例如 R1->R2、R2->R3、R3->R4、R4->R1?我认为这比您的简单示例所暗示的要困难得多。
-
前面有一个步骤是判断一个电路是否有效,这个函数只对有效电路使用,那么就不用担心这些情况了。
-
嗯,好的。 R1->R2,R3,R4->R5 怎么样?还是R1->R2+R3,R4+R5->R6?
-
我不确定你是否正确地处理了这个问题。可以计算任意 2 个节点之间的电阻,其中一个节点是电路中的(非电阻)点。计算 两个电阻之间的电阻没有意义(除非您的意思是包容性)。计算超过两个电阻的电阻确实...
-
我怀疑这本质上是递归的。您必须依次将并联电阻减小到其等效值,并将串联电阻减小到它们的总和,直到只剩下一个电阻。它在关闭之前是迭代的,而不是递归的。
标签: java algorithm graph-theory