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

本文关键字:分配 计算 作业 之间 客户端 | 更新日期: 2023-09-27 17:59:37

我遇到了一点问题。

我有一个输入:"/0-9/0-9/09/0-9"。在这种情况下,它有10^4的可能性。

我的程序对其进行分析,计算所有排列,并打印输出。在我们的情况下,输出为:00010002。。。9999

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

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

再举一个例子:我有两个有关系的客户。我的输入是/0-9/0-9/09/0-9/所以我会发送:

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

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

如何在n个客户端之间平均分配?

tnx

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

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

Items per client = 10^4 / N

N = 20,然后说Items per client = 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之间,您将在第三个区间上进行拆分