제 1 장 1. 소프트웨어와 알고리즘.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

항공 예약 시스템 1 조 ( 김민철, 김영주, 이혜림, 장유정, 조윤주, 문하늘 ). 목차 차세대 전산시스템 도입의 필요성 현재 항공 시스템 ( 대한항공 ) 항공 시스템의 변화 미래항공 시스템.
컴퓨터와 인터넷.
재료수치해석 HW # 박재혁.
(1.1 v) 엔트리교육연구소 엔트리 카드게임 설명서.
(Program = Algorithm + Data Structure)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
<<< 시스템등록정보 “하드웨어-장치관리자” 설정 >>>
Entity Relationship Diagram
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Windows Server 장. Windows Server 2008 개요.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
웹 서버 동작 HTTP 클라이언트가 서버와 대화하는 방법과 데이터를 서버에서 클라이언트로 전송 하는 방법을 정의한 프로토콜
Windows Server 장. 사고를 대비한 데이터 백업.
Chapter 02 순환 (Recursion).
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Error Detection and Correction
컴퓨터과학 전공탐색 배상원.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
제 1장. 멀티미디어 시스템 개요.
건축설계사 임동진.
Computational Thinking
Ⅲ. 이 차 방 정 식 1. 이차방정식과 그 풀이 2. 근 의 공 식.
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
Chap 6.Assembler 유건우.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
메모리 관리 & 동적 할당.
뇌를 자극하는 Windows Server 2012 R2
‘Chess’를 읽고 컴퓨터공학부 배상수.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
USN(Ubiquitous Sensor Network)
보고서 (due 5/8) 다음과 같은 방식으로 문제를 해결하시오. 문제 분석 알고리즘 작성 프로그램 작성 테스트 및 검증
Chapter 03. 관계 데이터베이스 설계.
자바 5.0 프로그래밍.
LabVIEW WiznTec 주임 박명대 1.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
웹사이트 분석과 설계 (화면 설계) 학번: 성명: 박준석.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
( Windows Service Application Debugging )
알고리즘 알고리즘이란 무엇인가?.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
클러스터 시스템에서 효과적인 미디어 트랜스코딩 부하분산 정책
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
(생각열기) 요리를 할 때 뚝배기로 하면 식탁에 올라온 후에도 오랫동 안 음식이 뜨거운 상태를 유지하게 된다. 그 이유는?
AT MEGA 128 기초와 응용 I 기본적인 구조.
Flow Diagram IV While.
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
12 그리드 시스템.
TVM ver 최종보고서
발표자 : 이지연 Programming Systems Lab.
상관계수.
알기쉽게 해설한 데이터구조 고 갑 승 한남대학교
.Net FrameWork for Web2.0 한석수
왜 ‘프로그래밍’을 ‘비이공계 학생’이 알아야 하는가?
Installation Guide.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
교량 구조물의 개념 설계 및 프로토타입 제작 과정
1. 강의 소개 컴퓨팅적 사고와 문제해결.
아날로그 신호를 디지털 신호로 변환하는 A/D 변환기 A/D 변환 시 고려하여 할 샘플링 주파수 D/A 변환기
교착 상태 해결 : 교착 상태 탐지 교착 상태 탐지(Deadlock Detection)
Report #2 (기한: 3/16) 데이터 구조 과목의 수강생이 50명이라고 가정한다. 이 학생(학번은 2016????으로 표현됨)들의 중간 시험(0~100), 기말 시험(0~100) 성적을 성적 파일에 작성하라(프로그램을 통해서 또는 수작업으로). 성적 파일을 읽어들여서.
1 제조 기술의 세계 3 제품의 개발과 표준화 제품의 개발 표준화 금성출판사.
Presentation transcript:

제 1 장 1. 소프트웨어와 알고리즘

1.1 소프트웨어 소프트웨어란? 작은 의미로는 프로그램을 의미하며, 큰 의미로는 프로그램과 프로그램을 개발하기 위하여 작성한 관련 문서. 소프트웨어의 분류 1)시스템 소프트웨어(system software) 하드웨어와 밀접하게 연결되는 소프트웨어로서, 운영 체제(operating system), 컴파일러(compiler), 데이터 베이스(database) 등. 2)응용 소프트웨어(application software) 건축과 기계의 설계, 공정의 자동 제어 등을 위한 산업용 소프트웨어, 궤도 계산, 항공 역학, 지진 관측 등을 위한 과학용과 공학용 소프트웨어, 그리고 재고 관리, 인사 관리, 경영 관리 등을 위한 사무용 소프트웨어. 소프트웨어 공학(software engineering)은 소프트웨어를 효율적으로 개발하고 유지보수 하는 기술, 소프트웨어의 품질을 향상시키기 위한 기술과 소프트웨어를 개발하는 데 필요한 지원 기술 등을 포함한다.

