분류 전체보기 461

[알고리즘] 피보나치 수열의 항 찾기 (Fibonacci number) - 재귀, 메모이제이션, 변수 두 개를 이용한 최적화 방법

앞 글들에서 피보나치 수열의 문제를 풀어봤었습니다. 1. 재귀를 이용한 피보나치 수열 이렇게 재귀를 이용해서 풀면 너무 많은 중복 계산이 일어나서 성능이 안 좋습니다. 따라서 이미 해결한 문제는 메모리에 저장해서 나중에 필요할 때 뽑아서 쓰기로 했었습니다. 2. 반복문을 이용한 피보나치 수열 반복문을 이용하여 재귀를 쓰지 않고, 이미 계산한 값에 대해서 리스트에 저장했습니다. 이를 메모이제이션 기법이라고 합니다. 아래는 1번과 2번의 코드입니다. n = int(input()) def fib1(n): if n 0.004057884216308594# 2번 >>> 0.0016162395477294922# 3번 두 배보다 더 빠른 시간 차이가 나네요 참고로 1번에 10,000을 넣으면 아마 평생 걸려도 못 찾으..

[알고리즘] 알고리즘의 이해 - 시간 복잡도 함수의 차수, 점근적 표기법, 알고리즘 최종 요약(Algorithm Understanding - D

1. 차수란? 앞선 글에서 0.001\(n^{2}\)보다 100\(n\)이 궁극적으로 더 빠른 알고리즘이라고 말씀드렸습니다. 왜일까요? 100n은 1차식으로 증가하는 반면, 0.001\(n^{2}\)은 2차식으로 증가하기 때문에 증가율이 더 높습니다. 이렇게 알고리즘의 효율성을 비교하기 위해서는 앞에 붙은 계수보다는 차수가 더 중요합니다. 극단적인 예로 100000000000000000000\(n\)이 0.00000000000001\(n^{2}\)보다 더 빠르다고 설명할 수 있습니다. 이때, 100\(n\)은 1차시간 알고리즘, 0.001\(n^{2}\)은 2차시간 알고리즘이라고 설명할 수 있겠습니다. 5\(n^2\) +100 같은 함수는 순수 2차함수라고 할 수 있습니다. 그에 반해 0.1\(n^2\)..

[알고리즘] 알고리즘의 이해 - 알고리즘 분석과 효율성 증명 (Algorithm Understanding - Algorithm analysis,

1. 알고리즘의 분석 알고리즘 분석에는 두 가지 방법이 있습니다. The correctness of an algorithm The efficiency of an algorithm how efficiency the algorithm solves a problem in terms of either time or space 이때, 정확도 분석은 학부생의 레벨이 아니고 대학원생의 레벨입니다. 그리고 수학적 증명이 필요하기 때문에 학부생 레벨에서는 패스하겠습니다. 그러면 이제 알고리즘의 효율성 분석이 있습니다. 이때, 시간과 공간 측면에서 분석을 해야합니다. 하지만 공간은 그렇게 중요한 부분이 아닙니다. 메모리는 부족하면 언제든지 추가 구매하면 되니까요. 하지만 시간은 매우 중요합니다. 공간을 많이 먹어도 시간이..

[알고리즘] 알고리즘의 이해 - 슈도코드와 알고리즘의 속성, 효율의 중요성 (Algorithm Understanding - pseudo-code

1. 슈도코드 앞선 시간에는 리스트 S안에 x가 있는지 해결해봤습니다. 하지만 현실의 문제는 이렇게 단순하지 않고, 점점 더 복잡합니다. 모든 문제 해결 전략을 말로 설명할 수도 없고,,,그렇다고 코드로 다 짜자니 복잡하고,, 이때 중요한 것이 슈도코드(pseudo-code)입니다. 말 그대로 가짜 코드입니다. 코드와 말을 적절히 섞어가며 모두가 이해할 수 있는 코드이죠. 물론 실행은 안 됩니다 ㅎㅎ 한 번 직접 해봅시다. 예시) Problem : Add all the numbers in the array S of n numbers Inputs : positive integer n, array of numbers S indexed from 0 to n-1 Outputs : sum, the sum of t..

[알고리즘] 알고리즘의 이해 - 기본, 용어 (Algorithm Understanding - Fundamental, Term)

안녕하세요 .. 개강하고 나서 글을 아무것도 못 썼네요 ..... 너무 바빠서 .. 이제부터 수업 듣는거 정리하는 겸 공부할 겸 글 다시 쓰려구요.. 1. 알고리즘이란? 알고리즘은 step-by-step precedure for solving a problem 이라고 합니다. 즉 문제를 해결하는 단계별 절차라고 해석할 수 있습니다. 그러면 저희는 왜 알고리즘을 알아야할까요? 단어장에서 hello 라는 단어를 찾는다고 가정해봅시다. 이 때, a부터 시작하면 너무 비효율적이겠죠?? 당연히 h부터 시작하는 페이지를 열고, 그 다음 he로 시작하는 단어를 찾고 이런 식으로 찾지 않을까요? 이처럼 문제를 해결하는 절차는 너무나도 중요합니다. 하지만 컴퓨터는 너무나도 빠르고, 메모리는 갈수록 가격이 싸지고 있는데 ..

[Matplotlib - Python] Matplotlib 라이브러리와 파일 저장, 텍스트 처리, 여러 데이터 처리

기본 데이터 import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family'] = 'Malgun Gothic' # Windows # matplotlib.rcParams['font.family'] = 'AppleGothic' # Mac matplotlib.rcParams['font.size'] = 15 matplotlib.rcParams['axes.unicode_minus'] = False x = [1, 2, 3] y = [2, 4, 8] 1. 파일 저장 plt.figure(dpi = 200) plt.plot(x,y) plt.savefig('graph.png', dpi = 100) 이렇..

[Matplotlib - Python] Matplotlib 라이브러리와 꺾은 선 그래프의 여러 설정들

기본 데이터 import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family'] = 'Malgun Gothic' matplotlib.rcParams['font.size'] = 15 matplotlib.rcParams['axes.unicode_minus'] = False x = [1, 2, 3] y = [2, 4, 8] 아 참고로 title에도 따로 폰트와 size를 설정할 수 있습니다. plt.title('꺽은 선 그래프', fontdict={'family': 'HYGungSo-Bold', 'size':20}) 참고로 fontdict을 쓰지 않고도, plt.title('꺽은 선 그래프', family= 'HYGungSo-..

[Matplotlib] Matplotlib 라이브러리

1. Matplotlib 이란 Matplotlib란 다양한 형태의 그래프를 통해서 데이터를 시각화할 수 있는 라이브러리입니다. Pandas의 Series나 DataFrame도 쉽고 간단하게 표현할 수 있습니다. 다양한 설정 값을 통해서 다양한 형태의 그래프를 표현할 수 있습니다. 2. 설치 pip install matplotlib 를 해주시거나 아니면 파이참에서 따로 넣어주셔도 됩니다. 3. 기본 사용법 기본적인 사용을 위해 좌표를 먼저 설정하겠습니다. x = [1, 2, 3] y = [2, 4, 8] 를 통해서 좌표를 설정했습니다. plt.plot() 함수를 사용하면 좌표에 해당하는 꺾은선 그래프를 표현할 수 있습니다. plot() 사용 plt.plot(x,y) 참고로 주피터 노트북이 아닌 파이참 환경..

[Pandas - Python] Pandas 라이브러리와 그룹화

기본 데이터 import pandas as pd df = pd.read_excel('score.xlsx', index_col = '지원번호') df 이름학교키국어영어수학과학사회SW특기 지원번호 1번채치수북산고19790851009585Python 2번정대만북산고1844035505525Java 3번송태섭북산고1688075708075Javascript 4번서태웅북산고1874060707580NaN 5번강백호북산고1881520103510NaN 6번변덕규능남고20280100958580C 7번황태산능남고1885565454035PYTHON 8번윤대협능남고19010085909595C# 1. groupby 함수 df.groupby('학교') 이렇게 '학교'를 기준으로 그룹화를 하면 밑에처럼 나옵니다. 이때, 원하시는 값에..