이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

6. 집합 ADT

  • 2020.05.09 15:01
  • 학부 수업/자료구조
반응형

집합

집합 ADT는 유일한 개체들을 갖는다. (중복 X)
집합 ADT 관련 작업들의 효율적인 구현을 위해, 집합을 집합 원소들의 정렬된 리스트로 표현한다.

집합의 주요 함수들은 아래와 같다.

set union(B); // 집합 B와의 합집합
set intersect(B); // 집합 B와의 교집합
set subtract(B); // 집합 B를 차감한 차집합

집합 A와 B에 관한 주요 작업의 실행시간은 최대 O(|A| + |B|)시간이 되어야 한다.

위 함수 이외에도 집합 ADT는 아래 함수를 갖는다.

// 일반 함수
int size();
bool isEmpty();
iter elements();
//질의 함수
bool member(e);
bool subset(B);
//갱신 함수
addElem(e);
removeElem(e);
//예외
emtySetException();

집합 응용

  • 직접 응용
    • 키워드 검색
    • 집합론에 대한 계산
  • 간접 응용
    • 알고리즘을 위한 보조 데이터 구조
    • 다른 데이터 구조를 구성하는 요소

집합을 연결리스트에 저장

  • 집합을 연결리스트로 구현 가능
    • 각 노드가 하나의 집합원소 표현
    • 헤더 및 트레일러 이중연결리스트가 권장됨
  • 원소들은 일정 순서에 의해 정렬되어 저장
  • 기억장소 사용: O(n)
  • 배열을 이용할 수도 있다!

집합 함수

  • 주의사항: 이후 나올 집합 함수는 파괴적임.
    • 집합 A와 B를 보존하지 않음
  • 성능은 최소 O(|A| + |B|) 보장되며, addLast 작업의 경우 O(1) 시간에 수행

합집합union

def union(A,B)
    C = set()
    while (!A.isEmpty() and !B.isEmpty()):
        a,b = A.get(1), B.get(1)
        if a<b:
            C.addLast(a)
            A.removeFirst()
        elif a>b:
            C.addLast(b)
            B.removeFirst()
        else: # a==b
            C.addLast(a)
            A.removeFirst()
            B.removeFirst()

    while !A.isEmpty():
        a=A.get(1)
        C.addLast(a)
        A.removeFirst()
    while !B.isEmpty():
        b=B.get(1)
        C.addLast(b)
        B.removeFirst()
    return C

교집합intersect

def intersect(A, B):
    C = set()
    while (!A.isEmpty() and !B.isEmpty()):
        a, b = A.get(1), B.get(1)
        if  a<b:
            A.removeFirst()
        elif a>b:
            B.removeFirst()
        else: # a==b
            C.addLast(a)
            A.removeFirst()
            B.removeFirst()
    while !A.isEmpty():
        A.removeFirst()
    while !B.isEmpty():
        B.removeFirst()
    return C

차집합subtract

def subtract(A, B):
    C = set()
    while (!A.isEmpty() and !B.isEmpty()):
        a, b = A.get(1), B.get(1)
        if  a<b:
            C.addList(a)
            A.removeFirst()
        elif a>b:
            B.removeFirst()
        else: # a==b
            A.removeFirst()
            B.removeFirst()
    while !A.isEmpty():
        a = A.get(1)
        C.addLast(a)
        A.removeFirst()
    while !B.isEmpty():
        B.removeFirst()
    return C

소속과 부분집합

def member(e):
    if(A.isEmpty()):
        return False
    p = A
    while True:
        a = p.elem
        if a<e:
            if p.next == null:
                return False
            else:
                p = p.next
        elif a>e:
            return False
        else: # a==e
            return True
def subset(A, B):
    if A.isEmpty():
        return True
    p = A
    while True:
        if B.member(p.elem):
            if (p.next == null: # p is last node
                return True
            else:
                p = p .next
        else:
            return False

subset()의 실행시간은 O(|A||B|) 이다.

반응형

'학부 수업 > 자료구조' 카테고리의 다른 글

8. 큐, 디큐 ADT (Queue, Dequeue)  (0) 2020.05.29
7. 스택 ADT  (0) 2020.05.14
5. 리스트의 그룹과 공유  (0) 2020.04.23
4. 리스트와 추상자료형 (Abstract Data Type)  (0) 2020.04.17
3. 기초 데이터구조 - 배열, 연결 리스트  (0) 2020.04.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 8. 큐, 디큐 ADT (Queue, Dequeue)

    8. 큐, 디큐 ADT (Queue, Dequeue)

    2020.05.29
  • 7. 스택 ADT

    7. 스택 ADT

    2020.05.14
  • 5. 리스트의 그룹과 공유

    5. 리스트의 그룹과 공유

    2020.04.23
  • 4. 리스트와 추상자료형 (Abstract Data Type)

    4. 리스트와 추상자료형 (Abstract Data Type)

    2020.04.17
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바