분류 전체보기 65

그래프 - 정점 추가, 간선 추가

연결 리스트와 같이 마지막 노드로 이동하여 추가하는 과정을 거치면 된다. void Graph::Vappend(int data) { VORTEX* newVortex = new VORTEX; newVortex->Data = data; newVortex->Ehead = nullptr; newVortex->next = nullptr; if (!graph->Vhead) graph->Vhead = newVortex; else { VORTEX* temp = nullptr; temp = graph->Vhead; while (temp->next) { temp = temp->next; } temp->next = newVortex; } } void Graph::Eappend(VORTEX* from, VORTEX* to) {..

그래프

그래프 오일러가 쾨니히스베르크 문제를 풀기위해 고안해냄 그래프는 정점의 모음과 이 정점을 잇는 간선의 모음의 결합이다. 정점들의 모임 + 간선들의 모임 = 그래프 구현 방법 정점들의 집합은 배열과 리스트 어느것으로 구현해도 된다. 하지만 간선들의 집합은 인접관계를 나타내야 하므로 배열로 나타내게 되면 2차원 배열 (행렬) 로 나타내야 한다. 또한 행렬로 나타내게 되면 2차원 배열 하나에 정점 두 개의 정보가 포함되므로 정점 하나가 늘어나면 배열은 제곱으로 늘어난다. 정점의 저장할 데이터의 크기도 같은 원리로 행렬에서는 제곱으로 크기가 커지게된다. 알고리즘에서 제곱은 최악의 상황으로 여겨지는듯 하다. 리스트도 단점은 있다. 리스트의 단점은 역시 집합을 탐색하는데 오래걸린다는 것이다. 하지만 n^2회랑 n회..

힙 - 삭제

삭제 과정 1. 루트 노드를 삭제하고 트리의 최고 깊이 제일 오른쪽 노드를 루트노드로 옮김 2. 루트 노드보다 작은 값을 가진 자식 노드와 교환한다. 둘 다 작을 시 둘 중 작은 노드 3. 자식 노드가 더 클 때 까지 2번 반복 void Heap::mindelete() { int prevCapacity = H->Capacity - 2^(int)log2(H->Capacity); if (prevCapacity == H->UsedSize) { H->Capacity = prevCapacity; H->Tree = (NODE*)realloc(H->Tree, sizeof(NODE) * H->Capacity); } H->Tree[0].Data = H->Tree[H->UsedSize-1].Data; H->Tree[H->..

힙 - 삽입

삽입 과정 1. 힙의 가장 아래 오른쪽에 노드를 추가한다. 2. 부모 노드와 비교하여 작으면 자리를 바꾼다. 3. 부모 노드가 더 작은 값이면 종료 아니면 2번을 다시 수행한다. void Heap::append(int data) { if (H->Capacity == H->UsedSize) { H->Capacity += H->Capacity * 2; H->Tree = (NODE*)realloc(H->Tree, sizeof(NODE) * H->Capacity); } NODE* newNode = new NODE; newNode->Data = data; int newdata = H->UsedSize; int temp = 0; H->Tree[H->UsedSize].Data = newNode->Data; while..

힙 이란 부모노드가 자식노드보다 작은 완전 이진 트리이다. 힙은 새로운 규칙을 따르는 완전 이진 트리인 것이다. 이진 트리는 탐색을 수행할 경우 분할 탐색이 가능한데, 힙에서는 불가능하다. 그러면 성능이 안좋아 보이는데 기존의 이진 트리에서 탐색 성능을 버리면서 얻은 것이 있다. 힙의 루트 노드는 최솟값이라는 점이다. 힙은 추가와 최솟값 삭제 기능을 수행한다. 힙을 보고 느낀점은 뭔가 이때까지 배운 자료구조들을 필요한 상황에 맞게 알고리즘을 적용해서 입맛대로 바꾸는 느낌인 것같다. 앞으로도 그런 느낌으로 진행될듯 하다.. 힙의 구현 힙은 배열형식으로 구현하면 편리하다. 기본적으로 완전 이진 트리 형식이기 때문에 부모노드와 자식노드의 위치를 배열로 나타낼 때, 일정한 규칙을 가진다. k번 인덱스에 위치한 ..

해시

해쉬란 사전적으로는 뭉개져서 형체를 알 수 없다라는 뜻이었나. 검색해보면 잘게 썬 고기요리라고 나옴 자료구조에서 해쉬는 데이터를 전혀 유추할 수 없는 데이터로 바꾸는 과정이다. 이 때 데이터는 절대로 원래의 데이터를 알 수 없다. 이 과정은 잘게 다져지는 것과 비슷하다. 현실적으로 hash와 비슷한데 비슷하지 않은 부분도 있다. 데이터를 해쉬하면 길이가 일정하게 변한다. 데이터의 길이가 1비트건 16비트건 일정하게 변하게 된다. 요약하면 데이터를 해쉬하면 복원할 수 없는 데이터, 일정한 길이의 비트의 데이터로 변조시킨다. 이러면 어디에 쓰나 싶지만 원래의 데이터를 같은 방법(알고리즘)으로 해쉬하면 똑같이 변조된다. 쓰고보니 당연한 얘기이긴하다. 어쨋든 이 부분은 보안에 유리하다는 장점이 떠오른다. 현재 ..

사설IP 공용IP

사설 IP 10.xxx.xxx.xxx 172.16.xxx.xxx ~ 172.31.255.255 192.168.xxx.xxx 공용 IP 사설 IP 영역을 제외한 IP >> 약 42억개 사설IP는 중복가능 공용IP를 관리하는 라우터마다 사설 IP를 할당하는 방식이다. 사설 IP만으로는 통신 불가능 사설 IP로 전송 하면 라우터에서 공용 IP로 할당하여 인터넷 세계로 나가게된다. (통신시작) 여기서 공용 IP로 할당하는 방법으로 NAT와 PAT가 있다. 라고 정리를 했는데 Ghat GPT 님에게 검토를 요청했다. 제공해주신 내용은 거의 정확하게 설명되었습니다. 하지만 몇 가지 추가 정보와 수정사항이 있습니다. 공용 IP 주소: 제공된 IP 범위에 따르면 공용 IP 주소는 약 42억 개입니다. 그러나 이 숫자는..

네트워크 2023.08.30