본문 바로가기
공부/JAVA

[자료구조] 비선형구조

by 밍미 2018. 6. 8.
자료구조(2)

자료구조(2) - 비선형구조

자료구조에는 선형구조와 비선형구조가 있다. 자료구조(1)에서 선형구조에 대해 설명했었는데, 데이터를 순차적으로 나열하는 선형구조와 달리 비선형구조는 비선형적인 계층 구조를 나타낸다.

 

트리

  • Tree

    • 그래프의 일종으로, 하나 이상의 노드(node)를 가진다. 각 노드는 엣지(edge, branch)로 연결된다.
    • degree(차수) : 부속 트리의 개수 level(레벨, 깊이) : 루트노드로부터의 깊이 (루트노드의 level = 1)
    • Parent node(부모 노드) : 노드 A가 B를 가리킬 때 A를 B의 부모 노드라고 한다. Child node(자식 노드) : 노드 A가 B를 가리킬 때 B를 A의 자식 노드라고 한다. Sibling node(형제 노드) : 부모가 같은 노드
    • Root node(뿌리 노드) : 최상위 노드로 부모 노드가 없는 노드 Leaf node(잎 노드), Terminal node(단말 노드) : 자식 노드가 없는 노드로 차수가 0이다. Internal node(내부 노드) : 잎 노드가 아닌 차수가 1 이상인 노드
    • Sub tree : 트리 안에 존재하는 부속트리
    • 한 노드는 여러 노드를 가리킬 수 있지만, 여러 노드가 한 노드를 가리킬 수는 없는 구조이다. 따라서 루트노드를 제외한 모든 노드는 단 하나의 부모노드만을 가질 수 있다.
    • 하나의 노드에서 또다른 하나의 노드로 가는 경로는 하나 뿐이어야 한다.
    • 다른 노드와 연결되지 않는 노드는 없다.

 


  • 이진트리(Binary tree)

    • 자식 노드의 수가 최대 2개인 트리이다.
  • 포화 이진트리(정이진트리, Full binary tree)

    • 모든 레벨에서 노드가 꽉 차있는 이진트리이다.
    • Leaf node를 제외한 모든 노드가 자식 노드를 2개 씩 가진다.
    • 노드수가 n개일 때, Leaf 노드의 수는 n/2를 올림한 수가 된다.
  • 완전 이진트리(Complete binary tree)

    • 모든 레벨이 꽉 찬 상태는 아니지만, 마지막 레벨을 제외한 모든 레벨의 노드가 꽉 채워진 이진트리이다.
  • 균형 이진트리(Balanced binary tree)

    • 모든 Leaf node의 깊이 차이가 1 이하인 이진트리이다.
    • 예측 가능한 깊이(predictable depth)를 가지며, 노드가 n개일 때 깊이는 log ⁡n을 내림한 값이 된다.
  • 트리 순회(Tree traversal)

    • 트리의 모든 노드를 중복없이 한 번 씩만 방문해서 순회하는 과정

    • 전위 순회(pre-order)

      • 루트 - 왼쪽 서브트리 - 오른쪽 서브트리 순으로 방문하는 방법
    • 중위 순회(in-order)

      • 왼쪽 서브트리 - 루트 - 오른쪽 서브트리 순으로 방문하는 방법
    • 후위 순회(post-order)

      • 왼쪽 서브트리 - 오른쪽 서브트리 - 루트 순으로 방문하는 방법
    • 각 순회방법의 이름은 루트노드 위치를 생각하면 편하다.

      • 루트를 '먼저' : '전'위 순회(pre-order traversal)
      • 루트를 '중간'에 : '중'위 순회(in-order traversal)
      • 루트를 '마지막'에 : '후'위 순회(post-order traversal)

 

그래프

  • Graph

    • 서로 연결된 개체들 간의 관계를 표현하는 자료구조이다. (전기회로, 도로망을 생각해보자.)

    • 트리도 그래프의 일종이기 때문에 트리에서와 같이 그래프도 node와 edge로 구성되는데, 그래프에서 node는 정점(vertex), 간선인 edge는 arc라고도 부른다.

    • G(V,E)로 표시한다.

      • G : graph
      • V : vertex
      • E : edge
    • 자기 자신을 가리키는 간선은 없다.

    • 정점 a, b를 연결하는 간선 (a,b)가 있으면, 정점 a는 정점 b에 인접(adjacent)하며, 간선 (a, b)는 a와 b에 부속(incident)된다.

  • 경로(path) : 정점 a 에서 b로 가는 경로

    • 단순 경로(simple path) : 처음과 마지막을 제외하고 정점이 모두 다른 경로로, 경로상의 정점이 중복되지 않는 경로이다.
    • 사이클(cycle) : 단순경로 중 처음과 마지막 정점이 같아 경로가 다시 원점에 도달하는 경우의 경로이다.
    • 정점 a에서 정점 b로 가는 경로가 있는 경우 a와 b는 연결되어있다(connected).
  • 차수(degree) : 간선에 의해 연결된 정점 개수

    • 진입 차수 : 외부에서 들어오는 간선의 수
    • 진출 차수 : 외부로 나가는 간선의 수
  • 무방향 그래프(undirected graph)

    • 두 버텍스를 연결하는 아크의 방향이 없는 그래프이다.
    • 양방향으로 이동이 가능하다.
  • 방향 그래프(directed graph, di-graph)

    • 방향이 있는 그래프이다.
    • 아크를 통해 한 쪽 방향으로만 이동할 수 있다.
  • 완전 그래프(complete graph)

    • 모든 버텍스가 연결된 최대 간선 수를 가지는 그래프이다.
    • 무방향그래프 : 버텍스가 n개일 때 아크 수는 n(n-1)/2
    • 방향그래프 : 버텍스가 n개일 때 아크의 수는 n(n-1)
  • 가중 그래프(weight graph) = network

    • 아크에 가중치(cost, weight)를 할당한 그래프이다.
    • 가중그래프에서 최단 경로는 모든 경로 중 가중치 합이 최소가 되는 경로이다.
  • 다중 그래프

    • 두 버텍스 사이에 두 개 이상의 아크가 존재하는 그래프이다.
  • 부분 그래프

    • 버텍스의 집합 V(G)와 엣지의 집합 E(G)의 부분집합으로 이루어진 그래프이다.
  • 그래프 탐색(Graph traversal)

    • 깊이우선탐색 DFS(Depth First Search)

      • 트리의 전위순회
      • 내려갈 수 있는 데까지 내려가다가 더 내려갈 곳이 없으면 다시 이전 위치로 나와서 다른 길로 다시 내려가는 방식이다.
    • 너비우선탐색 BFS(Breath First Search)

      • 트리의 레벨순회
      • 깊이가 1인 모든 정점을 방문하고, 그 다음으로 깊이가 2인 모든 정점을 방문하고, 그 다음으로 깊이가 3인 모든 정점을 방문하는 식으로 계속 내려가다가 마지막 레벨의 모든 정점을 방문한 후 탐색이 종료된다.

 

'공부 > JAVA' 카테고리의 다른 글

[Thread] 동기화와 교착상태  (0) 2018.06.11
[Thread] Thread  (0) 2018.06.11
[자료구조] 선형구조  (0) 2018.06.05
정규표현식(정규식, 표현식)  (0) 2018.06.05
Interface, Abstract  (0) 2018.05.31

댓글