티스토리 뷰
3 알고리즘 Introduction + 3.1 알고리즘
gaelim 2016. 11. 27. 20:15/*이 포스팅은 Rosen의 Discrete mathematics and its applications를 번역한 것입니다. 학습용으로 번역한 것입니다. */
2017 10 01 가독성 좋게 수정
알고리즘Algorithms
<알고리즘은 왜 필요할까?>
이는 정수들로 이루어진 수열에서 가장 큰 정수를 찾는 문제의 특수한 경우입니다. 이런 일반적인 (또는 일반화 가능한) 문제들을 해결하기 위해선 알고리즘을 제시해야합니다. 여기서 사용되는 알고리즘은 일련의 단계를 통해 이러한 성질의 문제들을 해결합니다.
3.1 알고리즘Algorithms
서론introduction
예로 : 정수들로 이루어진 어떤 수열이 주어졌을 때, 가장 큰 것을 찾기; 어떤 집합이 주어졌을 때, 모든 부분집합들을 나열하기; 정수들로 이루어진 어떤 집합이 주어졌을 때, 증가순으로 나열하기; 네트워크가 주어졌을 때, 두 점 사이의 가장 빠른 경로를 찾기.
<알고리즘들과 해당 알고리즘의 시간복잡도>
<정말??? 똑똑하구나... >
이산 구조discrete structure는 집합set, 수열sequence, 함수function 에서 사용됩니다. 또, 그리고 이후에 보게 될 순열permutations, 관계relations, 그래프graphs, 트리trees, 네트워크networks, 유한 상태 기계finite state machines 등과 같은 구조입니다.
<위 녀석들은이산적인 구조들을 가진 서로 가족/친척들>
정의 1
알고리즘은 연산을 수행하거나 문제를 해결하기 위한 유한하고 간결한 수행 절차이다.
알고리즘이라는 용어는 수학자의 이름 al-Khowarizmi이 변형된 것입니다. 이 수학자는 9세기의 인물로, 인도-아라비아 숫자 즉, 현대적인 십진 표기법 기초에 관해 책을 저술한 사람입니다. 원래는, algorism( thm이 아닌 ) 이란 단어가 십진 표기법을 사용한 산술을 수행하는 규칙을 뜻하는 데에 사용되었습니다. algorism은 18세기 무렵에 algorithm으로 변했습니다. 연산 기계에 관해 관심이 늘자, 알고리즘이라는 개념 또한 더욱 일반적인 표현이 되었습니다. 산술을 수행하는데 필요한 절차에 국한되지 않고 어떤 문제를 푸는데 필요한 모든 명확한 절차들을 포함하게 되었습니다.
이 책에서는, 많고 다양한 문제들을 풀기위한 알고리즘들에 대해 이야기할 것입니다. 이 섹션에서는, 정수로 이루어진 유한 수열에서 가장 큰 정수들을 찾는 문제를 이용하여 알고리즘의 개념과 알고리즘이 가진 특성을 보여줄 것입니다. 또한, 어떤 유한 집합에서 특정한 원소를 찾는 알고리즘에 대해 이야기 할 것입니다.
그 뒤의 섹션에서는, 두 정수의 최대공약수를 찾는 절차, 네트워크에서 두 점의 최소 경로를 찾는 절차, 행렬을 곱하는 순서 등에 대해도 이야기 할 것입니다.
예제 1
알고리즘들이 공유하는 몇 개의 특징들이 있습니다. 알고리즘들이 이야기 될 때 기억하고 있으면 유용한 것 들입니다. 특징들은 다음과 같습니다
Input. 알고리즘은 특정 set들을 입력값으로 입력받습니다.
Output. 각 각의 Input set으로부터 알고리즘은 각 각의 output 값을 도출합니다. output value는 문제에 대한 답입니다.
Definiteness. 알고리즘의 단계들은 반드시 간결히 정의되어야합니다.
Correctness. 알고리즘은 반드시 각 input set에 대해 정확한 output 값을 도출해야합니다.
Finiteness. 알고리즘은 input set들로부터 output값을 도출해내는데에 반드시 유한한 단계들(매우 많을 수도 있습니다.)을 거쳐 도출해내야 합니다.
Effectiveness. 알고리즘의 각 각의 단계들은 반드시 정확하게 수행될 수 있는 것이어야하며, 반드시 유한한 시간안에 수행되어야합니다.
Generality. 알고리즘은 특정한 input set에 대해서만 답을 도출해내는 것이아니라 해당 형식과 관련된 모든 문제에 대해서 반드시 적용가능해야합니다.
예제 2
위 알고리즘(예제 1번)이 바로 위에서 나열된 모든 특성들을 만족하는지 보여라.
*** Input: 알고리즘1의 input은 정수들의 수열입니다.
output: 수열 내에서 가장 큰 정수입니다.
definiteness: 알고리즘의 각 단계들은 명확하게 정의되어 있습니다. 이유는, 할당들과 유한 루프 그리고 조건문만이 발생하기 때문입니다.
correctness: 알고리즘이 옳음을 보이기 위해서는 알고리즘이 언제 끝나는지 봐야합니다. 변수 max의 값은 수열의 가장 큰 항과 값이 같습니다. 이를 보기 위해서는, 변수 max의 초기값은 수열의 첫 번쨰 항과 같음을 먼저 이해해야합니다. 그리고 수열의 항 순서대로 검사합니다. 이전까지 검사했던 모든 항들 중 가장 큰 값을 넘는 항이 발견된다면 그 항의 값을 max에게 저장합니다. 이는 모든 항을 검사하고, max는 가장 큰 항의 값과 같게됩니다. (이보다 엄밀한 정의는 5.1에서 논의되는 귀납과 재귀의 개념이 필요합니다.)
finiteness: 이 알고리즘은 유한한 단계들을 이용합니다. 이유는 수열 내에 존재하는 유한 개의 모든 정수들을 검사하면 끝나기 때문입니다.
effectiveness: 이 알고리즘은 유한한 시간 내에 수행될 수 있습니다. 왜냐하면 각 단계는 비교 또는 할당으로 이루어져있기 때문입니다. 이런 단계들의 유한한 수들로 이루어져 있고 이 두 연산들은 유한한 시간을 소요하기 떄문입니다.
generallity: 마지막으로, 알고리즘1은 일반적입니다. 왜냐하면 어떠한 정수들의 수열들에서 항상 가장 큰 값을 찾아내기 때문입니다.
다음글 보기 탐색과 정렬
http://ingyeoking13.tistory.com/151
'Discrete mathmatics and Problem Solving > 3 알고리즘' 카테고리의 다른 글
3.1 알고리즘 탐색과 정렬 (0) | 2017.10.01 |
---|
- Total
- Today
- Yesterday
- 그라파나
- grafana cloud
- 아레나
- 이산 수학
- javascript
- Discrete Mathematics
- 자바스크립트
- 데이터 중심 애플리케이션 설계
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- 항해99
- 아레나 시뮬레이션
- flutter
- 로젠
- 명제논리
- Simulation
- Grafana
- 최단경로 알고리즘
- 이산수학
- rosen
- arena simulation
- 대규모 시스템 설계 기초
- paul wilton
- 백준
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 자바스크립트 예제
- Propositional and Predicate Logic
- 시뮬레이션
- 아레나시뮬레이션
- beginning javascript
- Arena
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |