• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
자료구조1보고서
 

자료구조1보고서

on

  • 470 views

 

Statistics

Views

Total Views
470
Views on SlideShare
470
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    자료구조1보고서 자료구조1보고서 Document Transcript

    • Project #1 파스칼 삼각형 조원 : 09 김창헌 09 최완철 11 김종진 11 정민정 11 최보은
    • -목차-1. 서론 1)회의록 2)일정 3)업무 4)배경지식 5)초안2. 본론 문제점 & 해결방안3. 결론 1)시간복잡도 계산 2)공간복잡도 계산4. 참고문헌 및 출처
    • 1.서론1)회의록<1차>회의일시 2012년 3월 8일 조 D2+D3 작성자 09최완철참석자 09김창헌 11김종진 11최보은 11정민정 1. 문제 파악 2. 조원별 업무분담회의안건 3. 일정 계획 4. 보고서 계획 5. 알고리즘 계획 내용 비고 이번 프로젝트의 업무분담 조장 : 09최완철 관련사항조사 : 09김창헌, 11김종진 프로그램 : 11정민정, 11최보은 보고서는 각자 업무분담에 따라 조사하고 프로그램을 짜는 과정에서 나오는 자료들을 조장에게 주어 조장이 종합해서 초안을 만들기로 토의함. 매 수업에서만 토의하기엔 시간이 모자라기 때문에 따로 주말에 모여서 토의하기로 계획함 조가 다시 편성되었기 때문에 업무분담을 다시 정하였음. 회의내용 모든 조원들이 일단 파스칼삼각형의 기본 정의에 대해서 공부해오기로 함. 관련사항 조사 2명이 시간, 공간 복잡도에 대해서 알아 오기로 함. 프로그램 짜는 2명이 다음 수업시간까지 프로그램을 어떤 방식으로 짤지 알고리즘을 짜 와서 같이 생각해보기로 함.
    • <2차>회의일시 2012년 3월 13일 조 D2+D3 작성자 09최완철참석자 09김창헌, 11김종진, 11최보은, 11정민정 1. 알고리즘 토의, 보완 2. 조원별 업무 파악회의안건 3. 일정 확인 4. 문제점 파악/해결법토의 5. 보고서 초안 토의 내용 비고 프로그램 짜는 조원 2명이 2차원배열을 사용하여 알고리즘을 구성해왔다고 하여 조원들이 소스를 보면서 이해를 해가며 토의를 시작 토의 하면서 2차원배열을 사용하면 복잡도가 너무 커진다는 의견이 나와서 1차원배열과 파스칼삼각형 공식을 이용해서 다시 알고리즘을 구성해야겠다는 결 론과 for문중첩을 사용해야겠다는 결론이 나옴. 관련사항조사 조원 2명이 시간,공간복잡도에 대해 조사해와서 조원들에게 예제문제와 같이 설명을 함. 보고서에는 자료 조사한 내용과 출처를 넣고 2차원 배열을 사용하여 구성한 소스 회의내용 와 다시 구성할 소스를 넣어서 이러한 문제점이 있어서 이렇게 해결했다는 식으 로 비교되게 하기로함. 다음 시간인 목요일에 다시 토의를 하고 이번 주말에 모여서 보고서 및 프로그램 을 마무리 짓기로 함.
    • <3차>회의일시 2012년 3월 15일 조 D2+D3 작성자 09최완철참석자 09김창헌 11김종진 11최보은 11정민정 1. 알고리즘 토의, 보완 2. 조원별 업무 파악회의안건 3. 일정확인 4. 문제점 파악/해결법 토의 5. 보고서 확정 내용 비고 프로그램 짜는 조원 2명이 1차원 배열과 파스칼 삼각형 공식을 이용하여 소스를 구성해와서 다른 조원들이 다시 소스를 이해하기로 함. 오늘 수업시간으론 프로젝트 마무리가 되지 않아서 토요일에 학교에서 모여서 최종 마무리 짓기로 함. 회의내용 시간 공간복잡도 계산이 쉽지가 않아서 조원 모두가 계산을 해보기로 함. 개인별 보고서를 조장에게 보내주기로함. 조장이 수행일지를 마무리 짓기로 함.
    • 2)일정 첫째날 둘째날 그 외 (3.8) (3.11) 조원 업무분담 1주차 온라인회의 - 문제 파악 문제(주제)에 대한 토론 (3.18) (3.13) (3.15) 온라인회의 2주차 초안에대한 회의 문제점 해결 모색 소스구현에 대한 마지막 문제점 파악 보고서 초안 토의 회의 (3.20) (3.21) 3주차 소스에 대한 이해 복잡도 계산 및 ~ 복잡도 계산 토의 보고서 작성
    • 3)업무 이름 업무 최완철 조장 및 총 관리, 업무 지시, 보고서 작성 김창헌 기초 자료조사, 결과분석(계산) 김종진 기초 자료조사, 결과분석(계산) 정민정 소스 코딩, 서기 최보은 소스 코딩, 보고서 작성
    • 4)배경지식[1]파스칼 삼각형파스칼의 삼각형은 수학에서 이항계수를 삼각형 모양의 기하학적 형태로 배열한 것이다. 이것은 블레즈 파스칼에 의해 이름 붙여졌으나 이미 수세기 전에 다른 사람들에게서 연구된것이다. 단순한 형태로, 파스칼의 삼각형은 다음과 같은 방법으로 만들 수 있다. 1. 먼저 첫 번째 줄에는 숫자 1을 쓴다. 2. 그 다음 줄을 만들려면, 바로 위의 왼쪽 숫자와 오른쪽 숫자를 더한다. 예를 들어, 네 번째 줄의 숫자 1과 3을 더하여 다섯 번째 줄의 4가 만들어진다.수학적으로, 이 구조는 파스칼의 법칙을 사용하여 아래와 같이 표현한다. n 번째 줄의 k 번째 값을 라고 하면, 이 값은 ( )으로 정의된다. 이때, 라는 성질에 의해 가 성립한다. 즉, n 번째 열의 k 번째 값은 과 같은값을 가진다.<ex. 파스칼삼각형 >
    • <파스칼 삼각형 응용>파스칼의 삼각형은 이항 전개에서 계수들의 값을 계산하는 데에 사용된다. 예를 들어라는 식에서, 각 계수의 값인 1, 2, 1은 파스칼의 삼각형의 3번째 줄에 대응된다.일반적으로,와 같은 전개식에서, 가 성립한다. 즉, 는 파스칼의 삼각형의 (n+1) 번째 줄의 (i+1) 번째 값과 대응된다.[2]이항계수자연수n과 정수k에 대한 이항계수는 n개의 서로 다른 물건 중에서 순서 없이 k개를 조합의가짓수로, 다음과 같이 정의된다.이때 대신 , 로 쓰기도 한다.예를 들어,가 된다.이항계수는 (x+y)n을 전개했을 때, 각 항의 계수에 해당한다(그래서 이항계수란 이름이 붙었다).
    • <이항계수의 성질>위 점화식은 이항계수의 정의에서 유도할 수 있다. 이 식을 이용하여 파스칼의 삼각형을 만들 수 있다.이 식의 증명은와 같이 할 수 있다.(2)번 식에 x = y = 1을 대입하여 보일 수 있다.위 식은 (2) 식을 전개한 후, 양변을 미분하고 x = y = 1을 대입하면 보일 수 있다.(x + y)n (x + y)m = (x + y)m+n 식을 (2)를 이용하여 전개하면 된다. (3)번 식의 일반식이다.(7)번 식을m = k = n와 (4)를 이용하여 정리하면 된다.F(n + 1)은 피보나치 수를 나타낸다. 이 식은 파스칼의 삼각형의 대각선에 대한 식으로(3)을 이용하여 귀납법으로 보일 수 있다.(3)을 이용하여 n에 대한 귀납법으로 보일 수 있다.
    • [3]복잡도(complexity) 시간 복잡도(time complexity): 알고리즘을 실행하여 종료할 때까지 필요한 시간 공간 복잡도(space complexity): 알고리즘을 실행하여 종료할 때까지 필요한 기억 장치의 크기*시간복잡도전산학에서 계산 복잡도 이론(Computational complexity theory)이란 계산 이론의 하나로,계산 문제의 소요 시간, 메모리 사용량 등을 연구하는 이론이다.시간 복잡도는 알고리즘을 구성하는 명령어들이 몇 번이나 실행이 되는지를 센 결과(frequency count)에 각 명령어의 실행시간(execution time)을 곱한 합계를 의미한다. 그러나 각 명령어의 실행시간은 특정 하드웨어 혹은 프로그래밍 언어에 따라서 그 값이 달라질수 있기 때문에 알고리즘의 일반적인 시간 복잡도는 명령어의 실제 실행시간을 제외한 명령어의 실행 횟수만을 고려하게 된다.이와 같이 알고리즘을 이루는 명령어들의 실행횟수를 계산하여 알고리즘의 시간 복잡도를구하는 일을 알고리즘의 분석(analysis of algorithm)이라고 한다. 또한, 알고리즘의 분석은일반적으로 공간 복잡도 보다는 시간 복잡도를 통해서 이루어진다. 따라서 이번 강좌를 통해서 소개되는 알고리즘들의 분석은 대부분 시간 복잡도를 이용할 것이며 특별한 언급이 없는 한 복잡도는 시간 복잡도를 의미하게 된다.-시간 복잡도 표현법Big O Noration(빅-오 표기법) -- O(N)가장 많이 쓰이는 표기법으로 알고리즘 실행시간의 상한을 나타낸 표기법(최악의 경우)Ω(오메가)표기법 -- Ω(N)오메가 표기법은 알고리즘 실행시간의 하한을 나타낸 표기법 (최상의 경우)Θ(세타)표기법 --- Θ(N)세타 표기법은 알고리즘 실행시간의 평균시간을 나타낸 표기법(평균의 경우)<예제> 알고리즘 실행횟수float Sum(float a[], int n) -{ - float s = 0.0; 1 for(int i = 1; i <= n; I++) n + 1 s += a[i]; n return s; 1} -위 알고리즘의 총 실행 횟수는 2n+3 이 되므로 시간 복잡도는 2n+3이다
    • *공간복잡도알고리즘이 어떤 문제를 해결하는 데 필요한 공간의 양을 문제의 크기에 대한 함수로 표현한 것.프로그램이 필요로 하는 공간은 다음과 같은 요소의 합이 된다.(1) 고정 공간 요구프로그램 입출력의 횟수나 크기와 관계없는 공간 요구를 의미한다. 고정 공간 요구는 명령어 공간(코드 저장을 위한 공간), 단순 변수, 고정 크기의 구조화 변수(struct와 같은), 그리고 상수들을 위한 공간을 포함한다.(2) 가변 공간 요구이는 풀려는 문제의 특정 인스턴스 I에 의존하는 크기를 가진 구조화 변수들을 위해 필요로하는 공간들로 구성된다. 이것은 함수가 순환 호출을 할 경우 요구되는 추가 공간을 포함한다. 인스턴스 I에 작업하는 프로그램 P의 가변 공간 요구는 Sp(I)로 표기한다. Sp(I)는 인스턴스 I의 몇몇 특성(characteristic) 함수로서 정해진다.일반적으로 사용되는 특성은 I와 관련된 입출력의 횟수, 크기, 값 들이 있다. 예를들면, 입력이 n개의 요소를 갖는 배열이라면 n은 인스턴스 특성이 된다. 만약 Sp(I)를 계산할 때 n이사용하기 원하는 유일한 인스턴스 특성이라면, Sp(I)를 표현하기 위해 Sp(n)을 사용할 것이다.임의의 프로그램의 총 공간 요구 S(P)는 다음과 같이 표현할 수 있는데,여기서 c는 고정 공간 요구를 표현하는 상수이다. S(P) = c + Sp(I)프로그램의 공간 복잡도를 분석할 때는 보통 가변 공간 요구에 대해서만 관심을 둔다.이것은 특히 여러 프로그램의 공간 복잡도를 비교하려 할 때 유효하다.<예제>(1)float abc(float a, float b, float c){ return a+b+b*c+(a+b-c) / (a+b)+4.00;}3개의 단순 변수를 입력으로 받아 하나의 단순 값을 출력으로 반환하는 함수 abc가 있다.앞에서 논의한 분류에 따르면 이 함수는 오직 고정 공간 요구만을 가지고 있다. 그러므로Sabc(I) = 0이 나온다.
    • (2)int fact(int n){if(n <= 1){return 1;}else{return n * fact(n-1);}}매개변수 n-1 (int 형이므로 4바이트) + 복귀 주소(4바이트) => 8바이트이므로Sfact(n) = 8 * n 의 가변 공간을 가진다.
    • 5)초안[1] 2차원 배열을 사용한 알고리즘[2] 조합 공식을 이용한 알고리즘 (배열 미사용)
    • 2. 본론문제점 & 해결방안<문제의 요구조건> -n,m을 입력하면 p(n,m)을 구하는 프로그램을 작성한다. 여기서 n은 1000이하이다. -배열을 사용한다.[1]의 문제점 & 해결방안- 2번째 줄의 공간복잡도를 대략적으로 계산할 경우 (long pascal[1000][1000]->8*1000*1000=8* 이므로 계산결과가 크게 나온다.- 문제의 요구조건인 m에 1000을 넣을 경우 값이 overflow되어 출력되지 않는다.-> m에 1000을 넣어도 값이 출력 될 수 있는 다른 방법을 모색-> [2]에서 해결방법 모색[2]의 문제점 & 해결방안- 문제의 요구조건인 m에 1000을 넣을 경우 값이 overflow되어 출력되지 않는다.-> overflow걸리지 않게 하기
    • (글씨가 매우 작아 죄송합니다 교수님! 함께 첨부한 소스파일과 내용이 같습니다.^^!)
    • <순서도> 시작 n과 m을 입력받는다. n과 m이 yes 1을 같은가? 출력한다. no 분모부분 연산 한 주소 안의 10억으로 나누고 값이 10억 나머지를 다음yes 이상인가? yes 배열에 넘긴다 no i>=n-m+1인가? yes 구한값을 m!로 나눈다 나머지를 아래 주소값이 주소값에 0인가? no 넘긴다. yes yes 몫을 그 자리에 저장. no 값을 i>0인가? 출력한다.
    • 3. 결론1)시간복잡도 계산#include <stdio.h>int main(void){ int m,n,i,x,count; double arr[260]; long long temp; printf("행을 입력하시오 :"); //1 scanf("%d",&n); //1 printf("열을 입력하시오 :"); //1 scanf("%d",&m); //1 count = 0; for(i=0;i<260;i++) //260 { if(i==0) arr[i]=1; else arr[i]=0; } if(n!=m) { for(i=n-1;i>=n-m+1;i--) //n-1 { x = count; while(x>=0) //?...n?? { arr[x] *= i; if(arr[x]>=1e+10) { temp = arr[x]/1e+10; arr[x+1] += temp; arr[x] -= temp*(1e+10); if(x==count) count++; }
    • x--; } } for(i=m-1;i>0;i--) //n-1 { x = count; while(x>=0) //...?n { temp = arr[x]/i; if(x==0) { arr[x] = temp; break; } arr[x-1] = ((arr[x]-(temp*i))*1e+10)+arr[x-1]; arr[x] = temp; if(arr[count]==0) count--; x--; } } printf("(n,m)의 값은 :"); //1 for(i=count;i>=0;i--) //배열 길이 { if(i==count) printf("%.f",arr[i]); else printf("%010.f",arr[i]); } printf("n"); //1}else
    • printf("(n,m)의 값은 :1n"); //1 return 0;}264+n(n-1)+n(n-1)+배열길이+3= 2n^2-2n+267즉 Big O Noration(빅-오 표기법) --- O( )2)공간복잡도 계산계산에 따라 변화하겠지만double arr[260]->8*260=2080byte 로 결과가 나오게 되었습니다.
    • 4. 참고문헌 및 출처1) 파스칼 삼각형 (URL에서 /wiki/ 이하는 ‘파스칼의_삼각형’입니다.)http://ko.wikipedia.org/wiki/%ED%8C%8C%EC%8A%A4%EC%B9%BC%EC%9D%98_%EC%82%BC%EA%B0%81%ED%98%952) 이항계수 (URL에서 /wiki/ 이하는 ‘이항계수’입니다.)http://ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD%EA%B3%84%EC%88%983) 시간복잡도http://numgo.tistory.com/22http://skmagic.tistory.com/164<예시>http://qwe1qwe.tistory.com/8804) 공간복잡도http://numgo.tistory.com/20<예시>http://numgo.tistory.com/215) 시간복잡도, 공간복잡도, 점근표기법- C로 쓴 자료구조론 (이석호 저자) p24~p53 시간복잡도, 공간복잡도, 점근표기법