일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 페이지 겹칩
- NumPy
- 코틀린 시작하기
- matrix fo a linear transformation
- one-to-one
- Big Theta
- nonhomogeneous linear system
- matrix trnasformations
- 일차변환
- python
- Big-Oh 예제
- 코틀린 Hello World!
- 랜덤 순서 배열
- homogeneous linear system
- 빅세타
- 빅오메가
- Big-Oh notation
- includepdf
- 빅오 표기법
- 배열 섞기
- nontrivial solution
- itertools
- Big-O 예제
- linear dependence
- 알고리즘 분석의 실례
- 재귀함수
- trivial solution
- Big Omega
- 이진 탐색
- recursive algorithms
- Today
- Total
목록분류 전체보기 (158)
코딩 연습
프로그램의 실행시간을 흔히 시간복잡도(time complexity)라고 말한다. 알고리즘의 분석에 있어서 이 시간복잡도를 입력 자료의 크기 $n$ 의 함수로 나타내는 것이 일반적이다. 예를 들어, 다음과 같은 파이썬 코드가 있다고 하자. def find_max(input_data): maximum = input_data[0] for element in input_data: if element > maximum: maximum = element return maximum 위의 파이썬 코드는 리스트 형태로 주어지는 input_data 의 요소 중 그 값이 가장 큰 것을 반환하는 함수 find_max 를 나타낸다. 이때 이 코드의 실행시간은 중간에 있는 for-loop 에 가장 큰 영향을 받게 되리라는 것을 ..
재귀함수(recursive function) 이란 함수내에서 자기 자신을 호출하는 함수이다. 재귀함수가 어떤 식으로 동작하는지는 재귀함수를 이용하여 $n!$ 을 구해보면 쉽게 알 수 있다.$n!$ 은 혹은 $n$ 의 계승은 다음과 같이 $1$ 부터 $n$ 까지의 곱으로 정의된다.$$ n! = \prod \limits_{k=1}^n k= n \times (n-1) \times \cdots \times 2 \times 1$$물론 루프(loop)를 이용하여 $n!$ 을 구할 수 있지만, 재귀함수를 이용할 수도 있다. 재귀함수를 이용한 $n!$ 구하기 파이썬 코드는 다음과 같다. def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) nu..
"자(ruler)의 눈금 그리기"는 자에서 사용할 가장 긴 눈금의 길이과 자의 크기를 입력하면 자의 눈금이 그려지도록 프로그래밍 하는 문제이다. 예를 들어, (1) 가장 긴 눈금의 길이를 3, 자의 크기를 3으로 입력하면 다음과 같은 눈금이 그려져야 한다. 그림에서 볼 수 있듯이 주 눈금은 길이 3인 '---' 로 표시했고, 1단위를 4등분하여 2등점은 길이 2인 '--' 로, 4등분점은 길이 1인 '-' 로 표시하였다. 또한 주 눈금을 표시하고 나면 옆에 눈금에 해당하는 숫자를 표기해 주었다. (2) 가장 긴 눈금의 길이를 4, 자의 크기를 2로 입력하면 다음과 같은 눈금이 그려져야 한다.주 눈금은 길이 4인 '----'로 표시했고, 1 단위를 8등분하여 2등분점은 길이 3인 '---' 로, 4등분점은..
numpy 모듈의 nonzero 함수는 요소들 중 0이 아닌 값들의 index 들을 반환해 주는 함수이다. 다음의 예제를 보자. >>> import numpy as np >>> a=np.array([1, 0, 2, 3, 0]) >>> np.nonzero(a) (array([0, 2, 3]),) 0이 아닌 값 1, 2, 3 의 index 인 0, 2, 3 을 array 형태로 리턴해 주는 것을 볼 수 있다. 그런데 a 가 2D array 가 되면 그 결과를 보기가 좀 복잡해 진다. >>> a=np.array([[1, 0, 7], [8, 1, 0], [1, 0, 0]]) >>> a array([[1, 0, 7], [8, 1, 0], [1, 0, 0]]) >>> np.nonzero(a) (array([0, 0..
numpy 모듈의 amax 함수는 array 의 최댓값을 반환하는 함수이다. 다음 예를 보자. >>> import numpy as np >>> a = np.range(4) >>> a array([0, 1, 2, 3]) >>> np.amax(a) 3 위 예에서 볼 수 있듯이 np.amax(a) 는 array [0, 1, 2, 3] 의 요소 중 가장 큰 값이 3을 반환하는 거을 알 수 있다.amax 함수는 행렬 (matrix) 에서 행이나 열 각각에 대한 최댓값을 반환해 주기도 한다. >>> a = np.arange(4).reshape((2, 2)) >>> a array([[0, 1], [2, 3]]) >>> np.amax(a, axis=0) array([2, 3]) >>> np.amax(a, axis=1)..
numpy.arange([start, ] stop, [step, ] dtype=None) numpy 모듈의 arange 함수는 반열린구간 [start, stop) 에서 step 의 크기만큼 일정하게 떨어져 있는 숫자들을 array 형태로 반환해 주는 함수다. stop 매개변수의 값은 반드시 전달되어야 하지만 start 는 step 은 꼭 전달되지 않아도 된다. start 값이 전달되지 않았다면 0 을 기본값으로 가지며, step 값이 전달되지 않았다면 1 값을 기본값으로 갖게 된다. dtype 의 경우 결과로 반환되는 array 이의 type 을 지정할 때 사용한다. dtype 값이 주어지지 않는 경우 전달된 다른 매개 변수로부터 type 을 추론하게 된다. 다음의 예를 보면 쉽게 이해할 수 있을 것이다..
파이썬의 내장함수 all 은 다음과 같다. def all(iterable): for element in iterable: if not element: return False return True 함수 all 은 매개변수로 iterable (리스트, 튜플, 딕셔너리 등등) 를 갖는다. 함수 all 은 iterable 내의 모든 요소가 참이거나 혹은 iterable 이 비어 있다면 True 를 반환하고, 그 외의 경우에는 False 를 반환하는 함수이다. 즉, iterable 내의 요소 중 단 하나라도 거짓인 경우에는 False 를 반환한다. 파이썬에서는 0을 False 로 1은 True 로 인식한다. 다음의 예제를 보면 쉽게 이해할 수 있다. >>> all([]) True >>> all([1, 2, 3, ..
functools 모듈의 reduce 함수는 다음과 같다. def reduce(function, iterable, initializer=None): it = iter(iterable) if initializer is None: value = next(it) else: value = initializer for element in it: value = function(value, element) return value reduce 함수는 매개 변수로 function, iterable[, initializer] 를 갖는다. function 과 iterable 은 반드시 전달되어야 하고, initializer 는 선택적이라고 보면 된다. 위 코드를 보면 알겠지만 reduce 함수는 다음과 같이 iterable..
enumerate 함수는 다음과 같다. def enumerate(sequence, start=0): n = start for elem in sequence: yield n, elem n += 1 enumerate 함수는 두 개의 매개변수 sequence, start 를 갖는다. 쉽게 말해서 enumerate 함수는 sequence 의 각각의 요소에 index 를 붙인 튜플을 생성하는 반복자를 리턴하는 함수라고 생각하면 된다. 내가 써 놓고도 무슨 말인지 하나도 모르겠다. 다음의 예제를 보면 한방에 이해가 간다는 것을 믿어 의심치 않는다. >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring..
파이썬의 itertools 모듈에는 다음과 같은 takewhile 함수가 있다. def takewhile(predicate, iterable): for x in iterable: if predicate(x): yield x else: break 이 함수는 두 개의 매개변수 predicate 와 iterable 을 갖는다. predicate 는 True 나 False 를 리턴하는 함수라고 보면 되고, iterable 은 리스트, 튜플, 문자열과 같이 각각의 요소에 접근할 수 있는 자료형이라고 보면 된다. takewhile 함수는 iterable 의 각각의 요소에 순서대로 접근하여 prediacte 이 참이 될 때까지의 요소만으로 이루어진 반복자를 리턴하는 함수다. 다음의 예제를 보면 쉽게 이해할 수 있다...