일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ethers type
- 체인의정석
- ambiguous function description
- vue기초
- rust 기초
- 컨트렉트 동일한 함수이름 호출
- ethers
- 러스트기초
- 러스트 기초
- 스마트컨트렉트프록시
- ethers v6
- 스마트컨트렉트 함수이름 중복 호출
- 러스트 기초 학습
- SBT표준
- ethers typescript
- 프록시배포구조
- nest.js설명
- 컨트렉트 배포 자동화
- Vue.js
- 티스토리챌린지
- 머신러닝기초
- 스마트컨트렉트테스트
- chainlink 설명
- 오블완
- 스마트컨트렉트 예약어 함수이름 중복
- git rebase
- ethers websocket
- 스마트 컨트렉트 함수이름 중복
- Vue
- multicall
- Today
- Total
체인의정석
대표적인 그래프 탐색(BFS - UCS, DFS - IDS)과 각 탐색에 대한 평가 본문
평가 기준
1. Completness (완전성) : 출발에서 목표까지 항상 가는가
2. Optimal(최적) : 최적이냐 항상 최소 비용을 보장하는가?
3. Time Complexity : 시간 복잡도, 노드의 개수가 몇개나 생성되는가?
4. Space Complexity : 탐색 시 사용하는 메모리 (몇개의 노드나 메모리에 들고 있는가?)
탐색 방법
BFS : 너비 우선 탐색, 선입선출인 큐를 써서 구현한다. =>> IDS 너비 우선이지만 제한을 두고 찾는 것
- BFS의 평가 척도 ,
- 완전성 - 노드의 수가 유한하기 때문에 완전하다. 하나의 너비에 무한개가 있는 것은 너무 극단적이므로 예외
- 최적 - 최적이다. 무조건 하나의 너비에 대해서 다 찾기 때문에 최적을 찾는다. DFS는 깊이가 우선이므로 최적은 아니다.
- 시간 복잡도 - O(b^d ) *b가 매 상태, d가 깊이.
UCS : BFS의 확장 버전, 다익스트라
- Uniform cost search 즉 단일 비용 서치이다. BFS나 DFS는 노드가 어디로 가는지를 고려하지만 유니폼 코스트 탐색은 해당 노드까지 얼마나 비용이 드는지를 찾는다. 큐에서 코스트를 서칭해서 집어 넣고 사용하게 된다. 다른 말로는 Digkstra's 다익스트라의 최단 경로 알고리즘 이라고도 한다.
- BFS의 과정에서 만약 비용이 덜 드는게 있다면 업데이트 하는 로직이 중간에 추가 (더 짧은 길이 나온다면 그것으로 새로 업데이트) 항상 우선큐에서 비용을 보고 분기처리를 해서 최소 비용인 명령을 수행시킨다.
-BFS와의 또 하나의 차이점은 골 테스트 시점이다. BFS는 마지막이 GOAL이면 그 상태를 저장하지 않고 끝내면 되지만 UCS는 GOAL을 체크하는 것이 기계적으로 하면 안되고 항상 시작시에 비용을 고려해야 하기 때문에 끝날 경우에는 GOAL까지 다 저장하고 시작시에 검사를 하는 식으로 로직을 짠다.
- 완전성 : O (스탭 비용이 작은 양수라면, 코스트가 음수면 찾긴 하지만 최적성은 없다.)
- 최적 : 최적이다.
- 시간 공간 복잡도는 아래 링크 참고 (기본적으로 같으나 비용에 따라 달라짐)
https://magician-of-c.tistory.com/35
DFS : 깊이 우선 탐색 (Depth-first-search)
- LIFO 큐를 사용, 가장 깊은 노드를 우선적으로 탐색한다.
- 완전성 : 완전하지 않다. 유한한 공간과 깊이가 필요하다.
- 시간복잡도 : 최대 깊이를 m이라고 할 경우 O(b^m) 이다. 깊이가 크면 더 BFS보다 더 나쁘지만 그렇지 않다면 더 좋다.
- 공간 복잡도 : 탐색 시에는 해당 깊이에 대한 내용만 들고 있으면 된다.
DLS : DLS 깊이 우선이지만 제한을 두고 찾는 것.
- 그냥 DFS에서 레벨을 지정해두고 그 안에서 찾는다.
- 깊이의 리밋을 거는 느낌, 중간에 cutoff를 만들어서 탐색 전에 그냥 몇단계 까지만 진행하도록 한다.
- 완전성 : 유한하므로 당연히 O
-시간 복잡도 : O(b^d) *여기서 d는 레벨 , bfs 보다는 조금 더 많은 노드가 생성
- 공간 복잡도 : O(bd)
- 최적화 : 스텝 코스트가 1이라면 최적의 경로를 찾게 된다.
* Bidirectional Search : 시작점과 도착점 양쪽에서 서치하기 시작, 양쪽 다 BFS를 사용할 경우에는 완전성과 최적성이 보장되며 문제는 많은 공간 복잡도 이다. O(b^(d/2))
'빅데이터&인공지능 > 인공지능' 카테고리의 다른 글
인공지능의 탐색방법 - Local Search (Hill Climbing Search, Simulated Annealing Search, Local Beam Search, Genetic Algorithm) (0) | 2023.09.23 |
---|---|
A* 에이스타 (Best First Search)와 발견적 탐색(휴리스틱 서치, Heuristic) (0) | 2023.09.16 |
머신러닝 스터디 02-선형모델(분류 편)- 다중 클래스 분류용 선형 모델 (0) | 2020.08.10 |
머신러닝 스터디 02-선형모델(회귀 편)선형회귀,릿지회귀,라쏘회귀 (0) | 2020.07.12 |
머신러닝 스터디 02-선형회귀(회귀편)KNeighborsClassifier 분석, k-최근접 이웃 회귀 (0) | 2020.07.11 |