알고리즘/알고리즘 정리 15

np.dot 과 np.matmul

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=cjh226&logNo=221356884894 (정의상 설명) numpy에서 dot과 matmul의 차이 이전 포스트에서 python의 여러가지 행렬곱(matrix multiplication)을 살펴보았다[1]. 신가하게도 행렬곱을... blog.naver.com (그림설명) https://jimmy-ai.tistory.com/104 [Numpy] 행렬곱 함수 np.matmul 사용법, np.dot과의 차이 파이썬 넘파이 np.matmul vs np.dot 비교 이번 글에서는 np.dot 함수와의 차이 비교를 기준으로 np.matmul 함수의 사용 방법을 살펴보도록 하겠습니다. 참고로..

numpy 연산의 인덱싱과 속도

https://codingdog.tistory.com/entry/numpy-%EC%9D%B8%EB%8D%B1%EC%8B%B1-%EC%84%B1%EB%8A%A5%EC%9D%80-%EC%96%B4%EB%96%A8%EA%B9%8C%EC%9A%94 numpy 인덱싱 성능은 어떨까요? numpy에서 indexing 연산은 생각보다 많이 써먹곤 했습니다. 그런데 numpy의 indexing에 걸리는 오버헤드가 어마어마하다는 것을 최근에야 알게 되었습니다. 상세 분석에서 분석할 기회가 있을 듯 싶습 codingdog.tistory.com

2차원 리스트 특정 열만 취하기 (링크)

level 2 - 혼자서 하는 틱택토 그냥 경우의 수 풀어버리는 것 보다, 룰을 직접 코딩해보고 싶어서 고민중 시간복잡도는 무조건 안넘을텐데 조금 더 깔끔하게, 조금더 범용으로 사용가능한 코드가 없을까 고민중 https://emilkwak.github.io/python-2d-list-certain-column Python 2차원 리스트(list)의 특정 열(column) 골라 취하기 Python, Pandas를 Excel보다 사랑하는 직장인을 위한 블로그 emilkwak.github.io

모든 조합 구하기 알고리즘

emoticons 길이만큼, min discount에서 max discount 범위 사이의 수에 대해 모든 조합을 combination으로 담는 함수 지금과 같이 모든 경우의 수 만큼 계속 하나씩 붙여가며 stack에 쌓고, 원하는 길이만큼 조합이 늘어났다면 이걸, combination에 완성해서 담는 방식임. (level 2 - 이모티콘 할인행사) combinations = [] stack = [[]] while len(stack) > 0: simulator = stack.pop() if len(simulator) >= len(emoticons): combinations.append(simulator) continue for d in range(min_discount, max_discount+10, 1..

재귀함수 vs 반복문

재귀함수의 경우 코드가 깔끔해지는 대신 느림 반복문의 경우 메모리힙 방식으로 속도가 빠른 대신 변수가 불필요하게 많아질 수 있음 https://hazel-developer.tistory.com/173 재귀함수와 반복문의 차이 재귀함수 (Recursive Function) 란? 재귀라는 단어는 원래 자리로 되돌아가거나 되돌아옴 을 뜻한다. 프로그래밍에서 재귀는 자기 자신을 호출하는 것을 의미한다. 이러한 재귀의 의미를 사용하여 자 hazel-developer.tistory.com

그리디, 재귀함수

그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘 설계 기법이다. 예를 들어 5개의 도시를 모두 한번씩만 거쳐서 여행하는 경로 중 기름값을 아끼기 위해 가능하면 짧은 경로를 이용하고 싶다고 가정하자. 이 문제를 해결하기 위해 몇가지 전략을 사용할 수 있다. 가능한 120가지의 조합을 모두 살펴봐서 그중 가장 짧은 경로를 선택하는 것도 하나의 전략이 될 것이다. 그러한 다양한 방법 중, 그리디 알고리즘을 사용한다는 것은 "지금 내가 있는 도시에서 고를 수 있는 도로 중 가장 짧은 도로를 선택한다"라는 방법이 될 수 있다. 단, 그리디 알고리즘을 사용하면 매 선택이 그 순간에 대해..

lru_cache 캐싱을 이용한 dp

level3 - 숫자 타자 대회 기본적인 재귀함수를 쓸 때 불필요한 반복 계산을 줄이기 위해 dp 알고리즘을 사용하는데 https://techblog-history-younghunjo1.tistory.com/183 [Python] Dynamic Programming(동적계획법) 알고리즘 🔊 이번 포스팅에는 최근에 Python으로 알고리즘을 공부하기 시작하면서 알게 된 여러 알고리즘의 원리와 Python으로 구현하는 방법에 대해 소개해보려 한다. 필자는 최근 알고리즘 공부를 '나동 techblog-history-younghunjo1.tistory.com 이때 dp를 사용함에도 불필요하게 시간이 많이 들 수가 있음 이때, 이전 계산에서 동일한 계산이 있었을때, 캐시에 올려져 있는 계산결과를 즉시 가져오는 캐..

알고리즘 그 외(구현, 시뮬레이션 풀이 팁) 개인적인 기록

구현, 시뮬레이션은 쉬워보임에도 불구하고 코드로 구현하기는 복잡한 것들이 많은 유형이다. python 함수에 대해 기본적으로 많이 알고 있어야 된다거나, 모든 경우의 수를 다 넣어봐야 되는 경우도 있다. 경우의 수가 적은 경우에는 실제로 그렇게 해도 된다. string 문자열의 경우에는 단순히 문자가 포함되있는지 여부를 s in 'adkakksjaksdkjjkd' 로 찾을 수 있다. Python) ord Character에 대한 ASCII값을 반환 영어의 경우 아스키코드가 다 붙어있기 때문에 ord(e) - ord(a) 하면 e와 a간의 차이가 나옴(대소문자 구분) chr ASCII값을 문자로 다시 변환해준다. 유니코드 포함 chr(ord(e)) -> e .upper(), .lower() 둘다 upper..

<힙과 우선순위 큐> 개인적 정리

혹시 힙과 큐에 대해 궁금하셔서 다른 곳에서 유입되신거라면 죄송합니다.. 메모장으로 개인적으로 정리한 그대로를 개인 공부를 위해 올리기 때문에 이해하시기에 굉장히 불편하실 수 있습니다. 일반적인 큐(Queue)는 First in-First Out 즉 먼저들어간 자료가 먼저 나오는 구조 반면, 우선순위 큐는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는것 우서순위 큐는 힙(heap) 이라는 자료구조로 구현할수 있다. 일반적인 list를 통해 우선순위를 비교해가며 자료를 추가하면 시간복잡도의 최악의 경우를 나타내는 big-O 표기법에 의해 n개의 자료를 모두 하나씩 비교해야하는 경우가 생길 수 있으므로 O(n) 의 시간복잡도를 갖는다 complete Binary Tree 완전 이진트리 구조 부..