출처: Do it! 자료구조와 함께 배우는 알고리즘 입문 버블정렬 버블정렬은 이웃한 두 원소의 대소관계를 비교하여 필요에 따라 교환을 반복한다. 7개의 원소 6,4,3,7,1,9,8를 대입했다. 패스는 비교 교환하는 과정을 말하는데 패스 1은 첫바퀴 정렬을 의미한다. 첫번째 패스 시 , 정렬 완료 전까지 n-1번의 정렬과정을 거친다. 가장 작은 원소 1이 맨 앞으로 이동한다. 두번째 패스 시 정렬 완료 전까지 n-2의 정렬과정을 거치고, 두번째로 작은 원소 3이 두번째 위치로 이동한다. 버블정렬 구조는 다음과 같다. def bubble_sort(a: MutableSequence) -> None: """버블 정렬""" n = len(a) for i in range(n - 1): for j in range(..
하노이의 탑 출처: Do it!자료구조와 함께 배우는 알고리즘 입문 - 파이썬 편 재귀함수를 이용해 하노이의 탑을 구현해본다. 기둥이 세개 있고, 원반이 3개 있을때, 1번 2번 원반을 중간기둥으로 옮기고, 3번 원반을 목표기둥으로 옮긴후 1&2번 원반을 3번 원반이 있는 목표 기둥 위에 쌓아 올린다. def move(no:int,x:int,y:int)->None: #원반 no개를 x기둥에서 y기둥으로 옮김 if no >1: move(no-1,x,6-x-y) print(f'원반[{no}]를 {x}기둥에서 {y}기둥을 옮깁니다') if no > 1: move(no-1,6-x-y,y) print('하노이의 탑을 구현합니다') n = int(input('원반의 개수를 입력하세요 : ')) move(n,1,3)..
출처: Do it! 자료구조와 함께 배우는 알고리즘 입문- 파이썬편 큐는 스택과 같이 데이터를 임시 저장하는 자료구조이지만, 스택처럼 가장 나중에 넣은 데이터를 가장 먼저 꺼내지 않는다. 선입선출(가장 먼저 넣은 데이터를 가장 먼저 꺼내는 구조)이다. 인큐(enqueue) : 큐에 데이터 추가 디큐(dequeue): 데이터를 꺼냄 프런트(front): 데이터를 꺼내는 쪽 리어(rear): 데이터를 넣는 쪽 링 버퍼로 큐 구현하기 링 버퍼 ring buffer는 디큐할 때 배열의 원소를 옮기지 않는 큐이다. front 값은 5, rear 값은 2이다. 여기서 82를 인큐하면 맨끝의 다음에 위치한 que[rear]= que[2]에 82를 저장하고 rear 값을 2에서 3으로 움직인다. 24를 디큐 하면 맨 ..
BERT 코드 찾아보니까 huggingface나 berttokenizer 자체를 임포트 해서 진행하는 예시가 많았다. 파이토치로 바닥부터 구현하고 싶은데 튜토리얼이 따로 없어서 깃허브 보고 코드를 리뷰해보려고 한다.(내가 못찾는거 일수도...) 모델 아키텍처의 구조를 파악하고 공부하는것이 코드리뷰의 목적이기 때문에 모델파일 위주로 리뷰해보려고 한다. https://github.com/codertimo/BERT-pytorch GitHub - codertimo/BERT-pytorch: Google AI 2018 BERT pytorch implementation Google AI 2018 BERT pytorch implementation. Contribute to codertimo/BERT-pytorch de..
2018년에 google AI Language 에서 소개된 BERT 논문을 리뷰해봤다. 이후에 BERT를 기반으로한 성능좋은 여러 모델들이 발표되었는데, 이후 더 나은 모델들을 이해하기 위해 기초가 된 논문을 읽었다. BERT는 레이블이 없는 텍스트에서 양방향(bidirectional) 표현을 pre-trained 되도록 설계되었다. 그 결과 pre-trained model은 단지 하나의 output layer 추가로 파인 튜닝이 된다. 이것은 question answering 이나 언어추론(language inference) 와 같이 넓은 범위의 task를 만들기 위해 사용된다. 논문은 여기서 https://arxiv.org/pdf/1810.04805.pdf Introduction pre-trained..
출처: Do it! 자료구조와 함께 배우는 알고리즘 입문- 파이썬편 스택 stack 스택은 데이터를 임시 저장할 때 사용하는 자료구조로, 데이터의 입력과 출력순서는 후입선출(가장 나중에 넣은 데이터를 가장 먼저 꺼내는) 방식이다. 데이터를 넣는 작업을 푸시push, 데이터를 꺼내는 작업을 팝pop 이라고 한다. 푸시하고 합하는 윗부분을 top, 아랫부분을 bottom이라고 한다. 스택 구현 스택 배열: stk -> 푸시한 데이터를 저장하는 list형 배열, 가장 먼저 푸시하여 데이터를 저장하는 곳은 stk[0] 스택 크기: capacity -> 스택의 최대 크기를 나타내는 int형 정수, len(stk)로 나타냄 스택 포인터 : ptr -> 스택에 쌓여있는 데이터의 갯수를 나타내는 정수값, 스택이 비어있..
출처: Do it! 자료 구조구조와 함께 배우는 알고리즘 입문 - 파이썬 편 def search(self, key:Any) -> Any: #키가 key인 원소를 검색하여 값을 반환 hash = self.hash_value(key) #검색하는 키의 해시값 p = self.table[hash] #노드를 주목 while p is not None: if p.key == key: return p. value #검색 성공 p = p.next # 뒤쪽 노드 주목 return None def add(self, key:Any, value: Any) -> bool: #키가 key이고, 값이 value인 원소를 추가 hash = self.hash_value(key) #추가하는 key의 해시값 p = self.table[ha..