작업 스케줄링(Task Scheduling)

2021. 5. 3. 22:57·SW개발/알고리즘
목차
  1. 알고리즘
  2. 예제
  3. 시간 복잡도
반응형

작업 스케줄링(Task Scheduling)

  • 기계에서 수행되는 n개의 작업들을 수행 시간이 중복되지 않도록 가장 적은 수의 기계에 배정하는 문제이다.

    • 각 작업은 시작시간과 종료시간이 정해져있다.

    • 발표 시간이 정해진 학술대회에서 발표자들을 강의실에 배정하는 문제와 같다.


알고리즘

  • 다음과 같은 그리디 알고리즘이 존재한다.

    • 빠른 시작 시간 작업 우선 (Earliest Start Time First)

    • 빠른 종료 시간 작업 우선 (Earliest Finish Time First)

    • 짧은 작업 우선 (Shortest Job First)

    • 긴 작업 우선 (Longest Job First)

    • 여기서는 최적해를 찾기 위해 첫 번째 방법을 선택한다.

  • 빠른 시작 시간 작업 우선 (Earliest Start Time First)

    Pseudo Code

    JobScheduling(Task *arr)
    {
      Task list[] = arr를 시작 시간을 기준으로 오름차순 정렬한 배열
      while (list에 원소가 존재하면)
      {
        t_i = (가장 이른 시작 시간을 가진 작업);
        if (t_i를 수행할 기계가 존재하면)
          t_i를 해당 기계에 배정한다.
        else
          새로운 기계에 t_i를 배정한다.
        t_i를 list에서 제거한다.
      }
      return 각 기계에 배정된 작업 순서
    }

예제

  • 시작 시간과 종료 시간을 [start time, end time]이라고 표기한다.

    t1 = [7, 8]

    t2 = [3, 7]

    t3 = [1, 5]

    t4 = [5, 9]

    t5 = [0, 2]

    t6 = [6, 8]

    t7 = [1, 6]

  • 시작 시간을 기준으로 오름차순 정렬하여 list에 저장하면 다음과 같다.

    list = { [0, 2], [1, 5], [1, 6], [3, 7], [5, 9], [6, 8], [7, 8] }


시간 복잡도

  • 배열을 정렬할 때 O(nlogn) 시간이 걸린다.

  • 사용된 기계의 수를 m이라고 하면, 루프 내부에서 기계를 찾을 때의 시간 복잡도는 O(m)이다.

    • 루프가 n번 반복되므로 총 O(mn)이다.
  • 따라서 총 시간 복잡도는 O(nlogn) + O(mn)이다.

반응형
저작자표시 (새창열림)

'SW개발 > 알고리즘' 카테고리의 다른 글

04. 그리디(Greedy) 알고리즘  (0) 2021.05.03
집합 커버 문제 (Set Cover Problem)  (0) 2021.05.03
부분 배낭 문제 (Fractional Kanpsack Problem)  (0) 2021.05.03
최단 경로 찾기(Shortest Path)  (0) 2021.05.03
최소 신장 트리(Minimum Spanning Tree)  (0) 2021.05.03
  1. 알고리즘
  2. 예제
  3. 시간 복잡도
'SW개발/알고리즘' 카테고리의 다른 글
  • 04. 그리디(Greedy) 알고리즘
  • 집합 커버 문제 (Set Cover Problem)
  • 부분 배낭 문제 (Fractional Kanpsack Problem)
  • 최단 경로 찾기(Shortest Path)
Caniro
Caniro
MinimalismCaniro 님의 블로그입니다.
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 전체보기 (319)
      • SW개발 (268)
        • Java Spring (6)
        • C++ (186)
        • Python (21)
        • Linux (16)
        • 알고리즘 (13)
        • Git (4)
        • Embedded (1)
        • Raspberrypi (9)
        • React (3)
        • Web (2)
        • Windows Device Driver (6)
      • IT(개발아님) (46)
        • Windows (26)
        • MacOS (7)
        • Utility (11)
      • 챗봇 짬통 (0)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dism
    윈도우
    맥북 카카오톡 알림 안뜸
    vscode
    윈도우 명령어
    그림판
    unix
    Windows 11
    spring
    logi options
    백기선
    Workspace
    KakaoTalk
    제외
    알림
    스프링 프레임워크 핵심 기술
    SunOS 5.1
    Solaris 10
    java
    스프링
    MacOS
    mspaint
    SFC
    시스템 복구
    로지텍 마우스 제스처
    windows
    EXCLUDE
    citrix workspace
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
작업 스케줄링(Task Scheduling)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.