본문 바로가기
CS/기타 조각글

[이산수학] 집합과 논리

by 김수효 2023. 3. 8.

* 공부한 내용을 정리하는 복습글입니다.

* 패스트캠퍼스(초격차 온라인) 강의를 기반으로 개인적으로 공부한 부분을 추가하여 작성합니다.

* 내용에 오류가 있을시 댓글로 알려주세요.

* ㅇㅋ 그럼 가보자고

 

돌아버리겠네

 

이산수학이란

이산수학(Discrete mathematics) : 이산적인(연속적이지 않은) 수학구조에 대해 연구하는 학문.

0보다 크고 10보다 작은 실수의 개수를 묻는다면 대답하기 어렵다. 실수는 연속적인 성질이 있기 때문이다.

반면에 0보다 크고 10보다 작은 정수의 개수는 바로 대답할 수 있다.

 

이산수학에서는 대체로 정수, 그래프, 논리연산등 구분되는 값을 가지는 대상을 연구한다.

 

컴퓨터공학에서도 수학은 중요하다.

추후에 배우게 되는 자료구조, 알고리즘 등도 모두 수학이 기반이 되니 잘 공부해두는 것을 추천한다.

안하면 나처럼 4학년 되어서 실전압축 전공공부를 하게된다.

 

 

위키피디아 이산수학 문서

https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%82%B0%EC%88%98%ED%95%99

 

이산수학 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 이산수학(discrete mathematics, 離散數學, 문화어: 리산수학)은 이산적인 수학 구조에 대해 연구하는 학문으로, 연속되지 않는 공간을 다룬다. 유한수학(finite mathemati

ko.wikipedia.org

 

집합

집합 : 여러 원소들(element)의 모임. 중복된 원소를 가지지 않음. 원소들 사이에 순서가 없음

표기법

- 원소나열법 A={1,2,3,4}
- 조건제시법 A={x | 0<x<100, x는 정수}

 

원소의 개수는 |A|로 표기

ex)  A={1,2,3,4}일 때, |A|=4

원소가 유한개면 유한집합, 무한개면 무한집합

 

전체 집합 : 논의 대상이 되는 원소전채를 포함하는 집합, 보통 U라고 표기
공집합 : 원소를 하나도 가지지 않는 집합 
부분집합 : A⊆B, 집합 A의 모든 원소가 집합 B에 포함될때 A는 B의 부분집합. A=B도 부분집합
진부분집합: 부분집합이지만 A=B는 아닐때

 

합집합 : A에 해당하는 원소와 B에 해당하는 원소 모두 모은 집합
교집합 : A와 B에 공통으로 속한 원소들의 집합
서로소 : 공통원소가 없는 경우를 서로소라고 부름
차집합 : A의 원소 중에서 B에 속하지 않는 원소만으로 이루어진 집합. A – B = A - (A ∩ B)
여집합 : 집합 A에 속하지 않지만 전체집합에 속하는 원소들의 집합

 

집합법칙 : 이것저것 많이 있지만 대체로 유도가 되기 때문에 중요한거 몇개만 외우기

- 교환법칙 : A ∪ B = B ∪ A ,  A ∩ B = B ∩ A

- 결합법칙 : A ∪ (B ∪ C) = (A ∪ B) ∪ C ,  A ∩ (B ∩ C) = (A ∩ B) ∩ C 

- 분배법칙 :  A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C) ,  A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C)

- 드 모르간 법칙 : ( A ∪ B ) ^c = A ^c ∩ B ^c ,  ( A ∩ B ) ^c = A ^c ∪ B ^c

 

 

명제

명제 : 객관적으로 참, 거짓을 판단 할 수 있는 문장이나 수식
보통 참인경우는 T, 거짓인 경우는 F로 표시
참, 거짓을 가리키는 값을 진릿값(Truth value)라고 한다.

 

논리

부정 ~p (not p) : 명제 p에 대하여 p의 진릿값을 반대로 갖는 명제

~

논리부분은 하교후 추가 예정...

~

 

pandas를 사용한 데이터프레임 집합연산 구현

과거 이산수학 과제로 제출하였던 구현 코드다.

파이썬을 모르는 상태로 했던거라서 좀 이상할 수 도 있다.

 

1. 합집합

# 합집합(union) 연산 
PS_union = pd.concat([P,S],ignore_index=True).drop_duplicates() 
print(PS_union.shape[0])​

2. 교집합

# 교집합(intersection) 연산
PS_inter = pd.concat([P, S], join='inner',axis=1) 
print(PS_inter.shape[0])

 

3. 차집합

# 차집합(diffrence) 연산 
PS_inter = pd.concat([P, S], join='inner') 
S_diff = pd.concat([S,PS_inter]).drop_duplicates(keep = False) 
P_diff = pd.concat([P,PS_inter]).drop_duplicates(keep = False) 
print(S_diff.shape[0], P_diff.shape[0])

 

4. 동치판별

# 동치(equivalence)판별 
intersect_commute = pd.concat([P, S], join='inner',axis=1) 
P_only = P_diff 
def isSubset(dfA, dfB): 
    AB_inter = pd.concat([dfA, dfB], join='inner',axis=1) 
    U_count = AB_inter.shape[0] 
    SA_count = dfA.shape[0] 
    SB_count = dfB.shape[0] 
    if U_count == SA_count: 
        if U_count == SB_count: 
            print(True) 
        else: 
            print(False) 
        else: 
            print(False) 


isSubset(P, intersect_commute) 
isSubset(P, P) 
isSubset(P, S) 
isSubset(P, P_only)

댓글