我有这个任务要做,但我实际上坚持这个循环算法,这里是详细信息输入文件有3个进程A、B和C第二列是到达时间第三列是坚果值
A 1 2
B 2 3
C 0 4
我理解这样的想法:AT = 0状态的进程应该是R =正在运行,然后具有AT状态的下一个进程应该呈现为W =在进程达到坚果值后等待,对于ex 4 R状态,下一个seq应该是F =完成输出像
A B C
0 - - R
1 W - R
2 R W W
3 W W R
4 W R W
5 R W W
6 F W R
7 F R F
8 F R F
9 F F F
我厌倦了使用先到先服务的相同想法,但它有所不同,因为这里我们必须使用循环算法,而且我之前在 bash 中没有看到它,如果有人给我这个想法,我会尝试继续,直到结尾
nut value in the third column mean for ex first process A =2
so it must have two running status then it be finished
process C=4, must have 4 running status then finished and so on
the algorithm is round-robin i found this is the suitable one as the running status changes each line between the processes
是,每次只有一种运行状态,另一种要么尚未到达,要么处于等待状态
答案1
这感觉就像是大学/招聘任务,所以我选择提供见解和碎屑,而不是脚本。
从示例情况来看,id_nut
(第三列)是循环法解释迭代的 AFAICT,在这种情况下具体是降序。然而,为了提高效率,您不应该为不存在/未到达的坚果实例(例如A、B、C)分配时间;因此只有在他们到达聚会后才添加坚果。我特别没有使用字队列,因为它们是按id_nut
到达时间排序的。
因此,到达日志(第一个表)可供您通过模拟这种场景来测试您的逻辑。很可能还有您不知道的其他测试。
找到一种方法来触发在这些特定时间点的到达。首先尝试
awk
按时间列对它们进行排序。也许使用队列。保留一份
sort
到达坚果的优先列表。可以是多行字符串或数组。循环所需的时间段,
seq
以创建一个范围。当然,您需要在下一次迭代之前根据当前状态决定下一步触发哪个坚果。但是,您如何知道某些坚果在上次迭代中不在列表中,但在当前迭代中?
希望这些提示应该足够了。
编辑:我错误地说执行顺序是id_nut
(第三列),因为该列据说是num_run_left
(运行该过程的剩余步骤/分配的数量)。那么这确实是一个按字母顺序递减的循环赛。相应地调整上面的技巧并num_run_left
在迭代时存储每个坚果。
另外,如果不是在这里,也许可以在某个平台上分享您的解决方案。请注意,像 Turnitin 这样的工具可能会声称抄袭,最好在提交后分享。