로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 그래프 == === 최단 경로 === 편의상 <math>i\longrightarrow j</math>로 이동하는 경로의 최소 비용을 <math>cost\left[i\right]\left[j\right]</math>라고 표기한다. ==== 플로이드-워셜(Floyd-Warshall) 알고리즘 ==== [[파일:Floyd-Warshall Algorithm.png||섬네일|오른쪽]] 가장 간단하고 이해하기 쉬운 알고리즘이다. 간단하기 때문에 수행 시간도 생각보다 빠른 편이다. 그래프 상에 비용이 음수인 간선이 존재하는 건 괜찮지만 비용이 음수인 사이클이 존재하지 않아야 한다. 모든 정점 쌍들의 최소 비용을 한번에 구해버린다. 현재까지 구한 <math>i</math>에서 <math>j</math>로 가는 최소 비용보다 <math>i</math>에서 <math>k</math>를 거쳐 <math>j</math>로 가는 최소비용이 더 작다면 <math>cost\left[i\right]\left[j\right]</math>를 <math>cost\left[i\right]\left[k\right] + cost\left[k\right]\left[j\right]</math>로 대치한다. 이렇게 해서 모든 <math>\left(i, j\right)</math>에 대해 <math>cost\left[i\right]\left[j\right]</math>를 <math>O \left( n^3 \right)</math>로 구할 수 있다. C 코드로 표현하면 다음과 같다. <syntaxhighlight lang=c> for(int k = 1; k <= n; ++k) for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]); </syntaxhighlight> 이 때, cost[i][j]의 초기값에는 둘을 잇는 간선이 있을 경우 그 간선의 코스트, 없을 경우 무한대에 해당하는 매우 큰 값을 넣는다. * 연습문제 *: [https://www.acmicpc.net/problem/10159 저울] ==== 데이크스트라(Dijkstra) 알고리즘 ==== {{--|이거 왜 그리디에 없고 여기 있냐}} 유향 그래프에서 간선의 가중치가 모두 음이 아닌 정수일 때, 출발지에서 목적지까지의 최단거리를 찾는 알고리즘이다. 움짤이 여럿 돌아다니니 한 번 보자. [[파일:Shortest path Dijkstra vs BellmanFord.gif|thumb|Shortest path Dijkstra vs BellmanFord]] {{--|c부터 조사하지 않는 게 수상하긴 하지만 }}윗 것은 데이크스트라, 아랫 것은 벨먼 포드 알고리즘이다. 이것만 보고도 이해할 수 있다면 참 좋겠다. <!-- 다음은 그 소스이다. c로 구현하기 힘든데...--> 데이크스트라의 알고리즘은 [[인터넷]]의 네크워크 계층에서 [[라우터]]가 [[라우팅]]을 할 때 사용되는 방법 중 하나로 최단 경로 우선 프로토콜(OSPF)에 사용된다. ==== 벨먼-포드(Bellman-Ford) 알고리즘 ==== [[추가바람]] 벨먼-포드의 알고리즘은 데이크스트라의 알고리즘과 비슷한 시기에 나왔으나, 데이크스트라의 알고리즘에 비하면 계산 횟수는 더 안 좋지만, 계산 과정과 전달 자체만은 비교적 간결한 형태를 띠고 있다. 인터넷에서 라우터가 라우팅을 할 때 사용되는 방법 중 하나인 라우팅 정보 프로토콜(RIP)에서 이 알고리즘을 사용하고 있다. OSPF에 비해서는 비교적 간결한 통신을 하지만, 순환 경로나 수신자가 메시지 도착 전에 가동 불능이 되는 경우에는 문제가 생길 수 있다는 단점이 있다. === 위상 정렬 === DAG에서 모든 노드에 대해서 자신을 가르키는 노드가 무조건 자신의 앞에 오도록 순서를 매기는 것이다. === 최소 비용 스패닝 트리(MST) === ==== 크러스컬(Kruskal) 알고리즘 ==== 가중치가 있는 양방향 그래프(무향 그래프)에서 최단 거리를 찾을 때 사용하는 그리디 알고리즘이다. 사이클이 있는 그래프에서 '''가중치가 높은 간선을 쳐내는''' 방식으로 진행하며, 간선을 전부 정리하면 최소 신장 트리(MST)가 된다. ==== 프림(Prim) 알고리즘 ==== === 강연결요소(SCC) === === 네트워크 플로우 === ==== 포드 펄커슨 알고리즘 ==== ==== 에드몬드 카프 알고리즘 ==== ==== 디닉 알고리즘 ==== ==== 이분 매칭 ==== ==== MCMF ==== 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț