해야 할 작업이 있지만 실제로 이 루프 알고리즘이 막혔습니다. 자세한 내용은 다음과 같습니다. 입력 파일에는 3개의 프로세스 A, B, C가 있습니다. 두 번째 열은 도착 시간이고 세 번째 열은 너트 값입니다.
A 1 2
B 2 3
C 0 4
AT=0 상태의 프로세스는 R=실행 중이어야 하고 AT 상태의 다음 프로세스는 프로세스가 너트 값에 도달한 후 W=대기로 렌더링되어야 한다는 아이디어를 이해합니다. 예를 들어 4 R 상태의 경우 다음 시퀀스는 예여야 합니다. 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과 같은 도구는 표절을 주장할 수 있으므로 제출 후 공유하는 것이 가장 좋습니다.