我遇到了一些问题。
我有一个输入:“/ 0-9 / 0-9 / 0-9 / 0-9”。在这种情况下,它有10 ^ 4种可能性。
我的程序分析它并计算所有排列,并打印输出。在我们的例子中输出是: 0001 技术 。 。 。 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
答案 0 :(得分:1)
如果您要均匀分配项目,我会通过弄清楚每个客户需要解决的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之间,您将在第3个间隔
分裂