Java Banker的算法,找到安全序列

时间:2015-11-06 00:49:36

标签: java algorithm

对于家庭作业,我的任务是用Java实现Banker的算法。

我正在尝试编写一个函数来确定资源请求(作为参数传递)是否会导致安全状态,因此是否可接受。

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

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

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

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

它的工作原理如下:

迭代1:0 1 2 3x 4

迭代2:0 1x 2 4

迭代3:0x 2 4

迭代4:2x 4

迭代5:4x

如此安全的顺序是:3,1,0,2,4 因此,当我正在迭代时,该集合变得越来越小,因为我正在"弹出"每次都有一个过程,因为我知道算法可以安全地选择下一个。

1 个答案:

答案 0 :(得分:0)

由于这是一个家庭作业问题,我猜你应该自己解决这个问题。

然而,Dijkstra的算法在许多地方都有很好的记录,包括使用的数据结构。

如果您对Java中的特定数据结构实现有特定的疑问,以及它们是否适合特定任务,我相信这里有很多人愿意提供帮助。