1.2 소프트웨어 개발 프로세스 소프트웨어 개발 프로세스 분석, 설계, 구현, 시험, 유지보수의 과정을 순차적으로 접근하는 소프트웨어 개발 과정 <그림 1.1>은 고전적인 waterfall 개발 모델을 나타내며, 다음과 같은 단계를 거친다. <그림 1.1> 소프트웨어 개발 프로세스

1.2 소프트웨어 개발 프로세스(계속) 소프트웨어 요구 사항 분석 설계 코드생성(구현) 개발할 프로그램을 파악하기 위해서 소프트웨어 엔지니어는 반드시 요구 기능, 행위, 성능, 인터페이스 등은 물론이고 소프트웨어가 쓰이는 정보 도메인을 이해해야 한다. 시스템과 소프트웨어에 대한 요구 사항은 문서화되고 고객에 의해 검토된다. 설계 소프트웨어 설계는 프로그램의 자료구조, 소프트웨어 구조, 인터페이스, 표현 알고리즘 등의 네 가지 성질에 초점을 가진다. 설계 과정은 요구사항을 코딩이 가능한 상태로 소프트웨어를 표현하는 것이다. 설계는 요구사항과 마찬가지로 문서화되고 소프트웨어의 형상의 부분이 된다. 코드생성(구현) 설계의 결과는 기계가 이해할 수 있는 형태로 변환되어야 한다. 코드 생성 단계에서 이러한 작업을 수행한다. 만약 설계 작업이 보다 자세하게 진행된다면 코드 생성 단계는 자동적으로 수행될 수도 있다.

1.2 소프트웨어 개발 프로세스(계속) 시험 유지보수 코드가 생성되면, 프로그램 시험이 시작되며, 시험과정은 모든 문장을 시험하는 소프트웨어의 내부적 논리성에 초점을 두기도 하고, 기능 외적인 에러나 정해진 입력에 대해 올바른 작동을 하는가에 대해 초점을 두기도 한다. 유지보수 소프트웨어는 그 산출물이 고객에게 전달된 후에도 어쩔 수 없이 변화하는 경우가 생기거나, 외부환경의 변화(새로운 운영체계나 주변 기기의 추가)에 의한 에러가 발생하기도 한다. 또는 기능의 추가나 성능의 향상을 소비자가 요구하기 때문에 변화가 필요한 경우도 있다. 소프트웨어 지원과 유지는 프로그램을 새로운 것으로 바꾸는 것이 아니라 이전의 단계들을 재 적용시키는 것.

1.3 알고리즘(Algorithm) 알고리즘(Algorithm)이란? 특정한 일을 수행하는 명령어들의 유한집합이다. 모든 알고리즘은 다음과 같은 조건들을 만족해야 한다. ․ 입력 : 외부에서 제공되는 데이터가 0개 이상 있다. ․ 출력 : 적어도 한 가지의 결과를 생성한다. ․ 명확성 : 각 명령들은 명확하고 모호하지 않아야 한다. ․ 유한성 : 알고리즘의 명령대로 수행하면 어떤 경우에도 유한개의 단계 뒤에는 반드시 종료한다. ․ 유효성 : 원칙적으로 모든 명령들은 종이와 연필만으로 수행될 수 있어야 한다.

1.3 알고리즘(Algorithm) (1) 알고리즘 분석 알고리즘이 시작된 후 종료될 때까지의 시간이 사용자의 기대에 맞지 않게 너무 길어서는 안 된다. 알고리즘을 생각할 때 상식적으로 너무 복잡도가 큰 것은 생각하지 않으며, 될 수 있으면 능률적인 알고리즘을 생각한다. 예) 장기 또는 바둑과 같은 게임에 대한 알고리즘을 설계할 때, 시작 상태에서부터 가능한 모든 경우들을 열거하여 조사하는 방법으로 알고리즘을 꾸밀 수도 있다. 그러나 이렇게 가능한 모든 경우들을 고려하여 꾸민 알고리즘을 수행하려면, 현대의 가장 강력한 슈퍼컴퓨터로도 수십조 년 이상의 수행시간이 소요된다.

1.3 알고리즘(Algorithm) (2) 성능분석 알고리즘의 능률성을 평가하는 측정수단 1) 시간 복잡도(time complexity) : 알고리즘이 시작하여 답을 얻어 끝날 때까지의 시간 : 구체적인 하드웨어 기종이나 프로그래밍 언어 등을 고려하지 않은 알고리즘의 추상적인 수행시간. 2) 공간 복잡도(space complexity) : 알고리즘을 수행시키기 위해서는 기억장치를 얼마나 많이 사용하는지를 말한다. 알고리즘의 복잡도는 시간 복잡도를 의미. 시간 복잡도 알고리즘을 구성하는 명령어들의 수행 횟수에 각 명령어의 수행시간을 곱한 합계로 구한다. 이 방법은 하드웨어 종류 혹은 프로그래밍 언어 종류 등에 영향을 받는다. 알고리즘의 시간 복잡도를 측정할 때는 어느 특정한 하드웨어 기종, 혹은 프로그래밍 언어에 대한 고려는 무시. 알고리즘을 이루는 명령어들의 수행횟수를 계산하여 알고리즘의 시간 복잡도를 구하는 일을 성능 분석이라고 한다.

