728x90

Computer Science/Data Structure, Algorithm 54

Algorithm] 작업 스케줄링(Task Scheduling)

Algorithm] 작업 스케줄링(Task Scheduling) 기계에서 수행하는 n개의 작업(T1, T2, T3, ... , Tn)이 있고,각 작업에 시작 시간과 종료 시간이 존재한다고 할 때 최소한의 기계를 배치하면서모든 작업을 수행하도록 하는 문제를 작업 스케줄링이라고 한다.이 때 수행 시간이 중복되지 않게 모든 작업을가장 적은 수의 기계에 배정하는 최적해를 구하는 문제라는 것에 초점을 두자. 작업 스케줄링 문제에서 우리가 다룰 수 있는 변수와알 수 있는 정보에 대해서 조금 생각해보도록 하자. 작업의 수 n과, 각 작업들의 시작 시간과 종료 시간이 기본적으로 입력값으로 들어올 것이다.이건 입력값을 통해서 우리가 알 수 있는 정보고문제를 살펴봤을 때 우리가 알 수 있는 정보가 하나 더 있다.그 어떠한..

Algorithm] 합병 정렬(Merge Sort)

Algorithm] 합병 정렬(Merge Sort) 합병 정렬은 대표적인 분할정복 방법(Divide and Conquer)을 사용한다.더 이상 부분 문제로 만들 수 없는 수준까지 분할한 뒤,이를 다시 취합하는 과정에서(정복) 정렬이 이루어지는 정렬 알고리즘이다. 일단 백문이불여일견이니 이것이 작동하는 과정을 그림으로 한 번 살펴보자. 파란색은 정렬이 완료되지 않은 부분문제, 즉 분할 대상이고주황색은 정렬이 완료된 부분문제로 정복 및 정복 대상이다.과정을 보면 알 수 있듯, 다시 한 번 말하지만 합병 정렬은 정복 과정에서 정렬이 이루어진다. 의사 코드를 한 번 살펴보자. MergeSort(arr,start,end)입력 : arr[start] ~ arr[end]출력 : 정렬된 arr[start] ~ arr[..

Algorithm] Quick Select(K번째 숫자 탐색)

Algorithm] Quick Select(K번째 숫자 탐색) 정렬되지 않은 숫자들을 입력 받고 K번째로 작은 숫자를 찾는 방법을 떠올리자면,가장 먼저 떠오르는 것이 정렬한 후에 바로 접근하는 것을 생각해볼 수 있다. 통상 퀵 정렬이나 합병 정렬을 통해서 정렬을 수행하면 시간 복잡도가 O(nlogn)이고,이후 탐색에서의 시간 복잡도는 O(1)로 결과적으로 O(nlogn)의 시간 복잡도를 예상해볼 수 있다.이보다 좀 더 효율적인 것을 찾아볼 수는 없을까? 정렬 중에서 가장 빠른 성능을 보이는, 퀵정렬을 한 번 살펴볼 필요가 있다.퀵정렬은 피봇(pivot)을 선정하여 피봇을 기준으로 분할한 정보를 또 다시 피봇으로 나누는분할 정복 과정을 통해서 정렬을 이루는 방법이다. 여기서 이 피봇에 주목할 필요가 있다...

Algorithm] Closest Pair(최근접 점의 쌍 찾기)

