재귀함수란 함수안에서 자기 자신을 호출하는 함수를 의미한다.
재귀함수의 동작은 stack에 함수가 계속 쌓여가다가 return을 시작하면서 stack에서 다시 쌓였던 함수를 call하며 최종 결과를 도출한다.
반환값에서 추가적인 연산을 수행하지 않도록 구현해 스택을 재활용할 수 있게 한다.
Minimum cost Spanning Tree를 의미하고 버텍스가 n개 있을 때 n-1개의 엣지로 모두 연결되어 있으며 사이클이 없고 가중치의 합이 최소가 되는 Spanning Tree를 의미한다. Kruskal 알고리즘등을 사용할 수 있다.
합집합을 찾는 구조이고, 버텍스에 라벨을 붙여서 라벨이 같다면 같은 그래프에 속하는 것으로 판단하고, 아니라면 다른 그래프에 속하는 것으로 판단하는 알고리즘이다.
일반적으로 E가 V보다 크기 때문
그래프 내 간선이 많은 경우 프림, 간선이 적은 경우 kruskal이 빠르다.
없다, mutex lock을 걸거나, 세마포어, swift라면 gcd를 이용해서 구현해야한다.
모름
아니요. swift 는 thread safe를 고려하고 만든 언어가 아닙니다. Wrapped Data structure는 없으나 Actor라는 스레드 안정성을 보장하는 타입이 존재한다.
failure function을 이용해 비교
O(n+m)시간으로 탐색 가능
패턴을 정의해서 했던 비교를 다시하지 않는다
키워드와 origin이 달라졌을 때 n의 값은 현재 m의 값의 한 칸 앞의 failure 값에 1을 더한 값이 된다.
Spurious Hit
m: 아스키 코드 값
x: 소수, 일반적으로 2
n: 문자열 길이
틀렸을 시 hash = 2*(기존 해쉬 - 맨 앞 문에 대한 해쉬 값) + 새로 들어온 문자
중간에 있는 임의의 값을 선택하여 찾고자하는 값이 크다면 오른쪽 작다면 왼쪽으로 이하여 탐색한다. 동일한 방법으로 중간의 값을 선택하고 비교하며 해당 값을 찾을 때 까지 반복한다.
N개의 크기의 배열을 이진 탐색한다고 가정했을 때 2씩 나눠 탐색하므로 연산의 수를 K라 가정하면
따라서 O(logN)
범위의 끝부분을 볼 것인가 말것인가가 달라진다. 예를 들어 배열이 [0,1]이고 1을 찾는다면 end=1이고 start = 0 이기 때문에 반복문이 한번 실행된다 이때 mid = 0이기 때문에 start는 1이되어 반복문의 부등호가 < 라면 종료해 탐색의 실패하고 <=라면 반복문을 한번 더 수행하므로 성공한다.
참고자료
- https://bozeury.tistory.com/96
- https://bowbowbow.tistory.com/26
- https://8iggy.tistory.com/159
- https://ongveloper.tistory.com/376
- https://frtt0608.tistory.com/115
- https://blinders.tistory.com/83
- https://yoongrammer.tistory.com/93
- https://cjh5414.github.io/binary-search/
- https://12bme.tistory.com/120
- https://hojunking.tistory.com/65