贪婪算法的正确性

时间:2019-05-31 19:49:44

标签: greedy correctness

我正在尝试解决以下问题:

  

CEO每天都要定期检查员工(对于   一个例子,开始轮班后的分钟数> {5,35,   120 ..})。计算员工应在何时工作,以便首席执行官每次检查员工时都在工作。他们的工作需要3分钟   完成,每次启动又增加3分钟   再次工作(第一次需要3分钟,第二次需要6分钟   分钟,第三次需要9分钟。..

这是我的伪代码算法:

int time = 2
for: every CEOcheckTime in 0 to CEOcheckTime.length
    add (CEOcheckTimes-time) to results
    time = time + 2

忽略极端的情况,即CEO会尽快检查员工是否可以完成工作,我的算法正确吗?谢谢!

1 个答案:

答案 0 :(得分:0)

忽略“边缘情况”似乎很好,除了按照规范将时间增加2而不是3。

 int time = 3
 for: every CEOcheckTime in CEOcheckTimes
     add (CEOcheckTimes-time) to results
     time = time + 3

这里可以使用类似的及时方法,这也可以解决您的极端情况。

for: every CEOcheckTime in CEOcheckTimes
    if exists(time):
        if last(results) + time < CEOcheckTime:
            add (CEOcheckTimes) to results
            time = time + 3
    else:
         add (CEOcheckTimes) to results
         time = 3

编辑:我假设如果工作在开始/结束的同时进行检查,则视为工作。