2015-11-06 85 views
-1

对于作业分配,我负责在Java中实现Banker算法。Java Banker算法,找到安全序列

我想写一个函数,将确定是否资源(作为参数传递)的请求将导致安全状态,因此,可接受与否。

因此,对于每个请求,我模拟接受它,通过添加请求线程的资源总量,并从银行资源中拿走很多。

为了确定我是否处于安全状态,我遍历了其他线程,并检查了我是否理论上可以给他们足够的资源来完成,并且在他们“完成”之后,我收回他们的资源到银行,然后转到下一个资源,看看我是否无法处理它。如果我不能,我跳过它并检查下一个,然后我可能会重新访问最后一个。最终,我将有一个序列,我可以授予我正确的资源。

所以说我有螺纹:0 1 2 3 4 但安全序列可能类似于4 3 2 1(最坏情况)

我可以使用什么样的数据结构,这将让我不断迭代,直到我确定至少有一个安全序列?

它的工作是这样的:

Iteration1:0 1 2 3倍4

迭代2:0 1X 2 4

Iteration3:0X 2 4

Iteration4:2×4

迭代5:4x

因此,安全的顺序是:3,1,0,2,4 因此,当我迭代时,由于我每次“弹出”其中一个进程时该集合越来越小,因为我知道算法可以安全地选择下一个。

+0

为什么你不能只使用2d数组? – cjds

+0

,因为一旦我重复了一次,我就完成了。 –

回答

0

由于这是一个家庭作业问题,我猜你应该自己解决这个问题。但是,Dijkstra算法在很多地方都有很好的文档记录,包括所使用的数据结构。

如果您对Java中特定的数据结构实现有具体问题,以及它们是否适合特定的任务,我相信有很多人愿意帮忙。

+0

是的,我完全理解算法。我甚至可以提出这个问题,甚至没有提到它,但我认为让人们更容易想象。我需要帮助的是选择一个数据结构来做到这一点。 –