Algorithm

Algorithm/Data Structure

세그먼트 트리(2021.03.27)

목차 세그먼트 트리 어떤 수들의 집합이 있다. 그 집합은 원소가 마구마구 변할 수 있다고 한다. 이 때, 그 집합의 부분합을 아주 빠르게 구하기 위해서 만들어진 구조이다. 예를 들어서.. 1, 5, 6, 7, 4, 8, 2, 3 이렇게 수가 있다고 하자. 우리가 이 수들에서 특정 범위의 합을 구하려면 어떻게 해야할까? 역시 제일 간단한 방법은 다 더하는 것이다. 3~6번째 원소를 더하면. 6+7+4+8 = 25 이렇게 다 더하는 경우 시간복잡도는 O(N)으로 작은 범위 내에서 보면 나쁠 수 있다. 하지만, 이 합을 원하는 곳이 많아서 수천, 수만명이 요구를 한다면?? 또, 이 데이터에 접근 가능한 사람이 많아서 계속해서 값이 바뀐다면?? 참으로 난감할 것이다. 데이터는 바꿔줄 수 있지만. 합을 계속 해서..

Algorithm/Data Structure

이중 우선순위 큐(2021.03.25)

목차 백준 7662번 이중 우선순위 큐. 우선순위는 큐에 들어가는 정수값 자체를 우선순위로 하는 이중 우선순위 큐이다. 최대힙과, 최소힙을 이용해서 구현을 해 보았다. 최대값을 제거할때는 최대힙에서 삭제연산을 하고, 삭제한 요소를 저장해둔다. 그리고 최소값을 제거할때 만약 제거하는 요소가 저장해둔 배열에 있다면, 한번더 삭제한다. void pop(heap *h, heap *h2, int num){ int temp; //최대값 삭제 if(num == 1){ temp = popM(h); for(int i = h->numsize-1; i > -1 ; i--){ if(temp == h->nums[i]){ temp = popM(h); h->nums[i] = h->nums[h->numsize--]; } } } //..

Algorithm

에라토스테네스의 체(2022.04.13)

목차 에라토스테네스의 체 소수판정의 가장 기본이 되는 에라토스테네스의 체이다. 소수는 약수가 1과 자기자신만을 가지는 수이다. 소수를 구하는 알고리즘을 찾아보자. 알기 쉽게 예를 들어보겠다. 1~50까지의 소수 1부터 50까지의 수 중 소수를 찾는 방법을 보자 먼저 숫자를 다 적어본다. 그리고, 제일 첫번째 소수인 2의 배수를 다 지워준다. 지워주는 이유를 생각을 해보면, 소수는 1과 자기자신만을 약수로 가지는 수 이다. 어떤 수의 배수는 소수가 될 수 없다. 그러므로 범위내의 소수의 배수를 다 지워주면, 소수만 남게된다. 그렇게 2의 배수를 지우고, 3의 배수 5의 배수 7의 배수 이렇게 까지만 지워주면 나머지 수 들은 전부 소수가 된다. 왜 7까지만 지워줄까? 근데 앞에서 그러므로 범위내의 소수의 배..

Algorithm

컴퓨터 안의 실수 - 1(with. IEEE 754)(2021.07.02)

목차 정말 실수를 많이 유발하는 실수 실수(mistake)가 아니라 실수(real number)에 대한 글. 이 실수는 정말 계산하기가 화가 난다. 밑의 예를 보자. void check_real(int n){ double answer = n*(1.0/n); if(answer != 1) printf("not the same number!!\n"); } int main(){ for(int i = 1; i < 100; i++) check_real(i); } 간단한 x * (1 / x)가 1인지에 대한 함수이다. 수학적으로 당연히 저 printf문은 실행되서는 안된다. 하지만 이 코드를 실행시키면, 어째서인지 한 두개의 printf문이 실행된다. 이런 경우 때문에 실수(real number) 연산은 예외를 적용..

시유후
'Algorithm' 태그의 글 목록