我的 C++ 客户端服务器项目需要一个数学公式

问题描述 投票:0回答:2

提前感谢您的帮助․我的 C++ 客户端服务器项目需要一个数学公式。

客户端部分有一个函数startDataGeneration(N, n, k),其中N是服务器应该生成或从文件中读取的数据总量,n是每次迭代想要的数据量从服务器发送到客户端的数据量,k是服务器上要丢弃而不发送到客户端的数据量。 我需要一个公式来计算来自服务器的数据量,以便在客户端中保留这么多内存。

  • 案例1:

    • N = 11,n = 3,k = 0。
    • 结果:将向客户端发送 11 条数据,这是 4 次迭代的结果:3 次迭代发送 3 条数据,最后一次迭代发送 2 条数据。
  • 案例2:

    • N = 11,n = 3,k = 3․
    • 结果:将向客户端发送 6 条数据,这是 2 次迭代的结果:将发送 3 条数据,其中 3 条数据将被跳过到第一次迭代,2 条数据将被发送到客户端。第二个。

这个公式不起作用․

n * ceil((N / (n + k)))

c++ algorithm math client formula
2个回答
0
投票

您可以使用 ceil((N / (n + k))) 找到迭代次数,并将其与 n 相乘以找到要发送的数据总数。但是,这会失败,因为有时在最后一次迭代时,您实际上发送的数据少于 n 条数据。

以下是解决这种情况的方法:

  1. 找到迭代次数,就像您已经做的那样。我们姑且称之为A吧。

    A = ceil((N / (n + k)))

  2. 查找A-1迭代后剩余的数据。我们姑且称之为B吧。

    B = N mod (n + k)

  3. 查找最后一次迭代将发送多少条数据。我们姑且称之为C吧。

    如果(B< n) then C = B; else C = n

  4. 最后找到要发送的总数据量。

    总计 = (A-1) * n + C


0
投票

我决定只编写一个函数来循环计算它

size_t TaskManager::countIncomingSamplesNumber(uint64_t N, uint64_t n, uint64_t k)

{ size_t 计数 = 0;

while (N >= n + k)
{
    N -= (n + k);
    Count += n;
}

Count += std::min(N, n);

return Count;

}

© www.soinside.com 2019 - 2024. All rights reserved.