gohyunyoung98   6년 전

안녕하세요...  제곧내 인데요..

시뮬레이션과 BFS/DFS의 차이에 대해서 좀 여쭤보고 싶습니다.

시뮬레이션은 인자들을 가지고 로직을 돌려봐서 결과가 나오는 걸 확인하는 거 같고..

BFS/DFS는 아시다시피.. 넓이,깊게 탐색하는 방식인데.. BFS/DFS를 쓰면서 시뮬레이션을 거치게 된다고 생각이 되는데

제가 잘모르고있는 것 같아서요 혹시 명쾌한 구분 같은게 있을까요? 그리고.. 

시뮬레이션 문제와 BFS/DFS를 풀때의 팁 같은것도 공유해주시면 감사하겠습니다.

chogahui05   6년 전

본인이 시뮬레이션이라고 생각하는 문제랑 dfs/bfs 문제를 들고 오시면 비교해 드릴 수 있습니다..

그리고 시뮬레이션이라고 해도 중간 중간에 bfs나 dfs라던지. 그러한 탐색이 들어가는 경우가 있어서요.

단순히 시뮬레이션 vs dfs/bfs라고 물어보시면 답변을 얻기가 좀 힘들 거 같고요.

chogahui05   6년 전

bfs/dfs를 약간 아신다는 전제 하에 답변 드리겠습니다.

bfs = 너비 우선 탐색.

dfs = 깊이 우선 탐색이라고 하는데요.

사실 어렵게 외우실 필요는 없고요. 단지, dfs는 깊게 들어갈 만큼 들어가보자.. 그 순서대로 탐색하자. 이거고요. (그냥 쉽게 이해하면..)

더 정확한 건.

노드 CHO가 있을 때

CHO 다음에 CHO의 자식 CHOGAHUI01, CHOGAHUI02, ...

이런 순서대로 있다고 칠 때

CHO를 탐색하고 CHOGAHUI01을 루트로 하는? 서브트리를 탐색하고.. CHOGAHUI02를 루트로 하는 서브 트리를 탐색하고.. 이런 식이에요. 굳이 자료구조를 야기하면 스택..

(탐색 순서는 직접 번호 매겨가면서 공부하세요. 나중에 RMQ를 이용한 lca 같은 거 이해하실 때 상당히 도움 많이 됩니다)

bfs는 안 그러죵~ 아시다시피.. 큐에 한 번 들어오면 인접해 있으면서 방문하지 않은 노드들을 좌르륵 큐에 넣는 식이구요.


그러니까 같은 그래프라도 방문 순서가 다르게 나타나겠지요..

chogahui05   6년 전

그런데.. 일단 여기까지만 아신다고 하면 조금 힘들구요.. 폭넓게 생각해 봅시다.

결국 탐색이잖아요. dfs던 bfs던. 탐색이에요.. 탐색의 한 종류일 거란 말이지요.

탐색이라고 하면..

어느 state를 검사했다. (그랬더니 어떤 값을 가지고 있더라) 이런 개념이라고 생각하시면 편할 거 같아요. 예를 들어서.

미로찾기를 하려고 합니다. aa에서 bb지점까지 가는 최단 거리를 구하려고 해요.

만약에, 인접한 지점 간 거리가 모두 같다면 bfs나 dfs 같은 걸 써먹을 수 있어요. 그런데 그건 어떻게 써먹을까요?

일단 위치 = 상태가 될 겁니다.

그리고 값 = 시작 위치에서부터 거리. 이렇게 저장하면 되겠네요.

조금 어려운 문제인 거울 설치 문제 같은 경우.. 이 때에는 가중치가 다릅니다..

거울에 반사된다 = 1

안 그렇다 = 0이지요. (사실 이 경우도 0/1 bfs를 돌릴 순 있다고 하는데 그냥 전 다익스트라 돌렸습니다)

이 때 상태값은 어떻게 하면 좋을까요?

일단. 위치. 방향. 이렇게 2가지를 저장하면 좋을 거 같아요.

그리고 값은 마찬가지로, 시작 위치로부터 누적이 되어 온 가중치겠지요..

탐색 같은 경우는.. 몇 문제를 푸셨다면.. 약간이나마 느끼셨을지도 모르겠지만.

상태랑 그 때 값이 무엇인지.. 어떻게 처리할 것인지가 정말 중요해요.. 이건 다익스트라에서도 마찬가지로 적용이 되고요.

이 부분만 기억하시면 조금 쉽게 접근할 수 있지 않을까 싶습니다..

댓글을 작성하려면 로그인해야 합니다.