HW#01 : XML 관련 문제를 풀이HW#01 : XML 관련 문제를 풀이

Posted at 2011. 3. 31. 01:36 | Posted in Computer Science/DB시스템및프로그래밍

1. 교재 STUDENT 테이블의 내용을 바탕으로 다음 문제를 푸시오.

(a) XML로 표현

(b) DTD 작성

(c) DTD를 문서 내 삽입/별도 두 경우에 대해 문서 제시


2. STUDENT 테이블에 아래의 반구조적 특성이 있을 때 문제를 푸시오.

-dept : optional
-tel : 0개 이상 제한 없음

(a) Sno은 속성으로 하여 DTD 작성

(b) 문서 내용 제시(DTD 별도 버전)

3. 교재 대학 DB에 대한 DTD 작성

//

HW#06 : Dynamic Programming을 이용한 Binomial Coefficient 문제 해결HW#06 : Dynamic Programming을 이용한 Binomial Coefficient 문제 해결

Posted at 2011. 3. 31. 00:06 | Posted in Computer Science/알고리즘
#include <stdio.h>
#include <stdlib.h>

int minimum(int i, int k)
{
	if(i < k) return i;
	else return k;
}

int bin2(int n, int k)
{
	// Valable Decaltion
	int i = 0;
	int j = 0;
	int **B = NULL;

	int returnValue = 0;
	
	// Matrix Initialization
	B = (int**)malloc(sizeof(int*) * (n+1));

	for(i = 0; i < n+1; i++)
		B[i] = (int*)malloc(sizeof(int) * (k+1));

	for(i = 0; i < n+1; i++)
		for(j = 0; j < k+1; j++)
			B[i][j] = 0;

	// Binomial Coefficient
	for(i = 0; i <= n; i++)
		for(j = 0; j <= minimum(i,k); j++)
			if(j == 0 || j == i)
				B[i][j] = 1;
			else
				B[i][j] = B[i-1][j-1] + B[i-1][j];

	returnValue = B[n][k];
	
	// Matrix Uninitialization
	for(i = 0; i < n+1; i++)
		free(B[i]);
	
	free(B);

	return returnValue;
}

int main(int argc, char argv[])
{
	printf("B[4][2] = %d\n", bin2(4,2));

	return 0;
}
//

HW#05 : Quick Sort의 구현과 예제의 동작 과정을 보이시오.HW#05 : Quick Sort의 구현과 예제의 동작 과정을 보이시오.

Posted at 2011. 3. 24. 11:05 | Posted in Computer Science/알고리즘

asd
//

HW#04 : Merge Sort의 구현과 예제의 동작 과정을 보이시오.HW#04 : Merge Sort의 구현과 예제의 동작 과정을 보이시오.

Posted at 2011. 3. 21. 22:41 | Posted in Computer Science/알고리즘

Merge Sort는 Divide and Conquer Approach의 일종으로 크게 3단계로 실행 된다.(2-Way Merge Sort 기준)

1. 리스트를 이등분 한다.(Divide)
2. 이등분된 리스트 두개를 정렬한다.(Conquer)
3. 이등분된 리스트를 병합하여 하나의 리스트로 만든다.(Combie)

다음은 Merge Sort를 C언어로 구현한 것이다.

(소스 생략)

(예제 생략)

//

HW#03 : 분할을 두 개로 하는 경우가 많다. 왜 두 개를 사용하는가?HW#03 : 분할을 두 개로 하는 경우가 많다. 왜 두 개를 사용하는가?

Posted at 2011. 3. 21. 22:38 | Posted in Computer Science/알고리즘

Divide and Conquer Approach를 보면 Binary Search와 2-Way Merge Sort와 같이 세 개가 아닌 두 개를 사용하는 경우가 많다. 왜 두개를 사용하는가?

K-Way Merge Sort를 예로 들어 보면 K값을 3으로 할 수도 있고 2로 할 수도 있다. 2-Way Merge Sort와 3-Way Merge Sort의 시간복잡도(Time Complexity)를 생각해 보아야 한다. Divide and Conquer Approach의 경우 T(n) = Divide + Conquer + Combie 시간을 생각해 보아야 한다.

K = 2 인 경우, T(n) = 0 + T(n/2) + T(n/2) + n/2 + n/2 - 1

K = 3 인 경우, T(n) = 0 + T(n/3) + T(n/3) + T(n/3) + n/3 + n/3 + n/3 - 1

결국 입력 원소의 개수가 크다면 K 값이 큰 것이 되부름(Recursion)을 적게 하여 유리하다. 또한 병렬 처리를 할 경우 K 값이 큰 것이 좋다. 하지만 3-Way Merge Sort는 병합 과정이 복잡하기 때문에 메모리의 Activation Record를 낭비해서라도 2-Way Merge Sort를 사용한다.
//

HW#02 : N개의 배열을 이분 검색을 할 때 시스템 스택의 깊이는?HW#02 : N개의 배열을 이분 검색을 할 때 시스템 스택의 깊이는?

Posted at 2011. 3. 21. 18:38 | Posted in Computer Science/알고리즘


n개의 Array를 Binary Search(Divide and Conquer Approach)할 때 System Stack Depth는 얼마인가?

예를 들어 생각해 보면, "1, 2, 3, 4, 5, 6, 7, 8, 9"에서 9를 찾는다고 가정해 보자. 각 Step 마다 n/2 만큼 감소하게 된다. 수식으로 표현해보면 Worst Case의 Time Complexity는 w(n) = w(2/n) + 1 이 된다. 이것은 w(n) = w(2/2^2) + 2 가 되고 다음은 w(n) = w(2/2^3) + 3 형태가 된다. n을 2^x 로 놓으면 w(n/2^x) + x 에서 w(n) = w(2^x/2^x) + logn 이 된다. w(2^x / 2^x)는 1이 되고 결국 1 + logn 이 된다. 그래서 System Stack Deapth는 1 + logn 이 된다.
//

