728x90
728x90

C언어 34

Algorithm] Knapsack(배낭 문제) - 동적계획법

Algorithm] Knapsack(배낭 문제) - 동적계획법 처음 내가 알고리즘 문제를 접했을 때 처음으로 배낭 문제를 접근했던 방식은 그리디였다.그리디는 다들 알고 있듯, 선택에 대한 번복도 없고, 근시안적인 선택으로 인해서경우에 따라서는 최적해를 보장하지 못하는 문제가 발생한다. 모든 배낭 문제에 대해서 그리디가 유효한 방법이 될 수 없는 건 아니고,물건을 임의로 쪼개어 담을 수 있는(용량을 정할 수 있는) 배낭 문제라면,무게 당 가격을 계산해서 적당히 담는 걸 고려하여 최적해를 구할 수 있기 때문에그리디 알고리즘으로는 해결이 가능하며 이를 부분 배낭(Fractional Knapsack)문제라고 한다.그러나, 일반적인 배낭 문제에서는 물건을 쪼개서 담을 수 없어서 다른 방식을 고려해야 한다. 이 때..

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

DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 4 C언어로 쉽게 풀어쓴 자료구조8장 Exercise 문제다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 19. 우선순위 큐 추상 자료형의 연산들 중에서find 연산, is_empty 연산, is_full 연산을 구현하여보라.우선순위 큐가 히프로 구현되었다고 가정한다. 12345678910111213141516171819202122#ifndef __HEAP_PQ_H__#define __HEAP_PQ_H__ #define MAX_ELEMENT 200 typedef struct { int ke..

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. 단순 연결 리스트의 헤드 포인터가 주어져 ..

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

C언어로 쉽게 풀어쓴 자료구조 4장 Exercise 문제들이다. 필자가 학교 다니면서 자료구조론 수업을 들었는데, 과제로 제출했던 것들이고, 난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다. 자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 23번. 두 개의 다항식이 다음과 같이 주어졌다. 이들을 연결 리스트를 이용하여 나타내고 본문의 프로그램을 이용해 두 다항식의 합을 구해보라. 24번. 다항식을 연결 리스트로 표현할 수 있음을 보였다. 다항식이 연결 리스트로 표현되어 있고, p를 다항식을 가리키는 포인터라고 할 때, 어떤 실수 x에 대해 이 다항식의 값을 계산하는 함수 poly_eval을 작성하라. 25번. 다항식이 연결 리스트로 표현되어 있는 경우, 두 개의 다항식을 받아 ..

728x90