본문 바로가기
728x90
반응형

분류 전체보기325

[Algorithm] 펜윅 트리, 이진 인덱스 트리, BIT(Binary Indexed Tree)로 구간 합 문제 해결 어떤 배열의 특정 범위에 해당하는 수의 합을 구할 때 부분 합을 사용한다. 이 부분 합의 전처리 과정의 시간 복잡도는 O(N)이고 원하는 값을 구할 때의 시간 복잡도는 O(1)이다. 전처리 과정 sum[ i ]의 값을 arr의 인덱스 0부터 인덱스 i 까지의 합이라고 정의하고 아래와 같은 배열이 있다고 하자. sum[0]은 1일 것이고 sum[1]은 9일 것이고 sum[2]는 12일 것이다. 이를 구하는 과정을 파이썬을 나타내면 다음과 같고 시간 복잡도는 O(N)이다. arr=[1, 8, 3, 4, 6, 7, 4, 4] sum=[0 for _ in range(8)] sum[0]=arr[0] for i in range(1, 8): sum[i]=sum[i-1]+arr[i] 원하는 값 구하기 그런데 위 sum.. 2023. 4. 23.
[Network] RDT (Reliable Data Transfer protocol) https://growth-coder.tistory.com/154 이전 포스팅에서 TCP가 reliable한 이유에 대해서 알아보았다. 이번 포스팅에는 정확히 어떤 방식으로 TCP가 reliable한지 RDT의 버전을 기준으로 공부해보려고 한다. FSM(Finite State Machine)을 사용할 예정이므로 간단하게 알고가면 좋다. 아래 그림에서 보다싶이 위에는 발생한 이벤트, 아래는 이벤트가 발생하면 진행할 액션이다. 그리고 점선 화살표가 나올텐데 이는 가장 처음 상태라는 의미이다. RDT 1.0 sender sender부터 보면 sender의 첫 상태는 application 계층으로부터 call을 기다리는 상태이다. 기다리는 상태에서 application 계층에서 rdt_send를 호출하면 tra.. 2023. 4. 22.
[Spring][WebSocket] 스프링 STOMP와 웹 소켓 개념 및 사용법 (Web Socket with STOMP) (1) 클라이언트와 서버가 통신할 때 HTTP 통신을 주로 사용한다. HTTP 통신은 다음과 같은 특징이 있다. 비연결성 (connectionless) : 연결을 맺고 요청을 하고 응답을 받으면 연결을 끊어버린다. 무상태성 (stateless) : 서버가 클라이언트의 상태를 가지고 있지 않는다. 단방향 통신이다. 이러한 HTTP 통신의 경우 채팅과 같은 실시간 통신에 적합하지 않다. 물론 HTTP 통신으로 실시간 통신을 흉내낼 수는 있으나 완벽하지는 않다. 실시간 통신이 필요할 때 사용하는 통신을 소켓 통신이라고 한다. HTTP 통신과 다르게 연결을 맺고 바로 끊어버리는 게 아니라 계속 유지를 하기 때문에 실시간 통신에 적합하다. 이제 스프링에서 간단하게 웹 소켓으로 통신을 해보려고 한다. 구현에 앞서 STOM.. 2023. 4. 20.
[Algorithm] RMQ (Range Minimum Query) RMQ는 어떤 배열이 존재할 때 특정 범위의 가장 작은 값을 구할 때 사용하는 자료구조이다. 다음과 같은 배열이 있다고 하자. RMQ (1, 5)의 의미는 Arr[1] 부터 Arr[5] 까지의 값 중 가장 작은 값을 의미한다. 위 배열의 경우 "3"이 된다. 이 RMQ를 구하는 방법에는 여러가지가 있지만 그 중 전처리 과정의 시간 복잡도가 O(N*log N)이고 원하는 값을 얻을 때의 시간 복잡도가 O(1)인 방법을 공부해보려고 한다. RMQ 전처리 과정 우선 길이가 1인 RMQ를 구한다. RMQ (0, 0), RMQ (1, 1), RMQ(2, 2) ... RMQ(N, N)을 모두 구하는 것이다. 길이가 1이기 때문에 당연하게도 RMQ(i, i)의 값은 arr[ i ]의 값과 똑같을 것이다. 그 다음 길.. 2023. 4. 19.
728x90
반응형