HW#01 : 피보나치 수열의 값 찾기 문제에 대한 두 가지 접근법에 대한 일반화HW#01 : 피보나치 수열의 값 찾기 문제에 대한 두 가지 접근법에 대한 일반화

Posted at 2011. 3. 17. 11:16 | Posted in Computer Science/알고리즘

피보나치 수열에서 알고리즘의 접근은 Sequential Approach와 Divide and Conquer Approach가 있었다. 이 방법에서 Divide and Conquer Approach가 Sequential Approach 보다 효과적이지 못하다는 것을 배웠다. 그러면 우리는 이 문제에 대해 일반화 시킬 수 있을까? 그것이 첫 번째 숙제이다.

My Solution)
두 가지 접근 방법이 있다고 가정하자. 하나는 Sequential Approach이고 다른 하나는 Divide and Conquer Approach이다. 우리의 목표는 집합에서 원소를 찾는 문제와 피보나치 수열 문제를 통해 일반화된 요약을 도출하는 것이다.

집합 : 유한 원소를 다룬다.
피보나치 수열 : 재귀 형태로 미지수 x에 따라 값이 변화한다.

Domain이 지정되어 있다면 Divide and Conquer Approach가 Sequential Approach보다 효율적이고, Domain이 지정되어 있지 않다면 Sequential Approach가 Divide and Conquer Approach보다 효율적이다.

Instructor's Solution)
하위 문제가 Overlapping이 많이 발생하는 경우, 분할 정복 접근보다는 순차접근이 효과적이다.

결과 : B

//

Assignment 01. 단방향 Talk 프로그램Assignment 01. 단방향 Talk 프로그램

Posted at 2011. 3. 16. 17:40 | Posted in Computer Science/네트워크응용설계

이번 과제는 아주 재미있는 Socket 프로그래밍이였다. JAVA 언어를 이용하여 작성하는 것이였는데 Socket을 생성하고 Object를 주고 받는 것은 간단하지만 예외 처리가 복잡하였다. 이는 사실 당연한 결과이다. JAVA 언어는 추상화와 계층화를 잘 하여 프로그래머를 바보로 만든다. 하지만 그런 장점 뒤에는 예외 처리라는 것이 존재한다.

친구들의 숙제를 보면서 정말 사람마다 생각이 많이 다르다는 것을 느꼈다. 나의 경우 Socket에 연결한 Filter는 ObjectInputStream과 ObjectOutputStream이였다. 그리고 이것을 넘겨주기 위해 readObject와 writeObject 메소드를 호출하여 String 클래스를 넘겨주었다. 하지만 어떤 친구는 read 메소드와 write 메소드를 사용하여 char[] 형태를 넘겨주었다. 단순 Talk 프로그램이라면 이러한 char[] 형태로 넘겨주어도 괜찮지만 클래스를 넘겨줄 때는 readObject 메소드와 writeObject 메소드를 넘겨주는 편리하다.
//

Quiz 01Quiz 01

Posted at 2011. 3. 16. 17:23 | Posted in Computer Science/지각모델링
Quiz 1. Explain how human vision system recognize objects in anotomical view?

퀴즈를 풀면서 그림을 약간 잘 못 그렸다. 나는 간상체와 추상체 수용기 방향으로 빛을 받는 다고 기술하였는데 선생님 설명을 들어보니 반대쪽에서 빛을 받는 다고 하셨다. 척추가 있는 동물은 빛을 간상체와 추상체의 반대쪽에서 받고 척추가 없는 오징어나 문어의 경우 간상체와 추상체로부터 빛을 받는다. 간상체와 추상체 수용기로부터 수평세포로 신호를 전달하고 다시 양극세포로 전달하여 신경절 세포까지 전달한다. 신경절 세포에서 시신경 섬유를 통해 뇌로 전달된다.


'Computer Science > 지각모델링' 카테고리의 다른 글

Final Exam Score Is Uploaded.  (0) 2011.06.30
Quiz 04  (0) 2011.05.19
Quiz 03  (0) 2011.05.19
Quiz 02  (0) 2011.04.08
//

네트워크응용설계 Assignment 01네트워크응용설계 Assignment 01

Posted at 2011. 3. 13. 03:09 | Posted in Computer Science/네트워크응용설계

Receiver 프로그램은 Sender 프로그램이 접속할 수 있도록 ServerSocket을 열고 기다리고 있다. 이러한 가운데 Sender 프로그램이 접속하게 되면 무한 루프에 진입하게 된다. Sender 프로그램 문자열을 입력하면 그것을 수신하여 그대로 화면에 보여주게 된다. 또한 다중의 연결을 위해 클라이언트의 종료를 확인하고 있다.


네트워크응용설계 과목의 첫 번째 프로젝트이다. TCP를 이용하여 단방향 Talk 프로그램을 작성하는 것인데 참으로 재미있다. 조금 있으면 양방향 Talk 프로그램도 해야 되는데 정말 더 흥미진진해질 것 같다. 메시지를 넘길 수 있으면 Object도 넘길 수 있으니 뭐든 할 수 있으니깐. 하지만 Report 쓰는데 시간이 너무 많이 소요되는 것 같다. 다른 과목도 공부를 해야 되는데 시간이 많이 부족하다.
//