Q&A

  • 알고리즘 문제예요.고수님
다음과 같이 순서쌍이 있을때..

(A,B)

(D,G)

(C,E)

(B,C)

(C,F)





이렇게 있을때

A,B,C,E,F 와 D,G

로 분류하는 알고리즘..부탁해여..



위처럼 분류한건..

(F1,F2)는 F1와 F2가 연결되었다는 뜻입니다. 그러므로 F1,F2는 같은 분류

(A,B),(B,C) 라고 하면 A,B,C는 같은 분류입니다.

(A,B),(C,D) 라고 하면 A,B 하고 C,D로 나누어지겠죠..



위와 같이 분류시키는 알고리즘 부탁합니다..대충이라도 리플 달아주세염..









5  COMMENTS
  • Profile
    나무.. 2001.07.22 17:26
    님이 말하신거 트리 검색 같은데



    트리는 하나 원소에 두개의 방향만 갖구 있죠.

    예)

    A -> B -> C -> E -> F

    | |

    | Z

    |

    L -> R -> Q

    |

    S

    뭐 대충 이렇게 되는게 트리라는 구조(나무가지라 생각하세여)인데요 (혈통을 갖구 있어서 거꾸루 가면 안되여)



    여기 반해 다수개의 방향과 로프 구조를 갖는 것을 그래프라고 하고



    예)

    A -> B -> C -> A 또는 A -> C

    -> B

    -> D



    네트워크는 그래프에 쌍방향을 갖는 거죠. A <-> B -> C



    트리 검색은 자료구조에 대한 책을 찾아 보믄 무지무지 자세하게 나오죠(거의 C소스)



    그럼 일단 님에 대한 해결 방안은 이진 트리 구조라 생각하고 제시 하겠슴당.



    (그래프나 네트워크는 딴 고수님들두 도와 주시길 지가 실력이 딸려서리염)



    -----------------------------------------------------------------------

    첫번째 순서쌍에서 두번째 값 추출



    첫번째 순서쌍 스택 1번에 저장,



    첫번째 순서쌍 파일에 저장



    전체 순서쌍에서 첫번째 순서쌍 삭제



    첫번째 순서쌍, 두번째 값으로 남아있는 순서쌍의 첫번째 값 검색



    존재 하면 두번째 값과 저장을 스택 1번에 저장



    찾은 두번째쌍 파일에 저장



    찾은 두번째 쌍에서 두번째 값 추출



    전체 순서쌍에서 두번째 순서쌍 삭제



    찾은 두번째 쌍 두번째 값으로 검색



    존재 하면 찾은 세번째 쌍 저장 (추출, 삭제, 검색을 반복.........)



    존재하지 않으면 스택 1번 맨 위 값으로



    스택의 갯수가 1개 이상인 경우 다시 검색



    스택의 갯수가 0인 경우 끝내거나, 새로운 파일 생성



    -----------------------------------------------------------------------

    파일에 저장 된거, 나중에 같은거 다 지우면 됩니다.



    물론 파일이라고 쓴데는 스티링을 쓰면 됩니다. 스트링이든 스트링 리스트든 저장 되는거 암거나

    스택은 Last in First out(LIFO)인거 아시죠? 만약 스트링 쓴다면 맨 마지막꺼 꺼내쓰면 되겠죠?





    도움이 됐으면 하네여,,



    그럼 나무.. 였슴당..





    순서쌍 갯수 N



    어린왕자 wrote:

    > 다음과 같이 순서쌍이 있을때..

    > (A,B)

    > (D,G)

    > (C,E)

    > (B,C)

    > (C,F)

    >

    >

    > 이렇게 있을때

    > A,B,C,E,F 와 D,G

    > 로 분류하는 알고리즘..부탁해여..

    >

    > 위처럼 분류한건..

    > (F1,F2)는 F1와 F2가 연결되었다는 뜻입니다. 그러므로 F1,F2는 같은 분류

    > (A,B),(B,C) 라고 하면 A,B,C는 같은 분류입니다.

    > (A,B),(C,D) 라고 하면 A,B 하고 C,D로 나누어지겠죠..

    >

    > 위와 같이 분류시키는 알고리즘 부탁합니다..대충이라도 리플 달아주세염..

    >

    >

    >

    >

  • Profile
    어린왕자 2001.07.23 01:25
    문제의 발단은 트리에서 시작이 되었는데요..

    집합으루 풀면 더 쉬울꺼 같아요..



    S1 = (a1,b1)

    S2 = (a2,b2)

    .

    .

    .

    Sn = (an,bn)



    이렇게 있을때



    하나하나 집합끼리 * 연산을 한다는 거죠.



    <집합에 대한 * 연산정의>



    A * B ={ x | A와 B와 교집합이 존재할경우

    A와 B를 합집합한 원소

    아닐 경우는 연산하지 않음}



    S1 * S2 *...Sn = T1 * T2 *..Tn으로 분류가 될꺼예요.



    하지만 위의 것은 전체적인 문제를 도식화 한거 구요..





    S1 * S2을 할때는.

    루프를 돌면서 각각의 원소를 비교해서..

    같은 원소가 존재를 하면

    새로운 집합 Sn을 구성을 하는거죠.S1과 S2의 합집합

    물론 이전 S1,S2의 집합은 삭제를 하구요.



    TStringList를 사용하면 되겠져.



    그래서 모든 Sn의 집합들끼리 *연산이 안될때 까지 하는 겁니다..(불리안 펑션이 필요하겠고, 전체 집합의 갯수를 알아야겠고요)











    나무.. wrote:

    > 님이 말하신거 트리 검색 같은데

    >

    > 트리는 하나 원소에 두개의 방향만 갖구 있죠.

    > 예)

    > A -> B -> C -> E -> F

    > | |

    > | Z

    > |

    > L -> R -> Q

    > |

    > S

    > 뭐 대충 이렇게 되는게 트리라는 구조(나무가지라 생각하세여)인데요 (혈통을 갖구 있어서 거꾸루 가면 안되여)

    >

    > 여기 반해 다수개의 방향과 로프 구조를 갖는 것을 그래프라고 하고

    >

    > 예)

    > A -> B -> C -> A 또는 A -> C

    > -> B

    > -> D

    >

    > 네트워크는 그래프에 쌍방향을 갖는 거죠. A <-> B -> C

    >

    > 트리 검색은 자료구조에 대한 책을 찾아 보믄 무지무지 자세하게 나오죠(거의 C소스)

    >

    > 그럼 일단 님에 대한 해결 방안은 이진 트리 구조라 생각하고 제시 하겠슴당.

    >

    > (그래프나 네트워크는 딴 고수님들두 도와 주시길 지가 실력이 딸려서리염)

    >

    > -----------------------------------------------------------------------

    > 첫번째 순서쌍에서 두번째 값 추출

    >

    > 첫번째 순서쌍 스택 1번에 저장,

    >

    > 첫번째 순서쌍 파일에 저장

    >

    > 전체 순서쌍에서 첫번째 순서쌍 삭제

    >

    > 첫번째 순서쌍, 두번째 값으로 남아있는 순서쌍의 첫번째 값 검색

    >

    > 존재 하면 두번째 값과 저장을 스택 1번에 저장

    >

    > 찾은 두번째쌍 파일에 저장

    >

    > 찾은 두번째 쌍에서 두번째 값 추출

    >

    > 전체 순서쌍에서 두번째 순서쌍 삭제

    >

    > 찾은 두번째 쌍 두번째 값으로 검색

    >

    > 존재 하면 찾은 세번째 쌍 저장 (추출, 삭제, 검색을 반복.........)

    >

    > 존재하지 않으면 스택 1번 맨 위 값으로

    >

    > 스택의 갯수가 1개 이상인 경우 다시 검색

    >

    > 스택의 갯수가 0인 경우 끝내거나, 새로운 파일 생성

    >

    > -----------------------------------------------------------------------

    > 파일에 저장 된거, 나중에 같은거 다 지우면 됩니다.

    >

    > 물론 파일이라고 쓴데는 스티링을 쓰면 됩니다. 스트링이든 스트링 리스트든 저장 되는거 암거나

    > 스택은 Last in First out(LIFO)인거 아시죠? 만약 스트링 쓴다면 맨 마지막꺼 꺼내쓰면 되겠죠?

    >

    >

    > 도움이 됐으면 하네여,,

    >

    > 그럼 나무.. 였슴당..

    >

    >

    > 순서쌍 갯수 N

    >

    > 어린왕자 wrote:

    > > 다음과 같이 순서쌍이 있을때..

    > > (A,B)

    > > (D,G)

    > > (C,E)

    > > (B,C)

    > > (C,F)

    > >

    > >

    > > 이렇게 있을때

    > > A,B,C,E,F 와 D,G

    > > 로 분류하는 알고리즘..부탁해여..

    > >

    > > 위처럼 분류한건..

    > > (F1,F2)는 F1와 F2가 연결되었다는 뜻입니다. 그러므로 F1,F2는 같은 분류

    > > (A,B),(B,C) 라고 하면 A,B,C는 같은 분류입니다.

    > > (A,B),(C,D) 라고 하면 A,B 하고 C,D로 나누어지겠죠..

    > >

    > > 위와 같이 분류시키는 알고리즘 부탁합니다..대충이라도 리플 달아주세염..

    > >

    > >

    > >

    > >

  • Profile
    이명훈 2001.07.22 00:32
    집합을 사용하시면 편할 거 같은데요..



    일단 2차원 배열들에 값을 집어넣으시고..



    집합2개를 생성합니다..



    처음 두개의 값(A,B)를 하나의 집합에 넣으시고 그 다음 2개 의 값들을 각각 집합에 포



    함되는지 비교해서 두개 다 포함되지 않으면 또 다른 집합에 넣어주시고..하나라도 포함



    되면 그 집합에 넣어주시고..



    이런 식으로 하면 될 것 같은데요..^^;



    제가 이해를 바로 한건지..





    어린왕자 wrote:

    > 다음과 같이 순서쌍이 있을때..

    > (A,B)

    > (D,G)

    > (C,E)

    > (B,C)

    > (C,F)

    >

    >

    > 이렇게 있을때

    > A,B,C,E,F 와 D,G

    > 로 분류하는 알고리즘..부탁해여..

    >

    > 위처럼 분류한건..

    > (F1,F2)는 F1와 F2가 연결되었다는 뜻입니다. 그러므로 F1,F2는 같은 분류

    > (A,B),(B,C) 라고 하면 A,B,C는 같은 분류입니다.

    > (A,B),(C,D) 라고 하면 A,B 하고 C,D로 나누어지겠죠..

    >

    > 위와 같이 분류시키는 알고리즘 부탁합니다..대충이라도 리플 달아주세염..

    >

    >

    >

    >

  • Profile
    loke 2001.07.22 03:25
    제 생각에 이명훈 님 처럼 하게 되면

    (A,B) (D,G) (C,E) (B,C) (C,F)

    처음 (A,B) 를 [가]그룹이라하고 두번째 (D,G)를 [가]그룹에서 찾을수가 없으니 [나] 그룹을 만들겠죠.. 따라서 [가]->(A,B) [나]->(D,G)

    세번째 (C,E) 를 보면 [가], [나] 그룹에서 찾을 수가 없으니 ... [다] 그룹을 만들게 되죠... (B,C) 는 [가]와 [다] 그룹에서 동시에 쓰고 있으니 어디가야 할지 모르고...

    프로그램의 순차적인 실행으로만 본다면 [가]그룹에 들어가고 끝나는게 아닌지...



    따라서 이명훈 님의 의견에 잠깐 생각해 본건데요... 그룹을 생성할때 모든 그룹의 값들과 비교한 후 그룹간에도 데이터 통합이 필요할 것 같네요... 위에서 처럼 [가]와 [다]그룹에 동시에 들어갈 수 있는 데이터가 발생하면 [가]와 [다] 그룹을 하나도 합치는 거죠...

    이렇게 하지 않고도 쉽게 할 수 있을것 같은데... 지금 델파이가 인스톨 된 곳이 아니여서...



    다른 고수님들 간단한 방법좀 소개해 줘요... 저도 궁금하네요











    이명훈 wrote:

    > 집합을 사용하시면 편할 거 같은데요..

    >

    > 일단 2차원 배열들에 값을 집어넣으시고..

    >

    > 집합2개를 생성합니다..

    >

    > 처음 두개의 값(A,B)를 하나의 집합에 넣으시고 그 다음 2개 의 값들을 각각 집합에 포

    >

    > 함되는지 비교해서 두개 다 포함되지 않으면 또 다른 집합에 넣어주시고..하나라도 포함

    >

    > 되면 그 집합에 넣어주시고..

    >

    > 이런 식으로 하면 될 것 같은데요..^^;

    >

    > 제가 이해를 바로 한건지..

    >

    >

    > 어린왕자 wrote:

    > > 다음과 같이 순서쌍이 있을때..

    > > (A,B)

    > > (D,G)

    > > (C,E)

    > > (B,C)

    > > (C,F)

    > >

    > >

    > > 이렇게 있을때

    > > A,B,C,E,F 와 D,G

    > > 로 분류하는 알고리즘..부탁해여..

    > >

    > > 위처럼 분류한건..

    > > (F1,F2)는 F1와 F2가 연결되었다는 뜻입니다. 그러므로 F1,F2는 같은 분류

    > > (A,B),(B,C) 라고 하면 A,B,C는 같은 분류입니다.

    > > (A,B),(C,D) 라고 하면 A,B 하고 C,D로 나누어지겠죠..

    > >

    > > 위와 같이 분류시키는 알고리즘 부탁합니다..대충이라도 리플 달아주세염..

    > >

    > >

    > >

    > >

  • Profile
    이명훈 2001.07.22 03:31
    그렇군요.. 죄송합니다..^^; 저도 겜방이라서 그냥 생각해봐서 실수가 있었네요..



    집에가서 함 해봐야겠네요..



    loke wrote:

    > 제 생각에 이명훈 님 처럼 하게 되면

    > (A,B) (D,G) (C,E) (B,C) (C,F)

    > 처음 (A,B) 를 [가]그룹이라하고 두번째 (D,G)를 [가]그룹에서 찾을수가 없으니 [나] 그룹을 만들겠죠.. 따라서 [가]->(A,B) [나]->(D,G)

    > 세번째 (C,E) 를 보면 [가], [나] 그룹에서 찾을 수가 없으니 ... [다] 그룹을 만들게 되죠... (B,C) 는 [가]와 [다] 그룹에서 동시에 쓰고 있으니 어디가야 할지 모르고...

    > 프로그램의 순차적인 실행으로만 본다면 [가]그룹에 들어가고 끝나는게 아닌지...

    >

    > 따라서 이명훈 님의 의견에 잠깐 생각해 본건데요... 그룹을 생성할때 모든 그룹의 값들과 비교한 후 그룹간에도 데이터 통합이 필요할 것 같네요... 위에서 처럼 [가]와 [다]그룹에 동시에 들어갈 수 있는 데이터가 발생하면 [가]와 [다] 그룹을 하나도 합치는 거죠...

    > 이렇게 하지 않고도 쉽게 할 수 있을것 같은데... 지금 델파이가 인스톨 된 곳이 아니여서...

    >

    > 다른 고수님들 간단한 방법좀 소개해 줘요... 저도 궁금하네요

    >

    >

    >

    >

    >

    > 이명훈 wrote:

    > > 집합을 사용하시면 편할 거 같은데요..

    > >

    > > 일단 2차원 배열들에 값을 집어넣으시고..

    > >

    > > 집합2개를 생성합니다..

    > >

    > > 처음 두개의 값(A,B)를 하나의 집합에 넣으시고 그 다음 2개 의 값들을 각각 집합에 포

    > >

    > > 함되는지 비교해서 두개 다 포함되지 않으면 또 다른 집합에 넣어주시고..하나라도 포함

    > >

    > > 되면 그 집합에 넣어주시고..

    > >

    > > 이런 식으로 하면 될 것 같은데요..^^;

    > >

    > > 제가 이해를 바로 한건지..

    > >

    > >

    > > 어린왕자 wrote:

    > > > 다음과 같이 순서쌍이 있을때..

    > > > (A,B)

    > > > (D,G)

    > > > (C,E)

    > > > (B,C)

    > > > (C,F)

    > > >

    > > >

    > > > 이렇게 있을때

    > > > A,B,C,E,F 와 D,G

    > > > 로 분류하는 알고리즘..부탁해여..

    > > >

    > > > 위처럼 분류한건..

    > > > (F1,F2)는 F1와 F2가 연결되었다는 뜻입니다. 그러므로 F1,F2는 같은 분류

    > > > (A,B),(B,C) 라고 하면 A,B,C는 같은 분류입니다.

    > > > (A,B),(C,D) 라고 하면 A,B 하고 C,D로 나누어지겠죠..

    > > >

    > > > 위와 같이 분류시키는 알고리즘 부탁합니다..대충이라도 리플 달아주세염..

    > > >

    > > >

    > > >

    > > >