1.3 알고리즘(Algorithm) (3)알고리즘의 표현 방법 자연어 순서도 (flow chart) 한글이나 영어 사용 알고리즘 기술의 용이성 자연어의 모호성에 의하여 명확성 유지의 어려움 순서도 (flow chart) 좋은 알고리즘의 표현 방법임 규모가 큰 문제에 대해서 코딩의 어려움 의사코드 (pseudo code) 프로그래밍 언어에 가까우며 특정 언어의 구조에 제약을 받지 않음 실행을 위해서는 새로이 코딩하여야 함

1.3 알고리즘(Algorithm) (3) 알고리즘의 분석 기준 정확성 (Correctness) 수행량 (Amount of work done) 기억장소 사용량 (Amount of space used) 단순성/명확성 (Simplicity, Clarity) 최적성 (Optimality)

1.3 알고리즘(Algorithm) 정확성(correctness) 수행량(amount of work done) 올바른 입력에 대해서 유한 시간 내에 옳은 답을 내는 것을 의미함. 수행량(amount of work done) 알고리즘을 수행하는데 걸리는 수행 횟수를 나타내는데, 최선의 경우, 최악의 경우 및 평균의 경우로 나타낼 수 있음. 기억 장소 사용량(amount of space used) 알고리즘의 수행 시 필요한 컴퓨터의 기억 공간의 사용량을 의미함.

1.3 알고리즘(Algorithm) 단순성/명확성(simplicity/clarity) 최적성(optimality) 알고리즘의 작성이 쉽고 간결하여 해독성이 높아야 한다는 것을 말함. 최적성(optimality) “어떤 알고리즘이 최적이다” 라고 하는 것은 그 알고리즘보다 더 적은 중요 연산을 수행하는 알고리즘이 없다는 것을 의미함.

O(f) = {gcR+, n0N, nn0 , g(n)cf(n)} 1.3 알고리즘(Algorithm) (4) 증가율에 따른 함수의 구분 알고리즘의 수행량 비교를 위해 알고리즘의 차수 개념을 도입 알고리즘의 차수 비교 가정 f와 g를 자연수 집합 N에서 실수 집합 R로의 함수, 즉 f, g: N  R R+는 양의 실수 집합 O (big oh) f보다 차수가 작거나 같은 함수 전체의 집합 O(f) = {gcR+, n0N, nn0 , g(n)cf(n)}

1.3 알고리즘(Algorithm) 알고리즘의 차수 비교(계속)  (big theta) Ω (big omega) f와 같은 차수를 갖는 함수들의 집합 Ω (big omega) f보다 차수가 크거나 같은 함수 전체의 집합 (f) = {gg O(f), fO(g)} (f) = {gcR+, n0N, nn0 , g(n) cf(n)}

(f): 적어도 f보다 빠르게 증가하는 함수들 O(f): f보다 작은 비율로 증가하는 함수들 1.3 알고리즘(Algorithm) O, ,  의 관계 (f): 적어도 f보다 빠르게 증가하는 함수들 (f): f와 같은 비율로 증가하는 함수들 즉, (f) = (f)  O(f) f O(f): f보다 작은 비율로 증가하는 함수들

1.3 알고리즘(Algorithm) (5)차수의 중요성 같은 문제를 해결하는 두 알고리즘의 연산시간의 비교 O(n) O(n2) 450 300 30 312 1/2 250 25 200 20 112 1/2 150 15 50 100 10 12 1/2 5 1/2 1 n2/2 10n n

1.3 알고리즘(Algorithm) 자주 나타나는 수행량의 비교 f(n)=2n f(n)=n3 f(n)=n2 1 2 4 8 16 32 64 128 256 65536 32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 f(n)=2n f(n)=n3 f(n)=n2 f(n)=nlog2n f(n)=n f(n)=log2n n f(n)

연습문제 1. 알고리즘이란 무엇이며, 만족해야 하는 조건 5가지를 쓰시오. 2. 시간 복잡도에 대해 간단히 설명하시오. 3. 다음을 "big-oh" 표현으로 나타내시오.   a) 5n4 + 6n +3                b) 8   c) 7n3 + O(n)                    d) n log n + 2n2 + 7   e) 3n7 + O(2n) + n log n 4. 다음 알고리즘의 시간 복잡도를 구하시오.   for(i = 1; i <= n; i++)     for(j = 1; j <= n; j++){       sum = i + j;     }   }