SlideShare una empresa de Scribd logo
1 de 21
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%95


2) 이항계수 (URL에서 /wiki/ 이하는 ‘이항계수’입니다.)
http://ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD%EA%B3%84%EC%88%98


3) 시간복잡도
http://numgo.tistory.com/22
http://skmagic.tistory.com/164
<예시>
http://qwe1qwe.tistory.com/880


4) 공간복잡도
http://numgo.tistory.com/20
<예시>
http://numgo.tistory.com/21


5) 시간복잡도, 공간복잡도, 점근표기법
- C로 쓴 자료구조론 (이석호 저자)
  p24~p53 시간복잡도, 공간복잡도, 점근표기법

Más contenido relacionado

La actualidad más candente

3 Generative models for discrete data
3 Generative models for discrete data3 Generative models for discrete data
3 Generative models for discrete dataJungkyu Lee
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5KoChungWook
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형Kimjeongmoo
 
머피's 머신러닝, Mixture model and EM algorithm
머피's 머신러닝, Mixture model and EM algorithm머피's 머신러닝, Mixture model and EM algorithm
머피's 머신러닝, Mixture model and EM algorithmJungkyu Lee
 
자료구조 01 최종 보고서
자료구조 01 최종 보고서자료구조 01 최종 보고서
자료구조 01 최종 보고서pkok15
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서KimChangHoen
 
Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어Jungkyu Lee
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHyo jeong Lee
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summitTae Young Lee
 
머피의 머신러닝 : Gaussian Processes
머피의 머신러닝 : Gaussian Processes머피의 머신러닝 : Gaussian Processes
머피의 머신러닝 : Gaussian ProcessesJungkyu Lee
 
Eigenvalues of regular graphs
Eigenvalues of regular graphsEigenvalues of regular graphs
Eigenvalues of regular graphsJungkyu Lee
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O NotationBill Kim
 

La actualidad más candente (19)

3 Generative models for discrete data
3 Generative models for discrete data3 Generative models for discrete data
3 Generative models for discrete data
 
Hanoi2
Hanoi2Hanoi2
Hanoi2
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형
 
머피's 머신러닝, Mixture model and EM algorithm
머피's 머신러닝, Mixture model and EM algorithm머피's 머신러닝, Mixture model and EM algorithm
머피's 머신러닝, Mixture model and EM algorithm
 
자료구조 01 최종 보고서
자료구조 01 최종 보고서자료구조 01 최종 보고서
자료구조 01 최종 보고서
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서
 
Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어Support Vector Machine Tutorial 한국어
Support Vector Machine Tutorial 한국어
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
BOJ10547
BOJ10547BOJ10547
BOJ10547
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
2012 Ds 03
2012 Ds 032012 Ds 03
2012 Ds 03
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear Regression
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
 
2012 Dm 07
2012 Dm 072012 Dm 07
2012 Dm 07
 
머피의 머신러닝 : Gaussian Processes
머피의 머신러닝 : Gaussian Processes머피의 머신러닝 : Gaussian Processes
머피의 머신러닝 : Gaussian Processes
 
Eigenvalues of regular graphs
Eigenvalues of regular graphsEigenvalues of regular graphs
Eigenvalues of regular graphs
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O Notation
 

Similar a 자료구조1보고서

2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
Project#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpProject#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpKimjeongmoo
 
2데이터베이스 시스템
2데이터베이스 시스템2데이터베이스 시스템
2데이터베이스 시스템herojoon1378
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4KoChungWook
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdfkd19h
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdfjinwookhong
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)pchmago
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpKimjeongmoo
 

Similar a 자료구조1보고서 (20)

2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
자구2번
자구2번자구2번
자구2번
 
자료구조01
자료구조01자료구조01
자료구조01
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
Project#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpProject#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 Hwp
 
2데이터베이스 시스템
2데이터베이스 시스템2데이터베이스 시스템
2데이터베이스 시스템
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4
 
3콤비네이션
3콤비네이션3콤비네이션
3콤비네이션
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf
 
이산치2번
이산치2번이산치2번
이산치2번
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort Hwp
 

Más de KimChangHoen

자료구조3보고서
자료구조3보고서자료구조3보고서
자료구조3보고서KimChangHoen
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 
자료구조4보고서
자료구조4보고서자료구조4보고서
자료구조4보고서KimChangHoen
 
