이전 포스팅에서 그래프 탐색 이론 중 하나인 DFS (깊이 우선 탐색) 에 대해 배우고, 실제 구현하는 코드를 살펴보았다. 그래프 탐색 알고리즘 - DFS (깊이 우선 탐색) 코드 구현 [자료구조C#] 그래프 탐색 알고리즘 - DFS (깊이 우선 탐색) 코드 구현위 포스팅에서 우리는 그래프 예시를 통해 DFS가 무엇인지에 대해 이해했다.이제 실제로 이 인물 관계도 그래프와 DFS를 C# 코드로 구현해보자.지난 포스팅에서도 잠깐 살펴 보았지만, 우선 이 인nybot-house.tistory.com이번 포스팅에서는 그래프 탐색 이론 중 하나인 BFS (Breadth-First Search, 너비 우선 탐색)에 대해 알아보자.BFS 너비 우선 탐색이란?BFS는 그래프 탐색 알고리즘 중 하나로, 시작 정점에서 ..
알고리즘
위 포스팅에서 우리는 그래프 예시를 통해 DFS가 무엇인지에 대해 이해했다.이제 실제로 이 인물 관계도 그래프와 DFS를 C# 코드로 구현해보자.지난 포스팅에서도 잠깐 살펴 보았지만, 우선 이 인물 관계도를 그래프로 구현하는 방법에는 크게 2가지가 있다. 배열을 사용해 인접 행렬을 만드는 방법과, 리스트 배열을 사용해서 인접 리스트를 만드는 방법이다. class Graph{ //모든 정보를 들고 있는 방식, 배열 사용 int[,] adj = new int[6, 6] { {0, 1, 0, 1, 0, 0}, //0번 카리나 정점 연결 정보 {1, 0, 1, 1, 0, 0}, //1번 제니 정점 연결 정보 {0, 1, 0, 0, 0, 0}, //2번 지수 ..
https://nybot-house.tistory.com/113 [자료구조] 그래프 개요자료 구조 중 그래프에 대해 알아보자.(기본 교과 과정에서 배웠던 수학의 그래프와는 전혀 관계 없음을 밝힌다)그래프란?: 현실 세계의 사물이나 추상적인 개념 간의 연결 관계를 표현하는데nybot-house.tistory.com이전 포스트에서 그래프의 개요에 대해 알아 보았다. 이제 실제 그래프를 구현해보고, 이 그래프를 탐색하는 방법 중 하나인 DFS(깊이 우선 탐색) 방법에 대해 알아보자.그래프 생성그래프를 구현해보기에 앞서서, 앞서 만들어 봤던 가상의 소셜 네트워크 관계도를 생각해보자.이제 우리는 그녀들과 데이트를 하려고 한다. 다만 서로 관계가 있는, 즉 연결되어 있는 인물들만 만날 수 있다. 우리는 그녀들을 모..
자료 구조 중 그래프에 대해 알아보자.(기본 교과 과정에서 배웠던 수학의 그래프와는 전혀 관계 없음을 밝힌다)그래프란?: 현실 세계의 사물이나 추상적인 개념 간의 연결 관계를 표현하는데 사용되는, 정점과 간선으로 구성된 데이터 구조이다.정점(Vertex): 데이터를 표현 (사물, 개념 등). 그래프의 기본 단위로, 각 정점은 고유한 값을 가질 수 있다. 정점은 일반적으로 원이나 점으로 표시된다.간선(Edge): 정점간의 연결을 나타낸다. 간선은 방향이 있을 수도 있고, 없을 수도 있다. (일방향일 수도, 양방향일 수도 있다는 것).ex) 소셜 네트워크 관계도, 지도와 길찾기, 웹 페이지 링크위 예시에서 각 인물들이 정점(Vertex)가 될 것이고, 서로 친구 사이임을 표시하는 선이 간선이 될 것이다. 이..
*자료 구조 알고리즘을 공부하기에 앞서 알아야 할 것은 책으로 외우는 것은 전혀 쓸모가 없다는 것이다.애초에 실행활에 도움을 주기 위해 발전한 영역이기 때문에 실제 어떻게 활용할 것인지 고민하면서 공부해야 학습하기 용이하다.선형 구조 (Linear Structure) 선형 구조는 데이터 요소들이 일렬로 연결된 구조이다. 각 요소는 전후의 요소와 직접적으로 연결되어 있으며, 이런 연결은 순차적으로 이루어진다. 대표적인 선형 구조에는 다음과 같은 것들이 있다.배열(Array): 고정된 크기의 연속된 메모리 블록으로 이루어진 데이터 구조이다. 각 요소는 인덱스를 통해 접근할 수 있다.연결 리스트(Linked List): 각 요소가 다음 요소에 대한 포인터를 가지고 있는 구조이다. 단일 연결 리스트, 이중 연결..
빠른 알고리즘은 느린 알고리즘보다 우수하다! 하지만... 빠름과 느림의 종류는 굉장히 다양하다. 알고리즘의 스피드를 어떻게 전문으로, CS적으로 표현하면 좋을까? 두 가지 알고리즘을 비교하는 방법? A가 B보다 "조금", "많이" 빨라요 -> 애매모호함. 어떤 환경에서는 a가 빠르고, 어떤 환경에서는 b가 빠르다면 애매하고 무의미해짐. 즉 시간으로 표현해서는 안됨. ex) 내 컴퓨터는 최신 컴퓨터라 너의 컴퓨터에서보다 알고리즘 실행이 빠르다. 입력이 적은 구간과 많은 구간 사이에서 성능 차이가 확연히 나는 경우도 있음 ex) 출퇴근 할 때 지하철이 빠른가 버스가 빠른가? 회사가 가까울 경우 버스가, 거리가 멀 수록 지하철이 좋은 선택이 되는 경우와도 같음. 두 가지 경우가 강점을 보이는 경우가 다른 상황..