새벽을 밝히는 붉은 달

2021.04.01 오늘의 기록 본문

Developer/Record

2021.04.01 오늘의 기록

자윰 2021. 4. 2. 01:02

파이썬 알고리즘 인터뷰 - 박상길

  • 파이썬의 리스트는 c++의 vector나, 자바의 ArrayList처럼 동적 배열을 구현한 자료형이다.
  • 파이썬 리스트를 사용하면 스택을 사용할지, 큐를 사용할지 고민하지 않아도 되며, 스택과 큐에서 사용 가능한 모든 연산을 함께 제공한다.
  • 리스트에 주로 큐의 연산을 사용할 때는 시간 복잡도가 증가할 수 있음으로, 주의해야 한다.

<리스트의 주요 연산 시간 복잡도>

len(a) O(1) 전체 요소의 개수를 리턴
a[i] O(1) 인덱스 i의 요소를 가져온다
a[i:j] O(k) i부터 j까지 슬라이스의 길이만큼인 k개의 요소를 가져옴. 이 경우 객체 k개에 대한 조회가 필요하기 때문에 O(k)가 된다
elem in a O(n) elem 요소가 존재하는지 확인한다. 처음부터 순차 탐색하므로 n만큼 시간이 소요된다
a.count(elem) O(n) elem 요소의 개수를 리턴한다
a.index(elem) O(n) elem 요소의 인덱스를 리턴한다
a.append(elem) O(1) 리스트 마지막에 elem 요소를 추가한다
a.pop() O(1) 리스트 마지막 요소를 추출한다. 스택의 연산이다.
a.pop(0) O(n) 리스트 첫 번째 요소를 추출한다. 큐의 연산이다. 이 경우 전체 복사가 필요하므로 O(n)이다. 큐의 연산을 주로 사용한다면 리스트보다는 O(1)에 가능한 deque를 권장한다.
del a[i] O(n) i에 따라 다르다. 최악의 경우 O(n)이다
a.sort() O(nlogn) 정렬한다. Timsort를 사용하며, 최선의 경우 O(n)에도 실행될 수 있다
min(a), max(a) O(n) 최솟값/최댓값을 계산하기 위해서는 전체를 선형 탐색해야 한다
a.reverse() O(n) 뒤집는다. 리스트는 입력 순서가 유지되므로 뒤집게 되면 입력 순서가 반대로 된다
  • 파이썬은 모든 것이 객체며, 파이썬의 리스트는 객체에 대한 포인터 목록을 관리하는 형태로 구현되어 있다. 사실상 연결 리스트에 대한 포인터 목록을 배열 형태로 관리하고 있으며, 그 덕분에 파이썬의리스트는 배열과 연결 리스트를 합친 듯이 강력한 기능을 자랑한다.
  • defaultdict 객체는 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다.
  • Counter 객체는 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다.
  • OrderedDict 객체는 입력 그대로 순서가 유지된다. 그러나 파이썬 3.7 이후 딕셔너리 입력 순서를 유지하기 때문에,기본 딕셔너리만 사용해도 입력 순서가 충분히 유지된다.

PyTorch로 시작하는 딥 러닝 입문

  • batch는 컴퓨터가 한 번에 처리하는 훈련 데이터의 크기이다. (예를 들어, 3000개의 훈련 데이터가 있는데, 컴퓨터가 여기서 64개씩 꺼내서 처리한다면 batch size는 64가 된다)
  • 2D Tensor = (Batch size, dim)
  • 3D Tensor 
    비전의 경우: (batch size, width, height) , 이미지는 가로랑 세로니까!
    NLP의 경우: (batch size, length, dim), length는 문장 길이, dim은 단어 벡터의 차원
  • numpy에서 .ndim은 몇 차원인지를 출력하고, .shape는 크기를 출력한다.
  • 파이토치에서는 크기가 다른 행렬 또는 텐서에 대해서 사칙 연산을 수행해야 할 때, 자동으로 크기를 맞춰서 연산을 수행하도록 하는 브로드캐스팅이라는 기능을 제공한다
  • 브로드캐스팅은 자동으로 실행되기 때문에 굉장히 주의해서 사용해야 한다
  • 파이토치 텐서의 행렬 곱셈은 matmul()을 통해 수행한다
  • element-wise 곱셈은 동일한 크기의 행렬이 동일한 위치에 있는 원소끼리 곱하는 것을 뜻하는 것으로, * 또는 mul()을 통해 수행한다
  • 인자로 dim을 준다면 해당 차원을 제거한다는 의미가 된다
  • max()는 원소의 최대값을 리턴한다
  • max()는 dim 인자를 주면 argmax도 함께 리턴하는 특징이 있다
  • ArgMax()는 최대값을 가진 인덱스를 리턴한다

'Developer > Record' 카테고리의 다른 글

2021.04.05 오늘의 기록  (0) 2021.04.05
2021.03.22 오늘의 기록  (0) 2021.03.22
2021.03.15 오늘의 기록  (0) 2021.03.15
2021.03.09 오늘의 기록  (0) 2021.03.10
2021.03.08 오늘의 기록  (0) 2021.03.09
Comments