给出电阻器邻接列表计算总电阻

时间:2016-05-27 04:55:46

标签: java algorithm graph-theory

我需要解决的问题是在给定连接电阻列表的情况下计算电路的总电阻(如果将电阻视为节点,则为邻接列表)。

例如,在以下电路中:

Resistor example

列表如下:

<style type="text/css">
      h1 {
        position: absolute;
        text-align: center;
        width: 100%;
        font-size: 6em;
        font-family: Roboto;
        transition: all 0.5s;
      }

      @media screen and (min-width: 0px) and (max-width: 400px) {
        background-color: red;
      }
      @media screen and (min-width: 401px) and (max-width: 599px) {
        background-color: green;
      }
      @media screen and (min-width: 600px) {
        background-color: blue;
      }
    </style>

每个电阻都有一个ID及其电阻值。连接元组存储在具有R1 -> R2 R1 -> R3 R2 -> R4 R3 -> R4 getFrom方法的结构中。

到目前为止我开发的递归算法考虑了2个任意电阻之间的总电阻的计算:

getTo

问题在于,当电路中存在分支时,算法无法确定何时完成并复制某些组件(在示例中R4被认为是两次)。

任何想法如何解决这个问题或用另一种方法解决问题?

2 个答案:

答案 0 :(得分:0)

我会通过递归减少节点来解决这个问题,而不是电阻

  • 从第一个和最后一个节点开始
  • 是否有中间节点?
  • 否 - &gt;你完成了。返回(一个或没有)中间电阻器的电阻
  • 是的,有中间节点 - &gt;通过递归减少中间序列/并行节点来减少。

为最简单的串联/并联节点(2个并联和2个系列)定义reduce函数。所有其他人最终都会减少到这些。

答案 1 :(得分:0)

您需要考虑两种操作:

  • 减少并联电阻
  • 减少串联电阻

对于并联电阻,您必须考虑电阻

如果两个电阻器在一侧共用一个连接并在另一侧共享另一个连接,则可以减少它们

对于串联电阻,您必须考虑节点

如果节点只连接了两个电阻电阻,则可以减少它们

算法将是:

boolean isStillWorking = true;
do{
    boolean foundParallel = reduceParallel();
    boolean foundSerial = reduceSerial();
    isStillWorking = foundParallel | foundSerial;
}while(isStillWorking);