본문 바로가기
반응형

개발/알고리즘11

[알고리즘/C++] - 그래프/BFS 와 DFS 이전 글에 이어서 그래프의 종류 중 하나인 BFS,DFS를 알아보도록 하겠습니다.사실 이야기하자면 DFS와 BFS는 그래프보다는 그래프 탐색기법이라고 생각하셔야 합니다.먼저 이전시간에서 그래프의 정의만 알아보고 그래프를 구현하는 방법에 대해서 알아보지 않았었는데, 그래프를 구현하는 구조 세가지를 알아보도록 하겠습니다.  연결선 리스트:간선을 중심으로 그래프를 나타내는 방식입니다.각 노드에 대해 인접한 노드들의 리스트를 유지하는 구조입니다.간선 수에 비례하여 공간을 사용하므로 희소 그래프에 자주 활용됩니다.각 간선을 (u,v)형태로 저장하며 그래프의 간선들을 리스트로 표현하기에 단순한 구조를 가집니다.그래프의 간선 개수가 중요할 때 사용되며, 간선 기반 연산에 유리합니다.반두 노드의 연결 여부를 확인하기 .. 2024. 9. 6.
[알고리즘/C++] - 그래프 그래프: 노드와 노드를 연결하는 간선으로 구성된 자료구조 그래프를 살피기 전에 먼저 용어부터 알아봅시다 정점(Vertex): 그래프의 노드입니다.간선(Edge): 두 정점을 연결하는 선을 부르는 용어입니다.가중치(Weight): 간선에 부여된 값으로, 거리나 비용 등을 의미할 수 있습니다.경로(Path): 정점들의 순서로, 각 연속적인 정점 쌍 사이에 간선이 있는 경우 나타낼 수 있습니다.특징순환 혹은 비순환 구조입니다.방향이 있을 수도 있고 없을 수도 있습니다..부모 자식 관계가 없습니다.2개 이상의 경로가 가능합니다.그래프는 연결되어 있을 수도 있고, 연결되어 있지 않을 수도 있습니다. 이 여부에 따라 연결 그래프와 비연결 그래프로 나뉘기도 합니다.그래프의 종류가중 그래프: 가중치가 존재하는 그래프무.. 2024. 9. 6.
[알고리즘/C++] - 해시 해시: 임이의 길이를 가지는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수.쉽게 말해, 아무리 큰 숫자를 넣어도 정해진 크기의 숫자가 나오는 함수입니다.해시는 DJB2, Murmur3등의 방법을 통해 구현됩니다. 상황에 맞게 알고리즘을 잘 선택하여 진행합니다. 다음은 DJB2를 활용한 해시 함수입니다.unsigned long hash(unsigned char *str){ unsigned long hash = 5381; int c; while (c = *str++) { hash = (33*hash) ^ c; } return hash;} ex) 어떤 숫자를 10으로 나누었을 때 나머지를 구하는 함수 또한 해시 함수입니다.활용 방안: '해시 테이블', '해시 셋' 등의 자료구조에 활용됩니다.해.. 2024. 9. 4.
[알고리즘/C++] - 트리(Tree) 위 위 슈워메리 크리스마스위 위 슈워메리 크리스마스위 위 슈워메리 크ㄹ스마스 엔 어 해 피 뉴 이어..사실 뉴 이어라고 하기엔 7월은,, 너무 중간이네요  아무튼 오늘 배울 내용은 Tree 구조입니다트리의 탄생 - 비선형 자료구조의 필요성리스트나 배열 등의 자료구조만으로는 순차적으로 데이터가 저장되지 않는 등의 상황에서의 데이터 관리가 어려웠던 문제로 인해 새롭게 두 개의 자료구조가 탄생했습니다.저장되는 데이터들이 계층적인 구조를 가진 경우, 노드와 노드를 연결하는 간선으로 구성되는 경우,두가지로 추가적인 데이터를 관리하는 자료구조가 그렇게 탄생하게 됩니다.트리란?위 두가지의 자료구조 중, 계층적 구조를 가진 것이 바로 트리입니다.트리란, 한 노드에서 시작해서 다른 정점들을 순회하여 자기 자신에게 돌아오.. 2024. 7. 30.
[알고리즘/C++] - 정렬 모음 프로그래밍의 세계에서는 여러 개의 데이터들을 순차적으로 정렬하는 다양한 방법을 제공합니다.1,2,3,4,5 처럼 숫자를 오름차순으로 정렬하는 것부터가,나,다처럼 이름순으로 정렬하기도 하고,5,4,3,2,1과 같이 숫자를 내림차순으로 거꾸로 정렬하기도 합니다.프로그래밍에서는 이렇게 데이터를 적절히 정렬해두는 것이 중요합니다. 그래야만 해당 데이터가 필요한 순간에 손쉽게 그 데이터를 탐색하고 접근할 수 있기 때문입니다. 오늘은 알고리즘에서 소개되는 몇가지 정렬 방법들을 알아보도록 하겠습니다. 버블 정렬(Bubble Sort) 시간복잡도: O(n²)인접한 두 원소를 비교하여 교환하는 방식으로 정렬하며, 가장 큰 원소가 뒤로 이동합니다.코드가 간단하여 구현이 쉬운 반면, 시간복잡도 면에서 효율이 떨어지기에 큰 .. 2024. 7. 18.
[알고리즘/c++] - 하노이 머 하노 안녕하세요? 오랜만에 돌아온 알고리즘 시간입니다.오늘 배워볼 알고리즘은 바로.두번째 앨리스 머 하노(두번째앨리스는노란쌍둥이)하노이 머 하노가 아니라 하노이 탑 알고리즘.입니다. 하노이 탑 게임 : 3개의 기둥에 적당한 개수의 원반을 쌓아놓고 다른쪽으로 원판을 올리는 게임- 규칙 1: 작은 원반 위에 큰 원반이 올 수 없다. - 규칙 2: 원반을 옮기는 최소 횟수를 찾자(2개 = 3번 , 3개 = 7번) 하노이 탑 알고리즘은 위의 게임을 클리어하기 위한 일종의 규칙을 알고리즘으로 구현한 것을 의미합니다.하노이 탑의 원리와 정답은 의외로 간단하면서도 쉽게 생각해내기가 어렵습니다.https://vidkidz.tistory.com/649 하노이의 탑 (Tower of Hanoi)하노이탑 (Tower of Han.. 2024. 6. 18.
반응형