자료구조6보고서
자료구조6보고서자료구조6보고서
자료구조6보고서KimChangHoen
 
이산치7보고서
이산치7보고서이산치7보고서
이산치7보고서KimChangHoen
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서KimChangHoen
 
이산치5보고서
이산치5보고서이산치5보고서
이산치5보고서KimChangHoen
 
이산치1보고서
이산치1보고서이산치1보고서
이산치1보고서KimChangHoen
 

Más de KimChangHoen (8)

자료구조3보고서
자료구조3보고서자료구조3보고서
자료구조3보고서
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 
자료구조4보고서
자료구조4보고서자료구조4보고서
자료구조4보고서
 
자료구조6보고서
자료구조6보고서자료구조6보고서
자료구조6보고서
 
이산치7보고서
이산치7보고서이산치7보고서
이산치7보고서
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서
 
이산치5보고서
이산치5보고서이산치5보고서
이산치5보고서
 
이산치1보고서
이산치1보고서이산치1보고서
이산치1보고서
 

자료구조1보고서

  • 1. Project #1 파스칼 삼각형 조원 : 09 김창헌 09 최완철 11 김종진 11 정민정 11 최보은
  • 2. -목차- 1. 서론 1)회의록 2)일정 3)업무 4)배경지식 5)초안 2. 본론 문제점 & 해결방안 3. 결론 1)시간복잡도 계산 2)공간복잡도 계산 4. 참고문헌 및 출처
  • 3. 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명이 다음 수업시간까지 프로그램을 어떤 방식으로 짤지 알고리즘을 짜 와서 같이 생각해보기로 함.
  • 4. <2차> 회의일시 2012년 3월 13일 조 D2+D3 작성자 09최완철 참석자 09김창헌, 11김종진, 11최보은, 11정민정 1. 알고리즘 토의, 보완 2. 조원별 업무 파악 회의안건 3. 일정 확인 4. 문제점 파악/해결법토의 5. 보고서 초안 토의 내용 비고 프로그램 짜는 조원 2명이 2차원배열을 사용하여 알고리즘을 구성해왔다고 하여 조원들이 소스를 보면서 이해를 해가며 토의를 시작 토의 하면서 2차원배열을 사용하면 복잡도가 너무 커진다는 의견이 나와서 1차원배열과 파스칼삼각형 공식을 이용해서 다시 알고리즘을 구성해야겠다는 결 론과 for문중첩을 사용해야겠다는 결론이 나옴. 관련사항조사 조원 2명이 시간,공간복잡도에 대해 조사해와서 조원들에게 예제문제와 같이 설명을 함. 보고서에는 자료 조사한 내용과 출처를 넣고 2차원 배열을 사용하여 구성한 소스 회의내용 와 다시 구성할 소스를 넣어서 이러한 문제점이 있어서 이렇게 해결했다는 식으 로 비교되게 하기로함. 다음 시간인 목요일에 다시 토의를 하고 이번 주말에 모여서 보고서 및 프로그램 을 마무리 짓기로 함.
  • 5. <3차> 회의일시 2012년 3월 15일 조 D2+D3 작성자 09최완철 참석자 09김창헌 11김종진 11최보은 11정민정 1. 알고리즘 토의, 보완 2. 조원별 업무 파악 회의안건 3. 일정확인 4. 문제점 파악/해결법 토의 5. 보고서 확정 내용 비고 프로그램 짜는 조원 2명이 1차원 배열과 파스칼 삼각형 공식을 이용하여 소스를 구성해와서 다른 조원들이 다시 소스를 이해하기로 함. 오늘 수업시간으론 프로젝트 마무리가 되지 않아서 토요일에 학교에서 모여서 최종 마무리 짓기로 함. 회의내용 시간 공간복잡도 계산이 쉽지가 않아서 조원 모두가 계산을 해보기로 함. 개인별 보고서를 조장에게 보내주기로함. 조장이 수행일지를 마무리 짓기로 함.
  • 6. 2)일정 첫째날 둘째날 그 외 (3.8) (3.11) 조원 업무분담 1주차 온라인회의 - 문제 파악 문제(주제)에 대한 토론 (3.18) (3.13) (3.15) 온라인회의 2주차 초안에대한 회의 문제점 해결 모색 소스구현에 대한 마지막 문제점 파악 보고서 초안 토의 회의 (3.20) (3.21) 3주차 소스에 대한 이해 복잡도 계산 및 ~ 복잡도 계산 토의 보고서 작성
  • 7. 3)업무 이름 업무 최완철 조장 및 총 관리, 업무 지시, 보고서 작성 김창헌 기초 자료조사, 결과분석(계산) 김종진 기초 자료조사, 결과분석(계산) 정민정 소스 코딩, 서기 최보은 소스 코딩, 보고서 작성
  • 8. 4)배경지식 [1]파스칼 삼각형 파스칼의 삼각형은 수학에서 이항계수를 삼각형 모양의 기하학적 형태로 배열한 것이다. 이 것은 블레즈 파스칼에 의해 이름 붙여졌으나 이미 수세기 전에 다른 사람들에게서 연구된 것이다. 단순한 형태로, 파스칼의 삼각형은 다음과 같은 방법으로 만들 수 있다. 1. 먼저 첫 번째 줄에는 숫자 1을 쓴다. 2. 그 다음 줄을 만들려면, 바로 위의 왼쪽 숫자와 오른쪽 숫자를 더한다. 예를 들어, 네 번째 줄의 숫자 1과 3을 더하여 다섯 번째 줄의 4가 만들어진다. 수학적으로, 이 구조는 파스칼의 법칙을 사용하여 아래와 같이 표현한다. n 번째 줄의 k 번 째 값을 라고 하면, 이 값은 ( ) 으로 정의된다. 이때, 라는 성질에 의해 가 성립한다. 즉, n 번째 열의 k 번째 값은 과 같은 값을 가진다. <ex. 파스칼삼각형 >
  • 9. <파스칼 삼각형 응용> 파스칼의 삼각형은 이항 전개에서 계수들의 값을 계산하는 데에 사용된다. 예를 들어 라는 식에서, 각 계수의 값인 1, 2, 1은 파스칼의 삼각형의 3번째 줄에 대응된다. 일반적으로, 와 같은 전개식에서, 가 성립한다. 즉, 는 파스칼의 삼각형의 (n+1) 번째 줄 의 (i+1) 번째 값과 대응된다. [2]이항계수 자연수n과 정수k에 대한 이항계수는 n개의 서로 다른 물건 중에서 순서 없이 k개를 조합의 가짓수로, 다음과 같이 정의된다. 이때 대신 , 로 쓰기도 한다. 예를 들어, 가 된다. 이항계수는 (x+y)n을 전개했을 때, 각 항의 계수에 해당한다(그래서 이항계수란 이름이 붙 었다).
  • 10. <이항계수의 성질> 위 점화식은 이항계수의 정의에서 유도할 수 있다. 이 식을 이용하여 파스칼의 삼각형을 만 들 수 있다. 이 식의 증명은 와 같이 할 수 있다. (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에 대한 귀납법으로 보일 수 있다.
  • 11. [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이다
  • 12. *공간복잡도 알고리즘이 어떤 문제를 해결하는 데 필요한 공간의 양을 문제의 크기에 대한 함수로 표현 한 것. 프로그램이 필요로 하는 공간은 다음과 같은 요소의 합이 된다. (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이 나온다.
  • 13. (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 의 가변 공간을 가진다.
  • 14. 5)초안 [1] 2차원 배열을 사용한 알고리즘 [2] 조합 공식을 이용한 알고리즘 (배열 미사용)
  • 15. 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걸리지 않게 하기
  • 16. (글씨가 매우 작아 죄송합니다 교수님! 함께 첨부한 소스파일과 내용이 같습니다.^^!)
  • 17. <순서도> 시작 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인가? 출력한다.
  • 18. 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++; }
  • 19. 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
  • 20. 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 로 결과가 나오게 되었습니다.
  • 21. 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%95 2) 이항계수 (URL에서 /wiki/ 이하는 ‘이항계수’입니다.) http://ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD%EA%B3%84%EC%88%98 3) 시간복잡도 http://numgo.tistory.com/22 http://skmagic.tistory.com/164 <예시> http://qwe1qwe.tistory.com/880 4) 공간복잡도 http://numgo.tistory.com/20 <예시> http://numgo.tistory.com/21 5) 시간복잡도, 공간복잡도, 점근표기법 - C로 쓴 자료구조론 (이석호 저자) p24~p53 시간복잡도, 공간복잡도, 점근표기법