본문 바로가기
알고리즘

멱집합

by 근즈리얼 2021. 5. 5.
728x90

멱집합 : 주어진 집합의 모든 부분 집합들로 구성된 집합

 

data = {a,b,c,d} => 원소의 개수 : 2^4 = 16

ex) a,b,c,d,ab,ac....

 

*{a,b,c,d,e,f}의 모든 부분집합을 나열하려면

- a를 제외한 {b,c,d,e,f}의 모든 부분집합들을 나열하고

- {a,b,c,d,e,f}의 모든 부분집합에 {a}를 추가한 집합들을 나열한다.

 

=> {b,c,d,e,f}의 모든 부분집합에 {a}를 추가한 집합들을 나열하려면

- {c,d,e,f}의 모든 부분집합들에 {a}를 추가한 집합들을 나열하고

- {c,d,e,f}의 모든 부분집합들에 {a,b}를 추가한 집합들을 나열한다.

 

수도코드

- 처음에 p는 공집합, s는 전체 집합

- s가 공집합이 되면 끝난다

- s의 원소들을 하나씩 꺼내서 한번은 원소가 하나 줄어든 집합의 원소들로만 멱집합을 구하고

또 한번은 제외된 원소를 멱집합에 추가한 집합들을 구한다.

 

 

* ex) p집합에 a~f중 포함이 될 수도 있고 안될 수도 있음

- 이런 경우를 위해 include boolean배열을 만들어준다 -> true면 집합에 포함된거고 false면 포함 x

 

자바 코드

- 원래 집합과 boolean집합은 전역변수로 선언하고

- 지금 무슨 원소를 가리키는지를 나타내는 k만 매개변수로 넘겨준다.

- 함수 내에서 처음에는 포함하지 않은 채로 powerSet을 호출하고 다음에 포함한채로 powerSet을 호출한다.

 

이런 방법을 상태공간트리로 생각할 수 있음

728x90

'알고리즘' 카테고리의 다른 글

[cs 스터디] 운영체제 후기  (0) 2024.02.15
레드블랙트리  (0) 2021.05.12
순환의 응용 : n queens problem  (0) 2021.05.05
순환의 응용 - 미로찾기  (0) 2021.05.05
[백준 1654] 랜선 자르기 [java]  (0) 2021.05.04

댓글