[알고리즘] 그래프에서 패스(Path) 의 정확한 정의..

gyxor의 이미지

형식언어와 오토마타라는 책에서는..
일반적으로 간선들의 순서열을 보행(walk)라고 하며

보행중 간선 중복이 없는 경우를
:경로(path)

경로중에서 어느 정점도 중복하여 지나지 않는 경우
:단순경로(simple path)

경로중에서 처음 시작 정점과 마지막 정점이 같은 경우
:사이클(cycle)

사이클중에서 정점이 중복되지 않는 경우
:단순 사이클(simple cycle)

이렇게 나와있습니다.
그런데
이산수학,자료구조,알고리즘 각각의 총 3권의 책에
나와있는 path의 정의에서는 하나같이..
" 간선이 중복 되지 않아야 한다 "는 이야기가 없습니다.

즉, walk의 정의가 따로 없게 되는것입니다.
물론 매우 사소한 부분이지만..
정의....라는 측면에서 보면..
아직도 개념이 제각각인것인지....
어느게 맞는것인지 모르겠습니다.
설명부탁드립니다.

pool007의 이미지

개념이 제각각인게 맞습니다. 제가 전에 정리한 세가지(-_-;)정의는 다음과 같습니다.

1) WALK : sequence of vertex which has incident edges.
a) TRAIL : a WALK whose edge is not repeated
PATH : a TRAIL whose vertex is not repeated
b) CIRCUIT : a WALK which strat from and end at the same vertex and whose edge is not repeated.
CYCLE : a CIRCUIT whose vertex is not repeated

2) WALK : same as above
a) PATH : a WALK whose edge is not repeated
simple PATH : a PATH whose vertex is not repeated
b) CYCLE : a WALK which start from and end at the same vertex and whose edge is not repeated
simple CYCLE : a CYCLE whose vertex is not repeated

3)
a) PATH : sequence of edges
simple PATH : a PATH whose edge is not repeated
elementary PATH : a simple PATH whose vertex is not repeated
b) CYCLE : sequence of edges which start from and end at the same vertex
simple CYCLE : a CYCLE whose edge is not repeated
elementary CYCLE : a simple CYCLE whose vertex is not repeated

--
Passion is like genius; a miracle.

자룡의 이미지

주위에 있는 책이 알고리즘책과 자료구조책 뿐이군요.

자료구조개론 이란 책에서는 path 가 중복되지 않는다는 문장은 없지만

Quote:

정점 u 와 v 를 연결하는 경로를 u 와 v 사이의 패스(path)라 하며
패스상의 연결선의 수를 패스 길이라 한다.
정점 v1 과 vk를 연결하는 패스를 P(v1, v2, ..., vk) 라 할때 패스 P 의 길이는 (k-1) 이며
패스 P에서 정점 v1 과 v2 사이의 연결선의 수에 해당한다.

라고 기술된것을 보면 간선은 중복되는 것이 아니라는 의미를 가지고 있지 않을까 생각됩니다.
중복이 될수있다면 길이자체를 저렇게 수식으로 내보일수 없을것 같거든요.

컴퓨터알고리즘이란 책에서는

Quote:

a path from v to w in a graph or digraph G=(V,E) is a sequence of edges
v0v1,v1v2,...,vk-1vk,
such that v0=v, vk=w, and v0, v1, ... , vk are all distinct

라고 distinct 라는 표현이 사용되어 있네요.

pool007 님이 정리해주신 내용에서도 1, 2번에선
path 는 edge 가 not repeat 인데..

Quote:

3)
a) PATH : sequence of edges
simple PATH : a PATH whose edge is not repeated
elementary PATH : a simple PATH whose vertex is not repeated
b) CYCLE : sequence of edges which start from and end at the same vertex
simple CYCLE : a CYCLE whose edge is not repeated
elementary CYCLE : a simple CYCLE whose vertex is not repeated

에서는 좀 혼란스럽긴 하네요
만일 simple PATH + elementary PATH = PATH 라는 개념이라면
PATH 에서는 간선이 중복되지 않는다.. 라는 의미를 가지고 있는것이라 볼 수 있지 않을까요?

-----
이글을 읽는 모든 이에게 평화가 함께 하기를... ^^;

gyxor의 이미지

그렇게 3가지 종류의 정의가 있는지 미처 몰랐습니다...
나름대로...정의군요..^^;
답변감사합니다.

차리서의 이미지

