如何从阻力网络中移除循环
How to remove cycles from a resistance network
我有一个由无向图表示的电阻网络,其边缘表示电阻值。某些节点称为驱动程序,某些节点称为接收器,其他节点是内部节点。目标是计算每个驱动器到每个灌电流的有效电阻。图形可以有周期,星三角洲网络。因此,可以使用以下公式来计算有效电阻。
维基文章
请注意,如果图形没有任何周期,则简单的DFS遍历将为每个灌电流提供驱动器有效电阻。但如果它有周期,那么必须删除周期。一种方法是将图形复制到临时图形中,然后使用上述公式从临时图形中删除除驱动程序和接收器之外的所有节点。对所有驱动程序接收器对执行此操作,但此方法对于大型密集图非常耗时。我通过将图形存储在 tcl 哈希表或 std::tr1::unordered_map
中来获得如此长的运行时间。
驱动器到每个灌电流电阻的有效方法有什么想法吗?
我有一个低效的解决方案,即对于每个接收器的每个驱动程序 将原始图形复制到临时图形中 然后使用我上面提到的 wiki 文章从临时图形中删除除该源和接收器之外的所有节点。 最终的临时图将给出该源和该汇之间的有效阻力。对于大型输入数据,此解决方案的运行时间是不可接受的,因此我需要更好的解决方案。
要计算每个驱动器到每个接收器的有效电阻,您无需执行图形转换。相反,您可以
- 对于每对驱动器和接收器,将驱动器节点分配为 1V,将接收器节点指定为 0
- 执行节点分析,这只需要线性方程公式。您可以获得从驱动器到接收器的电流
I
。 - 根据定义,有效电阻
R = V / I = 1 / I
.
相关文章:
- 如何循环打印顶点结构
- 我的神经网络不起作用 [XOR 问题]
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- CAFFE转发网络在for循环中不起作用
- 在 C++14 中的 for 循环中并行网络下载
- 如何处理过快的网络循环
- 如何从阻力网络中移除循环
- 如何在其他类的嵌套循环中获得主事件循环QCoreApplication,以实现网络操作