关于接近列表/集合操作的多线程实现的建议

时间:2017-03-09 17:25:10

标签: java multithreading algorithm set

我之前从未制作过多线程的Java程序,并且想知道我是否可以就如何处理我的任务获得一些建议。

任务描述:从一组对象(无重复项) OBJ 开始。对于 n 中的每个对象,从 OBJ 中删除 n ,其中 OBJ-n 。然后获取 OBJ-n i 大小的子集。我们将调用所有子集的集合 SUB 和每个单独的子集 SUB i 。将 n 添加到每个 SUB i 以获取 SUB i + n 。然后删除增加 SUB i + n 的总分(任意分数度量)的对象。如果从 SUB i + n 中删除的对象是 n ,请从 OBJ <删除 n / em>的。否则,使用 i = 1 继续对 OBJ 中的所有 n 进行此操作。对[em,i( OBJ )]范围内 i 的所有值重复此操作。

示例: OBJ = {A,B,C,D}开头。首先我们删除A并留下 OBJ-n = {B,C,D}。我们为 OBJ-n 创建了一组子集,即{{B},{C},{D}}。然后,我们将A添加到这些 SUB i 中的每一个,以获得{{A,B},{A,C},{A,D}}。我们遍历每个 SUB i + n 并删除增加 SUB i + n 。所以我们先来看看{A,B}。让我们说删除B会增加分数。由于 n 目前为A,因此我们不会从 OBJ 中删除A.我们转到{A,C},这次,发现删除A会增加分数,因此我们从 OBJ 中删除A.我们停止扫描所有 SUB i + n ,这意味着我们甚至不关心{A,D}。然后我们移动到 n 的下一个值,即B(注意A不再在 OBJ 中,所以我们在制作子集时不必关心它)并重复 OBJ 中的所有 n 。我们将 i 的整个过程从1重复到 OBJ 的当前长度。

由于我没有多线程经验,我很感激有关如何将此任务适当地分解为每个线程可以执行的作业的任何建议。我已经阅读了关于线程的监视器和同步但是我不太确定如何在我的实现中使用这些资源。谢谢你的帮助!

0 个答案:

没有答案