Deque๋ bfs ํจ์๋ฅผ ๊ตฌํํ ๋, ๊ฑฐ์ ํ์๋ก ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
์ฐ์ , Deque๋?
์คํ์ด๋ ํ์ฒ๋ผ ํ ๋ฐฉํฅ์์ ์ฝ์
์ญ์ ๊ฐ ์ผ์ด๋์ง ์๊ณ , ์๋ฐฉํฅ์์ ์ฝ์
์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค.
https://wiki.python.org/moin/TimeComplexity
TimeComplexity - Python Wiki
This page documents the time-complexity (aka "Big O" or "Big Oh") of various operations in current CPython. Other Python implementations (or older or still-under development versions of CPython) may have slightly different performance characteristics. Howe
wiki.python.org
๋ฆฌ์คํธ์์ ์ญ์ ์ฝ์
์ด ์์ ๋ก์ด๋ฐ, ๊ตณ์ด ์คํ,๋ฑ ์ ์ธ ํ์๊ฐ ์์๊น?
์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด,
list์์ ์ญ์ ์ฐ์ฐ์ O(n), deque์์ ์ญ์ ๋ O(1)๋งํผ ๊ฑธ๋ฆฐ๋ค.
์์ ์ฐ์ฐ์ผ ๋ ๊ด์ฐฎ์ง๋ง, ์ฐ์ฐ๋์ด ๋ณต์กํ๊ณ ์ปค์ง์๋ก ์๊ฐ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๋ ๊ฒ๋งํผ ์ค์ํ ๊ฒ ์์ ๊ฒ์ด๋ค.
์ ? list์์ ์์๋ฅผ ์ญ์ ํ๋๋ฐ O(n)์ด๋ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ๊ฒ์ผ๊น?
list์์ ํ๋์ ์์๋ฅผ ์ญ์ ํ ๋, ๊ทธ ์์๋ง ๋น ์ง๋ ๊ฒ์ด ์๋, ๊ทธ ์์๋ฅผ ์ง์ฐ๊ณ ๋ชจ๋ ์์๋ฅผ ์์ผ๋ก ๋น๊ฒจ์ค๋ค. ๊ทธ๋ ๊ธฐ์ O(n)์ด ๊ฑธ๋ฆฌ๊ฒ ๋๊ณ , ์ด๊ฒ์ด ๋ฐ๋ก ๋ฑ(deque)๋ฅผ ์จ์ผํ๋ ์ด์ ์ด๋ค.
Deque๋ฅผ ์ ์ฐ๊ธฐ ์ํด Deque ์์ฃผ ์ฐ์ด๋ ํจ์์ ๋ํด ์์๋ณด์.
- ์ฝ์ (append( ๊ฐ ), appendleft( ๊ฐ ))
from collections import deque
q = deque([1,2,3,4])
q.append('5')
q.appendleft('0')
print(q)
๊ฒฐ๊ณผ : ['0', 1,2,3,4, '5' ]
- ์ฝ์ ( insert( ์์น, "์์" ) )
q = deque([1,2,3,4])
q.insert(2,"hello")
print(q)
2๋ฒ์งธ์ hello๋ฅผ ๋ฃ์ด์ค๋ค.
๊ฒฐ๊ณผ : [1,2, "hello", 3, 4]
- ์ญ์ ( pop(), popleft() )
q = deque([1,2,3,4])
q.popleft() #[2,3,4] 1์ญ์
q.pop() #[2,3] 4์ญ์
print(q)
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
BFS ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ ๋ฆฌํด๋ณด์.
BFS๊ฐ๋
์ ์๋๋ฐ ๋ง์ ์ฝ๋๋ฅผ ์ง๋ผ๊ณ ํ๋ฉด ์ง์ง ๋ชปํ๋ค..
0๋ฒ ๋
ธ๋์์ ์์ํด๋ณด์.
0์ ํ์ ์ฝ์
ํ์. ๋ฐฉ๋ฌธํ์ผ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ ํด์ฃผ์. (visited = Trie)
์ดํ ๋ฐ๋ณต๋ฌธ์์ ์ญ์ ํด์ฃผ๋ฉด์ ์ธ์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํด์ฃผ๋ฉด ๋ ๊ฒ์ด๋ค.
์์์ ๋งํ ๊ฒ์ฒ๋ผ, 0์ ํ์์ ์ญ์ (popleft)ํด์ค๋ค.
์ญ์ ํ ์์์ ์ธ์ ํ ๋
ธ๋๋ฅผ ๋ฐ๋ณต๋ฌธ์ ํตํด ์ดํด๋ณด์.
0๊ณผ ์ธ์ ํ ๋
ธ๋๋ 1,2,4์ด๋ค.
1,2,4 ์์๋ฅผ ํ์ํ๋ฉฐ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด, (๋ฐฉ๋ฌธ๋
ธ๋๊ฐ False)
q.appendํด์ฃผ์! q์ ๋ฃ์ด์ฃผ๊ณ , ๋ฐฉ๋ฌธ์ฒ๋ฆฌํด์ฃผ์!
๊ทธ๋ผ ์ด๋ ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด์ ๋ค์ ๋์์์ 1์ popleft()ํ๋ฉด์, 1์ now๋ก ์ค์ ํด์ค๋ค.
1๊ณผ ์ธ์ ํ ๋
ธ๋ && ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋ = ?
1๊ณผ ์ธ์ ํ ๋
ธ๋๋ 0๊ณผ 2์ด์ง๋ง, 0์ ์ด๋ฏธ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๊ฐ ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด
1๊ณผ ์ธ์ ํ ๋
ธ๋ && ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋ = 2์ด๋ค.
๋ค์ 2๋ฅผ ๋ฐฉ๋ฌธํ์
์ ๊ณผ์ ์ ํ๋ค๋ณด๋ฉด,
๋ชจ๋ ๋
ธ๋๋ฅผ ์ธ์ ํ ๋
ธ๋ ์์ผ๋ก ํ์ํ๊ฒ ๋๋ฉฐ, ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ ๋
ธ๋๋ฅผ popํด์ฃผ๋ฉด์ ํ๊ฐ ๋น๊ฒ ๋๋ค.
ํ๊ฐ ๋น์์ง๋ฉด, ๋ชจ๋ ๋
ธ๋๋ฅผ ํ์ํ๋ค๋ ๋ป์ด๋ค!
def bfs(graph, start, visited_bfs):
q = deque( [start] )
visited_bfs[start] = True
while q:
now = q.popleft()
print(now,end=' ')
for i in graph[now]:
if visited_bfs[i] == False:
q.append(i)
visited_bfs[i] = True
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์์ ์ deque์ ๋ฃ์ด์ฃผ๊ณ , ๋ฐฉ๋ฌธ์ฒ๋ฆฌํด์ฃผ์๋ค.
์ดํ ๋ฑ์ด ๋น ๋๊น์ง ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ๋๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ + ๋ฑ์ ์ถ๊ฐ ํด์ฃผ๋ฉด ๋๋ค.
์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
'๋์ ๋์ ์ฝ๋ฉ์ผ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์ฝํ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2022.08.10 |
---|---|
ํ์ด์ฌ ํ์ํ ํจ์ ์ ๋ฆฌ (0) | 2022.08.02 |
<์ด์ฝํ > ์ฝํ ์์ ์์ฃผ ์ถ์ ๋๋ ๊ธฐํ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.07.27 |
<๋ถ์คํธ์บ ํ ai 4๊ธฐ ์๊ฐ์ง๋จ> ๋ฌธํ (0) | 2022.07.27 |
ํ์ด์ฌ ์ ์ถ๋ ฅ ์ ๋ฆฌ (0) | 2022.07.23 |