Java:递归算法(或迭代替代)

时间:2016-03-10 16:04:15

标签: java recursion

我很难尝试制定(递归)算法,该算法分析要在计划中执行的所有可能的任务组合。我的想法是,我需要找到一个替代的时间表。现在,我被告知可以通过递归算法轻松实现,该算法分析所有可能的组合并选择最便宜的解决方案。

我是基于解决方案的某个成本来做到这一点,我这样做是多么微不足道。在我的日程安排中,我有两台机器,我们称之为机器A和机器B以及一系列要执行的作业,进一步分为当前作业和预定作业。

输入:

ScheduledJobs: [Job 1, Job 2, Job 3, ..., Job N] (HashSet)
CurrentJobs: [Job 0, Job 00] (ArrayList)
Machines: [Machine A, Machine B] (ArrayList)

预期结果的形式为:

Hashmap
Machine A: Job0 | Job2 | Job3 | ... 
Machine B: Job00| Job1 | Job4 | Job5 | ...
Unassigned: Job6

因此我们可以将作业分配给机器A或机器B,或者当这些作业无法分配时取消它们。

然后我想到的算法的工作方式如下:我相信我可以通过说明一个系列的成本是工作成本+系列成本来找到最便宜组合的成本。类似的东西:

function(job1)
    for each job2 in set
        cost = job1.getCost() + function(job2)

在伪代码中:

public myObject function(job1, myObject){
    make copies of all input //name this copyOf
    for each job2 in the copyOfScheduledJobs do:
        if job2 can be scheduled after job1 {
            set the expected start time for job1
            cost = job1.getCost() + function(job2, myObject)
            if cost < value { // value is calculated by looping through the entire set and summing by getting getCost()
                 value()
                 add job2 to a list
            }
        } else if (!copyOfCurrentJobs.isEmpty())
            copyOfCurrentJobs.remove(0)
            nextCJ = copyOfCurrentJobs.get(0)
            copyOfCurrentJobs.remove(0)
            cost = cost + function(job2, myObject)
        } else {
            cost = job1.getCost()
        }
    }
    return myObject
}

使用这种算法,我发现只有一个绝对不是最佳的计划。

我的问题是:我如何修改它以获得正确的解决方案?如下面的评论中所述,它不一定是递归算法,但这是我能想到的最好的算法。

这已经有点长了,但我试图尽可能彻底地解释我的问题。希望你能帮忙!

删除了过多的信息。

0 个答案:

没有答案