이미 좋은 댓글들이 많이 달려서 원하시던 답변을 벌써 얻으셨을테지만 참고삼아 사족을 하나 달자면, 어디에서나 똑같이 정의되어있으리라 기대되는 매우 일반적인 용어들 중에도 이 경우처럼 문헌마다 정의가 조금씩 엇나가는 일이 종종 있습니다. 물론 새로운 글을 저술할 때에는 가능한 한 (그런게 확정되어 있을 경우) 기존의 ‘관례적 정의’에 맞춰서 똑같이 쓰는게 바람직하겠지만, 같은 용어를 조금 다르게 정의했다고 해서 꼭 잘못된 것이라고 할 수도 없습니다. 정의란 말 그대로 ‘정의’이고, 결국 (한 문헌 내에서 그 정의들끼리 논리적으로 충돌하지만 않는다면) 정의하는 사람 마음대로니까요.

그래서, (특히 이공계 문헌들일수록 더욱) ‘지금 읽고있는 문헌에서 이 용어를 어떻게 정의했었는가’에 철저하게 맞춰서 읽는 것이 가장 중요합니다. 좋은 문헌이라면

  • 딱 한가지로 고정된 관례적 정의가 널리 통용되는 용어들을 (그 의미대로) 주로 사용하거나,
  • 만일 관례적 정의가 확정되지 못한 (문헌마다 조금씩 다른 경우가 많은) 용어를 사용할 때에는 초반에 이 용어를 정확하게 정의해두며
  • 관례적 정의와 문헌 내의 로컬 정의를을 모두 아울러도 논리적인 모순이 없도록
잘 정의되어있을테니까요. 만일 용어의 정의가 정확히 무엇이냐에 따라 글의 의미가 완전히 달라질 정도로 모호한 용어를 사용하면서도 그 용어를 정확히 정의해두지 않고 진행하는 글이 있다면, 그다지 좋은 글은 아닐겁니다.

여담이지만, 개중에는 스스로 정의해둔 용어마저 나중에 함부로 막 쓰는 문헌들도 있는데, 이런 경우에도 솔직히 조금 짜증이 나죠. 예를 들어:

어떤 책 초반부 wrote:
정의 1 (T) : “T란 …이다.”
정의 2 (simple T) : “Simple T란 p1 속성과 p2 속성을 모두 만족시키는 T이다.”
정의 3 (f : T → N) : “모든 T t에 대해서 (∀t∈T), f(t)란 t의 …이다.”
정의 4 (g : simple T → N) : “모든 simple T t에 대해서, g(t)란 t의 …이다.”

이렇게 정의해놓고는 한참 나중에 본문에 이런게 나옵니다:
그 책 중반부 wrote:
정리 1 : “모든 T x와 y에 대해서, 만일 f(x) ≤ f(y)이면 g(x) ≤ g(y)이다.”

:evil: 물론 “모든 simple T x와 y에 대해서…”를 잘못 썼겠거니 생각해줄 수도 있지만, 이런 짐작을 동원해 읽어야한다는 사실은 (아무리 이 경우처럼 개연성이 충분해도) 분명히 찝찝한 일입니다. 때로는 매우 위험하기도 하고, 결국 골탕을 먹는 경우도 있습니다. 저자도 인간이니 한 두 번 정도의 사소한 실수야 그렇다고 쳐도, 이런 일이 수없이 반복되거나 이로인해 개념 자체를 오해하면서 골탕을 먹고나면 책을 집어던지게되더군요. :?

아무튼, 항상 그 책에 나오는 정의에 충실히 따르시는게 중요하며, (좋은 책이라면) 이렇게만 읽으시면 다른 책에 나오는 정의와 조금 다르더라도 아무 문제 없을겁니다. :)

[/]

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!

익명 사용자의 이미지

오 그러면..

for each v0, v1, v2, v3

v0 → v1 → v2 → v3 ?
v0 → v1 → v1 → v2 → v3
v0 → v1 → v1 → v1 → v2 → v3
v0 → v1 → v1 → v1 → v1 → v2 → v3

이것들이 다 walk로는 구분되는데,
trail 이나 path로는 구분이 안된다는 말인가요?

알쏭달쏭..

익명 사용자의 이미지

헐 저도 책읽다가 짱나서 검색하고 있었는데용 ^^

책보다 보면 개념이 살짝살짝 제 각각인경우가 많은것 같습니다.

익명 사용자의 이미지

헐 저도 책읽다가 짱나서 검색하고 있었는데용 ^^

책보다 보면 개념이 살짝살짝 제 각각인경우가 많은것 같습니다.

익명 사용자의 이미지

헐 저도 책읽다가 짱나서 검색하고 있었는데용 ^^

책보다 보면 개념이 살짝살짝 제 각각인경우가 많은것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.