如何在客户端之间平均分配计算工作

发布于 2024-11-16 05:35:27 字数 465 浏览 1 评论 0原文

我遇到了一点问题。

我有一个输入:“/0-9/0-9/0-9/0-9”。在本例中,有 10^4 种可能性。

我的程序分析它并计算所有排列,然后打印输出。在我们的例子中,输出是: 0001 0002 。 。 。 9999

问题是我有一个服务器应用程序(用 C# 编写)接收此输入,并假设在连接的客户端之间平均分配计算任务。最后每个客户都需要打印他的部分。

限制是服务器发送给客户端的任务格式必须是“/#-#/#-#/#-#/#-#/”格式 服务器可以向每个客户端发送多个任务,前提是所有客户端都获得相同数量的任务。

再举一个例子: 我有两个已连接的客户端。我的输入是/0-9/0-9/0-9/0-9/ 所以我会发送:

clinet1: /0-4/0-9/0-9/0-9/

clinet2: /5-9/0-9/0-9/0-9/

我如何均匀分配n 客户?

tnx

i got a bit of a problem.

I've got an input: "/0-9/0-9/0-9/0-9". in this case its 10^4 possibilities.

my program analyze it and calculate all the permutations, and prints the output. in our case the output is:
0001
0002
.
.
.
9999

the problem is that i have a server application (written in c#) that receives this input, and suppose to split the task of the calculation evenly between the connected clients. in the end each client need to print his part.

the limitation is that the format of the task sent by the server to the client must be in the format "/#-#/#-#/#-#/#-#/"
server can send more then one task to each client providing all the clients get same number of tasks.

one more example:
i got two connected clients. and my input is /0-9/0-9/0-9/0-9/
so i'll send:

clinet1: /0-4/0-9/0-9/0-9/

clinet2: /5-9/0-9/0-9/0-9/

how do i split evenly between n clients?

tnx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╰◇生如夏花灿烂 2024-11-23 05:35:27

如果要均匀分配项目,我会通过计算每个客户需要解决多少个 10^4 可能性来解决这个问题:

Items per client = 10^4 / N

N = 20,然后 < code>每个客户的商品数 = 500。所以现在你需要将输入分成 500 个组,

0-0/0-4/0-9/0-9  (0 - 499)
0-0/5-9/0-9/0-9  (500 - 999)
1-1/0-4/0-9/0-9  (1000 - 1499)
1-1/5-9/0-9/0-9  (1500 - 1999)
2-2/0-4/0-9/0-9  (2000 - 2499)
etc etc

当 N 不能均匀地分为 10^4 时,这会变得有点混乱,但你可以简单地将发送给每个客户端的作业数量向上舍入,以便客户端偶尔会在作业上重叠在间隔的端点

编辑:示例,如果 N = 3,则每个客户的项目数 = 3333.333。然后将每个舍入为 3000,最后一个舍入为 4000。

Client 1: 0-2/0-9/0-9/0-9
Client 2: 3-5/0-9/0-9/0-9
Client 3: 6-9/0-9/0-9/0-9

您可以推广此算法以均匀地分割项目。如果 N 介于 1-10 之间,那么您将分割第一个间隔。如果 N 介于 11-100 之间,那么您将分割第二个间隔。如果 N 介于 101 - 1000 之间,您将在第三个间隔进行分裂

I would approach this by figuring out how many of the 10^4 possibilities each client needs to solve if you were to distribute the items evenly:

Items per client = 10^4 / N

Say N = 20, then Items per client = 500. So now you need to break up the input into groups of 500

0-0/0-4/0-9/0-9  (0 - 499)
0-0/5-9/0-9/0-9  (500 - 999)
1-1/0-4/0-9/0-9  (1000 - 1499)
1-1/5-9/0-9/0-9  (1500 - 1999)
2-2/0-4/0-9/0-9  (2000 - 2499)
etc etc

This becomes a little messier when N does not divide evenly into 10^4 but you can simply round the # of jobs to send to each client up so that clients occasionally overlap on jobs at the endpoints of the intervals

Edit: Example if N = 3 then Items per client = 3333.333. Then round this down to 3000 each and have the last one do 4000

Client 1: 0-2/0-9/0-9/0-9
Client 2: 3-5/0-9/0-9/0-9
Client 3: 6-9/0-9/0-9/0-9

You could generalize this algorithm to split up the items evenly. If N is between 1-10 then you will be splitting the first interval. If N is between 11-100 then you will be splitting the 2nd interval. If N is between 101 - 1000 you will be splitting on the 3rd interval

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文