簡體   English   中英

給定電阻器鄰接表,計算總電阻

[英]Calculate total resistance given resistors adjacency list

我需要解決的問題是在給定所連接電阻器列表的情況下計算電路的總電阻(如果將電阻器視為節點,則為鄰接表)。

例如在以下電路中:

電阻示例

該列表如下所示:

R1 -> R2
R1 -> R3
R2 -> R4
R3 -> R4

每個電阻器都有一個ID及其電阻值。 連接的元組使用getFromgetTo方法存儲在結構中。

到目前為止,我開發的遞歸算法考慮了兩個電阻之間總電阻的計算:

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中被視為兩次)。

有什么想法可以解決此問題或通過其他方法解決問題嗎?

我將通過遞歸地減少節點而不是電阻來解決這個問題:

  • 從第一個和最后一個節點開始
  • 有中間節點嗎?
  • 否->完成。 返回(一個或一個)中間電阻器的電阻
  • 是的,有中間節點->通過遞歸地減少中間串聯/並聯節點來減少。

為最簡單的串聯/並聯節點(2個並聯和2個串聯)定義reduce函數。 所有其他最終將減少到這些。

您可以考慮以下兩種操作:

  • 減少並聯電阻
  • 減少串聯電阻

對於並聯電阻,您必須考慮電阻

如果兩個電阻器在一側共享一個連接而在另一側共享另一個連接,則可以減少它們

對於串行電阻,您必須考慮節點

如果一個節點僅連接了兩個隔離器,則可以減少它們

算法為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM