假设我有一组需要成对处理的数据(对元素的顺序无关紧要,所以这些是组合,而不是排列),我想利用多个线程来这样做。但是,我受到限制,每条数据一次只能由一个线程处理。我正在寻找一种能够提供良好分区策略的算法,通过该策略我可以将数据对分配给线程,同时针对任何大小的数据集一次覆盖可能组合的整个空间。假设每个可能对的处理时间相等。
例如,假设我有 6 条数据:D0、D1、D2、D3、D4 和 D5。
为了优化处理这些,我会做这样的事情:
Thread 1 Thread 2 Thread 3
Time Slot 1 (D0,D5) (D1,D4) (D2,D3)
Time Slot 2 (D0,D4) (D1,D3) (D2,D5)
Time Slot 3 (D0,D3) (D1,D2) (D4,D5)
Time Slot 4 (D0,D2) (D1,D5) (D3,D4)
Time Slot 5 (D0,D1) (D2,D4) (D3,D5)
同理,对于8条数据:D0、D1、D2、D3、D4、D5、D6、D7
Thread 1 Thread 2 Thread 3 Thread 4
Time Slot 1 (D0,D7) (D1,D6) (D2,D5) (D3,D4)
Time Slot 2 (D0,D6) (D1,D5) (D2,D4) (D3,D7)
Time Slot 3 (D0,D5) (D1,D4) (D2,D3) (D6,D7)
Time Slot 4 (D0,D4) (D1,D3) (D2,D7) (D5,D6)
Time Slot 5 (D0,D3) (D1,D2) (D4,D6) (D5,D7)
Time Slot 6 (D0,D2) (D1,D7) (D3,D6) (D4,D5)
Time Slot 7 (D0,D1) (D2,D6) (D3,D5) (D4,D7)
以上是我自己手工计算出来的,但是我必须使用的过程对于每个都略有不同,因此似乎很难转换成代码来为更大的数据集生成这些。有什么想法可以让算法正确有效地生成这些对吗?试图寻找解决方案,但不确定如何更好地表达问题以获得我正在寻找的结果。