이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

학부 수업/알고리즘

  • 컴퓨터와 수학, 몽상 조금
17. 최단 경로 알고리즘

17. 최단 경로 알고리즘

2020.12.14
가중 그래프와 두 개의 정점 $u, v$가 주어졌을 때, $u$에서 $v$ 사이의 가중치 합이 최소인 경로를 구하는 문제를 최단 경로 문제라고 한다. 인터넷 패킷 라우팅, 항공편 예약, 길 안내 서비스 등에서 응용된다. 최단 경로의 속성 최단 경로의 부분경로 역시 최단 경로이다. 출발 정점으로부터 다른 모든 정점들에 이르는 최단 경로들의 트리가 존재한다. 최소 신장 트리와의 비교 최단 경로는 최소 신장 트리와 달리, 무방향 뿐 아닌 방향 그래프에서도 정의된다. 그래프에 음의 가중치를 가진 사이클이 있거나, 무향 그래프에 음의 가중치를 가진 간선이 있으면 만들 수 없다. 최단 경로 트리는 루트가 있는 트리이다. 최단 경로 알고리즘 그래프 알고리즘 시간 음의 무게를 가진 간선이 없는 그래프 다익스트라 $O(..
16. 최소신장트리 (Minimum Spanning Tree)

16. 최소신장트리 (Minimum Spanning Tree)

2020.12.12
신장 트리는 그래프의 모든 노드를 방문하고, 사이클이 없는 그래프이다. 최소 신장 트리는 어떤 가중 그래프에서 가중치의 합이 최소가 되는 신장 트리이다. 최소 신장 트리는 아래 두 가지 속성을 갖는다. 사이클 속성 $T$를 가중그래프 G의 최소신장트리라 하자. $e$를 $T$에 존재하지 않는 $G$의 간선으로, $C$를 $e$를 $T$에 추가하여 형성된 사이클로 가정할 때, $C$의 모든 간선 $f$에 대해 $\text{weight}(f)\leq \text{weight}(e)$가 성립한다. 왜냐하면, 만약 $\text{weight}(f)\geq \text{weight}(e)$라면, $f$를 $e$로 대체함으로써 가중치 합이 더 작은 신장트리를 얻을 수 있기 때문이다. 분할 속성 $G$의 노드들을 두 개의..
15. 방향 비싸이클 그래프와 위상 정렬 (DAG and Topological Sort)

15. 방향 비싸이클 그래프와 위상 정렬 (DAG and Topological Sort)

2020.12.01
방향싸이클이 존재하지 않는 방향 그래프를 방향 비싸이클 그래프Directed Acyclic Graph라고 한다. 어떤 방향 그래프에서, 모든 $i
14. 방향그래프 (Directed Graph)

14. 방향그래프 (Directed Graph)

2020.11.24
방향 그래프는 그래프 G 안의 모든 간선이 유향 간선인 그래프를 말한다. 유향 그래프라고도 한다. 항공 노선, 작업 스케줄링 등을 구성하는데 쓰인다. 방향 그래프에서, 각 노드의 진입 간선과 진출 간선을 별도의 리스트로 관리하면 각각의 집합을 각각의 크기에 비례한 시간에 조사할 수 있다. 방향 DFS DFS와 BFS 알고리즘이 간선의 방향에 따라서만 탐색하도록 하면 방향 그래프에 특화시킬 수 있다. 방향 DFS 알고리즘에선 아래 네 종류의 간선이 발생한다. 트리 간선: DFS 트리에 사용된 간선 후향 간선: DFS 트리에서, 아래에서 위로 향하는 간선 전향 간선: DFS 트리에서, $i$ 레벨 노드에서 $i+n (n>2)$ 노드로 향하는 간선 교차 간선: DFS 트리에서, 같은 레벨 노드로 향하는 간선 ..
13. 그래프 순회 (Graph Traversal)

13. 그래프 순회 (Graph Traversal)

2020.11.24
순회는 그래프의 모든 간선과 노드를 탐색하는 체계적인 절차이다. 대표적으로 깊이우선탐색과 넓이우선탐색이 있다. 깊이 우선 탐색Depth First Search: DFS 그래프를 순회하기 위해 사용되는 일반적인 방법이다. DFS를 통해 아래와 같은 것들을 수행할 수 있다. 그래프의 모든 간선, 노드 방문하기 그래프 G가 연결 그래프인지 결정하기 그래프 G의 연결 요소들을 계산하기 그래프 G의 신장 숲 계산하기 $n$개의 정점과 $m$개의 간선을 갖는 그래프에 대한 DFS는 $O(n+m)$ 시간이 소요된다. 또한, DFS를 확장하면 아래의 것들도 수행이 가능하다. 두 개의 주어진 정점 사이의 경로를 찾아 보고하기 그래프 내 사이클 찾기 그래프의 DFS는 이진트리에 대한 선위순회와 유사하다. DFS 코드 de..
12. 그래프 ADT (Graph ADT)

12. 그래프 ADT (Graph ADT)

2020.11.11
그래프 ADT는 정점vertex의 집합 $V$와 간선edge의 집합 $E$로 이루어진다. 정점은 노드node라고도 표현한다. 각 노드와 간선은 원소, 즉 정보를 저장한다. 간선에는 방향의 유무에 따라 유향 간선directed edge과 무향 간선undirected edge이 있는데, 모든 간선이 유향 간선인 그래프는 유향 그래프라 한다. 그래프 용어 간선 $a$에 연결된 노드를 각각 간선의 끝점이라 한다. 노드 $V$에 연결된 간선 $a, b, c$를 각각 노드 $V$에 부착되었다고 한다. 간선 $a$로 연결된 노드 $U, V$를 서로 인접한 노드라 한다. 한 노드 $X$가 5개의 간선과 연결되어 있다면, 해당 노드의 차수는 5라 한다. 어떤 간선 $h, i$가 각각 노드 $V, U$를 연결하면, 간선 ..
11. 해시테이블의 충돌 해결

11. 해시테이블의 충돌 해결

2020.11.05
해시테이블에서 두 개 이상의 원소들이 동일한 셀로 매핑되는 것을 충돌collision이라 한다. 즉, $k_1 \neq k_2$에 대해 $h(k_1) = h(k_2)$이면 충돌이 일어났다고 한다. 분리연쇄법separate chaining 분리연쇄법 또는 연쇄법에서 각 버켓 $A[i]$는 리스트 $L_i$에 대한 참조를 저장한다. 여기서 $L_i$은, 해시함수가 버켓 $A[i]$로 매핑한 모든 항목들을 저장하는, 무순리스트 또는 기록파일 방식으로 구현된 미니 사전이라 볼 수 있다. 즉, 같은 키값으로 매핑된 원소들을 미니 사전 $L$에 넣어두고, 해당 사전안에서 재귀적으로 탐색하여 원소를 찾는다. 이 방법은 단순하고 빠르다는 장점이 있으나, 테이블 외부에 추가적인 저장공간을 요구한다. 개방주소법open a..
10. 해시테이블 (Hash Table)

10. 해시테이블 (Hash Table)

2020.11.05
해시테이블은 키-주소 매핑에 의해 구현된 사전 ADT의 일종이다. 해시테이블은 버켓 배열과 해시함수로 구성되는데, 각 항목들의 키를 주소로 매핑하여, 1차원 배열에 사전의 원소들을 저장한다. 탐색과 삽입, 삭제에 $O(1)$의 기대시간과 $O(n)$의 최악시간을 갖는다. 버켓 배열 해시테이블을 위한 버켓 배열Bucket Array은 크기 $M$의 배열 $A$로, $A$의 각 원소를 버켓(키-원소 쌍을 담는 양동이)로 본다. 키 $k$를 갖는 원소 $e$는 버켓 $A[k]$에 삽입되는데, 사전에 존재하지 않는 키에 속하는 버켓들에는 NoSuchKey라는 특별 개체를 담아둔다. 버켓 배열의 특징 키가 유일한 정수이며, $[0,M-1]$범위에 잘 분포되어 있다면 $O(1)$시간을 기대할 수 있는 좋은 방법이지..
9. AVL 트리

9. AVL 트리

2020.10.15
AVL 트리는 모든 내부노드 $v$에 대해, $v$의 좌우 자식들의 높이 차이가 1을 넘지 않는 이진 탐색 트리이다. AVL 트리의 부트리 역시 AVL 트리이며, 높이 정보는 각 내부 노드에 저장된다. AVL 트리의 높이균형 속성 덕분에, $n$개의 원소를 저장하는 AVL 트리의 높이는 $O(\log n)$이 보장된다. (이진 탐색 트리는 최악의 경우 $O(n)$) AVL 트리에서의 삽입/삭제 AVL 트리에서 원소의 삭제와 삽입은 이진 탐색 트리와 유사하나, 삽입 혹은 삭제로 인해 AVL 트리의 높이균형 속성이 파괴될 수 있으므로 이를 복원해주는 작업이 추가된다. 삽입 def insertItem(k, e): w = treeSearch(root(), k) if isInternal(w): raise Exce..
8. 이진 탐색 트리 (Binary Search Tree)

8. 이진 탐색 트리 (Binary Search Tree)

2020.10.13
내부노드에 (키, 원소) 쌍을 저장하며, 아래 조건을 만족하는 적정 이진 트리를 이진 탐색 트리라 한다. $u, v, w$가 모두 트리 노드이며, $u$와 $w$가 각각 $v$의 왼쪽과 오른쪽 부트리에 존재할 때, $\text{key}(u) key(v): # 찾는 k 보다 v가 작음 return treeSearch(v.right, k) # 더 큰 원소들이 있는 오른측 탐색 삽입 삽입에 앞서, 적절한 삽입 위치를 찾기위해 treeSearch로 $k$를 찾아준다. 당연히 $k$는 없겠지만, 이때 찾아진 위치에 외부 노드를 추가하여 삽입 위치로 쓰면 된다. def insertItem(k, e): w = treeSearch(root(), k) if isInternal(w): raise Exception("Key..
7. 사전 ADT (Dictionary ADT)

7. 사전 ADT (Dictionary ADT)

2020.10.08
사전 ADT는 탐색 가능한 형태의 (키, 원소) 쌍 항목들의 모음을 모델링한다. 사전 내의 원소 탐색에는 키가 사용되고, 탐색한 원소가 존재하지 않는 경우 NoSuchKey 에러가 발생한다. 사전 ADT의 함수 int size(); bool isEmpty(); elem findElement(key); void insertItem(key, value); elem removeElem(key); 사전 구현에 따른 탐색기법 구현 형태 구현 종류 예 주요 탐색 기법 리스트 무순사전 기록 데이터 선형 탐색 순서사전 일람표 이진 탐색 트리 탐색트리 이진탐색트리, AVL 트리, 스플레이 트리 트리 탐색 해시테이블 해싱 무순사전 사전 항목들을 임의의 순서대로 사전에 저장한 경우이다. insertItem은 맨 앞 혹은 맨..
6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)

6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)

2020.09.29
값을 비교하는 것에 기반한 정렬 알고리즘을 비교정렬이라 한다. (버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 합병 정렬, 퀵 정렬 등) 비교 정렬의 하한 구하기 $n$개의 원소를 비교정렬로 정렬할 경우, 하한Lower Bound을 유도해보자. $n$개의 유일한 키로부터 존재할 수 있는 순서쌍은 $n!$개이다. 오름차순 정렬을 한다고 가정하면, 이 가운데 단 하나의 순서쌍만이 올바른 정렬 결과이다. 어떤 방법으로 정렬을 하더라도, $n!$개의 경우가 존재하므로 결정 트리의 높이는 최소 $\log (n!)$이 된다. 그러므로, 어떤 비교정렬 알고리즘도 최소 $\log (n!) $ 시간을 소요한다. $$\log (n!) \leq \log(\frac{n}{2})^{n/2} = \frac{n}{2} \log(..
  • 최신
    • 1
    • 2
  • 다음

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바