我需要解决的问题是计算电路的总电阻,给出连接电阻的列表(如果把电阻看作节点,则为邻接表)。
例如,在以下电路中:

清单将如下所示:
R1 -> R2
R1 -> R3
R2 -> R4
R3 -> R4每个电阻器都有一个ID和它的电阻值。连接的元组存储在具有getFrom和getTo方法的结构中。
到目前为止,我开发的递归算法考虑了两个电阻之间的总电阻的计算:
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;
}问题是,当电路中有一个分叉时,算法无法确定它何时完成并复制了一些componentes (在示例中,R4被考虑了两次)。
有什么办法解决这个问题或者用另一种方法解决问题吗?
发布于 2016-05-27 05:33:28
我将通过递归地减少节点,而不是电阻来解决这个问题。
为最简单的串联/并行节点(2个并行和2个串联)定义约简函数。所有其他的最终都会减少到这些。
发布于 2016-05-27 08:03:49
有两个手术要你考虑:
对于并行电阻,您必须考虑电阻。
如果两个电阻器在一边共用一个连接,而在另一边共享另一个连接,你可以减少它们。
对于串行电阻,您必须考虑节点。
如果一个节点只有两个大小电阻连接,则可以减少它们。
藻类将是:
boolean isStillWorking = true;
do{
boolean foundParallel = reduceParallel();
boolean foundSerial = reduceSerial();
isStillWorking = foundParallel | foundSerial;
}while(isStillWorking);https://stackoverflow.com/questions/37475125
复制相似问题