算法找到最有效的并行发送数据的方式
Algorithm to find most efficient way to send data parallely
有 2 台计算机 A 和 B.计算机 A 可以以 x MB/s 的速度发送数据
,计算机 B 可以以 y MB/s 的速度发送数据。
示例 - 如果 x = 20、y = 10 和 Z = 100,则最短时间为 4 秒,因为计算机 A 可以在 4 秒内发送 80 MB 数据,B 可以在 2 秒内并行发送 20 MB 数据。
下面给出的算法的时间复杂度为 O(n^2)。我们如何以更有效的方式解决它?
编辑 - 如何为n台计算机完成并找到从每台计算机发送的数据?
我的解决方案 -
int main()
{
int x = 50;
int y = 10;
int Z = 200;
vector<int> xvec, yvec;
for(int i = x;i <= Z; i+= x)
{
xvec.push_back(i);
}
for(int i = y;i <= Z; i+= y)
{
yvec.push_back(i);
}
for(int i = 0; i < xvec.size(); i++)
{
for(int j = 0; j < yvec.size(); j++)
{
if(xvec[i] + yvec[i] >= Z)
{
cout << "min time : " << i+1;
exit(0);
}
}
}
}
如果问题是真的要为这两个节点计算它,那么对你的问题的评论很好。如果问题是针对任意数量的节点进行计算,那么您的问题就是图中流问题的一个实例。因此,将您的问题编码为图形并使用已知的标准算法,例如,福特-富尔克森 O(|V|*|E|u_{max}), 埃德蒙·卡普 O(|V||E|^2),或 Dinic O(|V|^2*|E|)。找到最大流量后,您可以将数据量除以最大流量。
如何为n台计算机完成?
逻辑z/(x1+x2+...+xn)
是理解逻辑的最有效和最简单的方法。
使用函数ceil
将提供您拥有用于许多计算的剩余部分,例如 50 MB 和 3 台速度为每秒 5 MB、4 MB 和 2 MB 的计算机。计算后,您可能的最小时间是50/(5+4+2)=4.54
,系统将在 4 秒后再等待一秒钟来处理0.54 s
部分(将决定执行哪台计算机 - 可能是最快的计算机)。
相关文章:
- 在c代码之间共享数据的最佳方式
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 我可以使用哪种数据结构来处理这种方式
- 打印从SQLite3数据库检索的数据C++与命令行中相同的方式
- 如何以"union-like"方式更改C++向量的数据类型
- DLL共享数据的推荐方式是什么
- C++中数据初始化的不同方式
- 使用 QT C++过滤大数据的最佳方式
- 优化使用 C++ 查询 SQLite DB 中超过 5000 万条数据记录的方式
- 数组数据以错误的方式遍历 Python/Matlab
- 这种抽象模板矩阵类数据类型的方式好吗?
- 返回二进制数据的通用方式,而无需原始指针
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 以面向对象的方式解析自定义数据包
- 如何将 boost::beast 中的序列化数据转换为字符串,以便我可以以 FIFO 方式处理它?
- Qt中数据类(模型)和视图/控制器类之间的数据通信的正确方式是什么
- 如何使用 c++ 以编程方式读取地理数据
- C++模板方法选择正确的数据打印方式
- 计算差异数据并通过网络发送的最佳方式是什么
- 算法找到最有效的并行发送数据的方式