[자료구조/알고리즘] Eulerian circuit(한붓그리기)
·
Algorithm/Algorithm
ContentsEulerian cirtuit(오일러 서킷)Eulerian trail(오일러 트레일)  Eulerian Circuit(오일러 서킷)오일러 서킷이라는 것은 우리들에게 한붓그리기 문제로 더 알려져 있습니다. 오일러 서킷그래프가 주어졌을 때 그래프의 한 시작점으로부터 모든 간선을 한번씩만 지나 다시 시작점으로 돌아오는 경로를 말합니다.이러한 경로가 있으려면 어떠한 조건을 만족해야 할까요?가장 많이 사용되고 있는 방법으로는 단순하게 정점의 degree를 사용하는 것입니다.degree라는 것은 위상정렬 할 때 잠시 살펴보았죠? 그 때는 indegree를 이용하였고, 여기서 degree라는 것은 정점에 연결되어 있는 간선의 수를 말합니다. 그런데 도대체 degree가 갑자기 왜나올까요? 1) 무향그래..
[자료구조/알고리즘] 비트연산을 통한 순열
·
Algorithm/Algorithm
[Algorithm] Binary Counting - 부분집합, power set 구하기void main(void){ int i, j; char arr[4] = { 'a', 'b', 'c', 'd' }; int n = 4; for (i = 0; i 12n의 값을 갖는다.원소가 n개일 경우의 모든 부분집합의 수를 의미한다.Power set(모든 부분 집합)-공집합과 자기 자신을 포함한 모든 부분집합-각 원소가 포함되거나 포함되지 않는 2가지 경우의 수를 계산하면 모든 부분집합의 수가 계산된다.i & (1 계산 결과는 i의 j번째 비트가 1인지 아닌지를 의미한다.10 진수이진수{A, B, C, D}00000 10001A20010B30011B, A40100C50101C, A60110C, ..
[자료구조/알고리즘] 재귀 함수를 이용한 부분 집합 생성 알고리즘
·
Algorithm/Algorithm
#define _CRT_SECURE_NO_WARNINGS #include #include using namespace std;vector subset;int n = 4;void search(int k){ if (k == n + 1) { for (int i = 0; i 1부터 n까지의 숫자로 만들 수 있는 부분 집합의 경우의 수를 출력하는 함수다.마지막 공집합은 빈 줄로 출력이 되기 때문에 실수로 놓치는 것에 주의한다. 우리가 부분집합을 손으로 (가지치기하여) 구할 때와 유사한 방식이라고 생각한다.다만 재귀 알고리즘은 익숙하지 않으면 코드 자체를 보고 실행결과를 예상하기가 힘들다.  아래는 n = 7 , r = 4 라고 가정..
[자료구조/알고리즘] 해시(Hash) 란?
·
Algorithm/Algorithm
Hash개념임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장하는 것키에 대한 해시값을 사용하여 값을 저장하고 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 associate array이다키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 하며 이때 사용하는 함수(알고리즘)를 해시함수라고 한다해시값 자체를 index로 사용하기 때문에 평균 시간 복잡도가 O(1)로 매우 빠르다해시함수위에 설명한 것과 같이 키에 대한 해시값을 만드는 함수계산이 복잡하지 않고 키값에 대해 중복 없이 해시값을 고르게 만들어 내는 함수가 좋은 함수 (충돌이 일어나지 않을수록 좋다)대표적으로 나눗셈 법(Division Method)과 곱셉 법(Multiplication Method)..