728x90
728x90

python 16

[알고리즘] 이진 탐색 (+LeetCode 33)

이진 탐색은 정렬된 배열에서 특정 원소를 찾는 알고리즘이다. 동작 원리는 간단하다. 편의상 오른쪽 원소가 크거나 같다고 가정하자. 배열의 중간에 위치한 값이 찾고자 하는 값보다 큰지 작은지 비교. 중간에 있는 값이 더 크면 찾고있는 원소는 중간값의 왼쪽에 있을 것이다. 중간값의 왼쪽에 있는 원소로 배열을 만들어서 다시 1번을 시행한다. 중간에 있는 값이 더 작으면 중간값의 오른쪽에 있는 원소들로 다시 1번을 시행한다. Pseudo code로 정리하면 다음과 같다 (pseudo code는 모두 위키피디아에서 가져왔다): # A = [A0, A1, A2, ..., An-1] # A0 int: len_nums = len(nums) L=0 R=len_nums-1 min_val = L while L < R: m ..

알고리즘 2023.03.07

[알고리즘] 다익스트라 알고리즘 (+LeetCode 1514)

다익스트라 (Dijkstra) 알고리즘은 weighted graph에서 최단 경로를 찾는 알고리즘이다. weight가 양수일 때만 사용 가능하다. 여러 버전이 있는데 우선 위키피디아에 가장 먼저 뜨는 알고리즘을 살펴보자. weighted graph와 출발 노드(node)가 주어졌다고 하자. 처음에는 현제 노드가 출발 노드와 같고, 출발 노드에서 다른 모든 노드까지 거리를 무한대로 초기화한다. 단 출발 노드에서 출발 노드까지 거리는 0으로 설정한다. 다익스트라 알고리즘은 다음과 같다: 방문하지 않은 노드 중 시작점과 거리가 가장 짧은 노드를 현재 노드로 설정 인근 노드까지 출발 점에서부터 거리를 계산한다 이렇게 계산한 거리가 이전에 구했던 출발점부터의 거리보다 더 작다면 새로 계산한 값으로 업데이트한다 참..

알고리즘 2023.03.07

[알고리즘] 깊이 우선 탐색 (+LeetCode 200)

BFS (너비 우선 탐색) 와 비슷하게 tree/graph 구조에서 조건을 만족하는 node를 찾을 때 사용하는 알고리즘이다 (2023.03.05 - [분류 전체보기] - [알고리즘] 너비 우선 탐색 (+LeetCode 733)). DFS (Depth First Search, 깊이 우선 탐색) 는 말 그대로 깊이부터 탐색하는 알고리즘. 위에 tree를 보면 이해하기 쉽다. 우선 1번 노드부터 출발해서 다음과 같은 순서로 탐색을 한다: 1 -> 2 -> 5 -> 6 -> 3 -> 4 -> 7 보다시피 깊이 방향으로 먼저 끝까지 탐색을 하는 방식으로 탐색을 하기 때문에 깊이 우선 탐색이다. 이러한 알고리즘은 recursive (재귀) 하게 구현할 수도 있고 stack을 사용해서 구현할 수도 있다. 우선 re..

알고리즘 2023.03.05

[알고리즘] 너비 우선 탐색 (+LeetCode 733)

BFS (breadth first search, 너비 우선 탐색)는 tree 혹은 graph 형태의 data structure에서 일종의 조건을 만족하는 node를 찾는 알고리즘. Tree: Tree는 node(동그라미)와 edge(선)로 이뤄져 있다. Root node (1번 동그라미)에서부터 edge들로 가지를 쳐가는 형태로 데이터가 정렬되어 있다. 각 node는 여러 개의 child node (그림에서 더 밑쪽에 있는 node)와 연결될 수 있지만 단 한 개의 parent node와 연결될 수 있다. Graph: 비슷하게 node, edge로 이뤄져 있다 두node간 edge로 연결되어 있을 수 있다. Parent, child node 개념이 없다. BFS는 말 그대로 너비 우선 탐색하는 방식인데,..

알고리즘 2023.03.05

[numpy][pytorch] np.memorymap로 빠른 dataloading

학습할 때 dataloading 이 생각보다 시간을 많이 잡아먹습니다. 물론 dataloading을 가장 빠르게 하는 방법은 모든 data를 RAM에 올려서 작업하는 방식이지만 현실적으로 큰 데이터 셋을 다루다 보면 이것은 불가능하죠. Dataloading을 빠르게 할 수 있는 방법 중 하나가 이번 포스트에서 소개할 memory map을 사용하는 것입니다. class numpy.memmap(filename, dtype=, mode='r+', offset=0, shape=None, order='C') "Create a memory-map to an array stored in a binary file on disk. Memory-mapped files are used for accessing small s..

코딩/pytorch 2023.01.29

PYTHONPATH 환경 변수

다른 디랙터리에 있는 모듈을 import 할 때 유용하게 사용 가능합니다. 예) 폴더 구조: |---- proj | |----a | | |----a.py | |----b | | |----b.py # proj/a/a.py from b import b b.print_b() # proj/b/b.py def print_b(): print('running b.py') proj/a에서 a.py를 실행할 때 proj/b/b.py를 import하고 싶다고 합시다. proj/a$ python a.py # proj/a에서 a.py 실행 Traceback (most recent call last): File "/proj/a/a.py", line 1, in from b import b ModuleNotFoundError: N..

코딩/python 2023.01.23
728x90
728x90