【问题标题】:Greedy algorithm correctness贪心算法的正确性
【发布时间】:2019-05-31 19:49:44
【问题描述】:

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

CEO 每天都在固定时间检查其员工(例如 例如,轮班开始后的分钟数> {5, 35, 120..})。计算员工何时应该工作,以便 CEO 每次检查他们是否在工作。他们的工作需要 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 更快地检查员工是否可以完成工作,我的算法是否正确?谢谢!

【问题讨论】:

    标签: greedy correctness


    【解决方案1】:

    忽略“边缘情况”,这似乎很好,只是您的时间按照规范增加了 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
    

    编辑:我假设如果工作开始/结束同时检查这是否算作工作。

    【讨论】:

    • 谢谢。我将它增加了 2,因为如果检查与工作结束同时进行,我也不知道它是否算作工作。
    • 在这种情况下,您仍应增加 3,但从时间 = 2 开始。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2020-08-03
    • 2016-07-04
    • 2022-12-07
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多