Algorithm] Closest Pair(최근접 점의 쌍 찾기) Closest Pair(말 그대로 최근접 점의 쌍 찾기)XY 좌표 평면 상에 존재하는 점들 중, 가장 근접한 쌍을 골라내는 알고리즘이다.가장 간단한 건, 한 점과 연결되는 모든 점들과의 거리를 계산하고이를 바탕으로 최근접 거리를 탐색하는 것이다. 이 경우 N개의 점이 있다고 했을 때 N(N-1)/2의 비교,Big O로는 N^2에 해당하는 시간복잡도가 소요된다.점의 수가 100개 내외여도 꽤나 느려지는 것이 어마어마한 단점이다. 이 때 우리가 생각해볼 수 있는 것이 분할정복 방식(Divide and Conquer)인데,부분 문제를 만들어서 계산과 비교 회수를 비약적으로 줄일 수 있다.x축을 기준으로 정렬을 수행하고(이 때 정렬은 퀵정렬로 가..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 3

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 3 C언어로 쉽게 풀어쓴 자료구조8장 Exercise 문제다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 18. 앞에서 공부한 리스트 추상 자료형을 사용하여 우선순위 큐 추상 자료형을 구현하여보라.리스트 추상 자료형의 각종 연산들을 사용하라.삽입 연산은 O(1)의 시간 안에, 삭제 연산은 O(n)만큼의 시간이 걸리게끔 구현하라.여기서 n은 큐 안에 있는 요소들의 개수이다. 12345678910111213141516171819202122232425262728293031#ifndef __S_L..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 2

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 2 C언어로 쉽게 풀어쓴 자료구조8장 Exercise 문제다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 17. 연결 리스트(linked list)를 이용하여 우선순위 큐 추상 자료형의 각종 연산들을 구현하여보라. 1234567891011121314151617181920212223242526#ifndef __LIST_PQ_H__#define __LIST_PQ_H__#define ELEMENT_MAX 200 typedef int element;typedef struct ListNode { e..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 1

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 1 C언어로 쉽게 풀어쓴 자료구조8장 Exercise 문제다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 16. 정렬되지 않은 배열(array)를 이용하여 우선순위 큐 추상 자료형의 각종 연산들을 구현하여 보라. 1234567891011121314151617181920212223#ifndef __ARRAY_PQ_H__#define __ARRAY_PQ_H__ #define ELEMENT_MAX 200 typedef int element;typedef struct { element Queue[..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 4장 - 3

DataStructure] C언어로 쉽게 풀어쓴 자료구조 4장 - 3 C언어로 쉽게 풀어쓴 자료구조4장 Exercise 문제들이다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 29번. 이중 연결 리스트를 이용하여 숫자들을 항상 정렬된 상태로 유지하는 리스트 SortedList를 구현하여보라.앞의 문제의 연산들을 구현하면 된다. 123456789101112131415161718192021222324252627282930#ifndef __SORTED_LIST_H__#define __SORTED_LIST_H__#define TRUE 1#define FALSE ..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 4장 - 2

DataStructure] C언어로 쉽게 풀어쓴 자료구조 4장 - 2 C언어로 쉽게 풀어쓴 자료구조4장 Exercise 문제들이다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 14. 단순 연결 리스트에 정수가 저장되어 있다. 단순 연결 리스트의 모든 데이터 값을 더한 합을 출력하는 프로그램을 작성하여라. 15. 단순 연결 리스트에서 특정한 데이터 값을 갖는 노드의 개수를 계산하는 함수를 작성하라. 16. 단순 연결 리스트에서의 탐색 함수를 참고하여 특정한 데이터 값을 갖는 노드를 삭제하는 함수를 작성하라. 17. 단순 연결 리스트의 헤드 포인터가 주어져 ..

Jungol] 2499: 저울 (2011년 KOI 초등부)

2011년 한국정보올림피아드(KOI) 초등부 문제 : 저울 이 문제의 답안과 채점은 Jungol이라는 사이트에서 이뤄졌다.(문제 번호 2499 : 저울) 필자는 두 가지 답안을 작성했다.그리디 알고리즘을 통해 최적해를 구하는 방법을 잘못 접근했기 때문인데,최대에서 최소로 최적해를 구성하면서 TLE(시간 초과) 문제가 발생해서 만점을 받지 못했고,최소에서 최대로 최적해를 구성하는 건, TLE 문제를 해결할 수 있었다. 아주 간단한 원리를 까먹고 진행해서... 1안 : TLE 발생 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include using namespace std;int ma..

728x90