DFS(5)
-
[AI] 탐색 문제 : Uninformed Search
Problem-Solving Agents 1. 어떤 Agent든 "Sensor"를 통해서 인식하는 정보들이 존재할 것이다 :: Percept 2. Percept 정보와 State(직전 상태) 정보를 결합(Update-State)함으로써 새로운 State를 정의한다 ※ Sequence(Sequence Of Action)가 없다면? Sequence가 없다는 의미는 현재 "계획"이 없다는 의미이다 >> 따라서 계획을 먼저 수립해야 한다 1) 현재 State로부터 먼저 Goal을 정한다 Goal은 1) Agent가 스스로 정할 수 있고, 2) 외부에서 Agent에게 정해줄 수 있다 2) 현재 State & Goal을 통해서 Problem을 formulate한다 (탐색 대상이 될 수 있는 Problem으로 만들기..
2022.04.01 -
[Data Structure] BFS vs DFS (인접 리스트)
BFS(stack) VS DFS(queue) BFS : 깊이 우선 탐색 - stack or 순환으로 구현 DFS : 너비 우선 탐색 - queue로 구현 #include #include // 인접 리스트(BFS - 스택 / DFS - 큐) #define MAX_VERTEX 50 #define TRUE 1 #define FALSE 0 typedef int element; // 그래프 구현 typedef struct graphnode { int vertex; struct graphnode* link; }graphnode; typedef struct graph { int n; graphnode* list[MAX_VERTEX]; }graph; int visited[MAX_VERTEX]; void init_vis..
2021.12.24 -
[Data Structure] BFS vs DFS (인접 행렬)
BFS(stack) VS DFS(queue) BFS : 깊이 우선 탐색 - stack or 순환으로 구현 DFS : 너비 우선 탐색 - queue로 구현 #include #include // 인접 행렬 (BFS-스택 / DFS-큐) #define MAX_VERTEX 50 #define TRUE 1 #define FALSE 0 typedef int element; typedef struct graph { int n; // 정점 개수 int vertex[MAX_VERTEX]; // 정점 저장 배열 int matrix[MAX_VERTEX][MAX_VERTEX]; }graph; int visited[MAX_VERTEX]; void init_visited(int arr[]) { for (int i = 0; i <..
2021.12.24 -
[Data Structure] DFS (깊이 우선 탐색)
DFS - 깊이 우선 탐색 - 인접 행렬(순환/stack), 인접 리스트로 구현 - 어떤 노드를 방문했는지 검사를 무조건 해줘야 한다 (검사를 안해주면 무한 루프에 빠진다) 검사를 위한 배열 int visited[MAX_VERTEX] → dfs 시작할 때, 전부 FALSE로 초기화 - 인접 행렬 : O(n²) (정점 n개) - 인접 리스트 : O(n+e) (정점 n개, 간선 e개) 인접 행렬로 구현한 DFS 1. 순환 : dfs_mat_recur(graph* g, int v) 정점 v에서부터 dfs 시작 v는 방문완료니까 visited배열에 TRUE 표시 v의 인접 정점 w에서 탐색 시작 -- (1) matrix[v][w] == 1 (인접)이고, visited[w] == FALSE (방문 X)이면, 정점..
2021.12.23 -
[Data Structure] 그래프 탐색
그래프 탐색 방법 DFS (Depth First Search) : 깊이 우선 탐색 BFS (Breath First Search) : 너비 우선 탐색 DFS ≒ 전위/중위/후위 순회 BFS ≒ 레벨 순회 DFS (Depth First Search) - 깊이 우선 탐색 - 한 방향으로 끝까지 진행 - 더 이상 갈 곳이 없으면, 가장 가까운 곳으로 다시 되돌아가서(backtracking) 해당 지점에서부터 다시 탐색을 시작 ▶ 구현 방법 1. 인접 행렬 2. 인접 리스트 순환 호출 사용 stack 사용 : 인접 정점들을 stack에 저장했다가 꺼내서 다시 탐색 BFS (Breath First Search) - 너비 우선 탐색 - 현재 정점으로부터 가장 가까운 노드를 먼저 방문 - 멀리 떨어져 있는 정점은 나중..
2021.12.23