clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • ㅅ
  • Q
  • uikit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

알고리즘 - 작업 스케줄링 알고리즘(JobScheduling)
CS/알고리즘

알고리즘 - 작업 스케줄링 알고리즘(JobScheduling)

2022. 6. 12. 14:40
작업의 수행 시간이 중복되지 않도록 모든 작업을 가장 적은 수의 기계에 배정하는 문제

대학 수업에서 강의실을 배정하는 문제와 같다.

강의실 = "기계"

강의 = "작업"

 

주어진 요소

- 작업의 수

- 각 작업의 시작시간과 종료시간

- 작업의 길이

 

알고리즘

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

- 빠른 시작시간 작업 우선(Earliest start time first)배정

- 빠른 종료시간 작업 우선(Earliest finish time first)배정

- 짧은 작업 우선(Shortest job first)배정

- 긴 작업 우선(Longest job first)배정

 

위 4가지중 첫 번째 알고리즘을 제외하고 나머지 3가지는 항상 최적해를 찾지 못한다.

 

빠른 시작시간 작업 우선(Earliest start time first)배정 알고리즘

예제)

t = [s, f]

s는 시작시간, f는 종료시간

t1 = [7, 8]

t2 = [3, 7]

t3 = [1, 5]

t4 = [5, 9]

t5 = [0, 2]

t6 = [6, 8]

t7 = [1, 6]

 

시작시간을 오름차순으로 정렬한다.

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

 

시작시간에 따라 정렬된 순서대로 배정을 하는데, 먼저 생성된 기계 순서대로 t가 배치될 수 있는지 확인하고, 배치될 수 있는 기계가 없을 때 기계를 생성한다.

L = {[1, 6], [1, 5], [3, 7], [5, 9], [6, 8], [7, 8]}

 

L = {[1, 5], [3, 7], [5, 9], [6, 8], [7, 8]}

다음 순서인 [1, 6]이 배치될 수 있는 Machine이 없으므로 생성.

L = {[3, 7], [5, 9], [6, 8], [7, 8]}

Machine 생성

L = {[5, 9], [6, 8], [7, 8]}

[3, 7]은 Machine1에 들어갈 수 있다.

L = {[6, 8], [7, 8]}

[5, 9]는 Machine3에 들어갈 수 있다.

L = {[7, 8]}

L = {}

 

시간복잡도

m = 사용된 기계의 수

n = 작업의 개수

O(n log n) + O(mn)
저작자표시 비영리 동일조건 (새창열림)
    'CS/알고리즘' 카테고리의 다른 글
    • 알고리즘 - 모든 쌍 최단 경로 문제(All Pairs Shortest Paths)
    • 알고리즘 - 동적 계획 알고리즘(Dynamic Programming)
    • 알고리즘 - 집합 커버 문제(Set Cover)
    • 알고리즘 - 부분 배낭 문제(Fractional Knapsack)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바