테스트 사이트 - 개발 중인 베타 버전입니다

PHP로 합집합, 교집합, 여집합 구하기

· 5년 전 · 3498 · 5

집합처리는 데이타 처리시 빈번히 알고리즘 중에 하나입니다.

QnA에 답변한 내용이 아까워서 공유합니다.

 

만약 $a = "1,2,3"이있고

$b = "2,3,4" 가 있다면

 

2와 3을 제거하고 1,4만 남게 하려면 어떻게 해야할까요?

 

배열 $a, $b 의 여집합을 구하는 문제입니다. 

php함수중에

array_diff 는 차집합

array_intersect 는 교집합 입니다.

php에 여집합 함수는 없습니다.  집합 연산을 통해서 구할수 있습니다.

A, B의 여집합은 (A - B) + (B - A) 입니다.(아마도 맞을겁니다.)

 

[code]

$arr_a = explode(",", $a);
$arr_b = explode(",", $c);
 
//여집합 
$arr_c = array_merge(
            array_diff($arr_a, $arr_b),         // 1
            array_diff($arr_b, $arr_a)          //4
        );                              
 //  $arr_c = 1  4
 
echo implode(",", $arr_c);
//result = 1,4
 
//교집합은
$arr_d = array_intersect($arr_a, $arr_b);  //2, 3
 
//합집합은
$arr_e = array_merge(
            array_intersect($arr_a, $arr_b),   //2, 3
            array_diff($arr_a, $arr_b),         // 1
            array_diff($arr_b, $arr_a)          //4
        );   //2, 3, 1, 4 

[/code]  

 

 

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 5개

명랑폐인 님 덕분에 항상 많이 배우고 있네요~
파이썬으로 한 번 작성해보았습니다 ^^

[http://sir.kr/data/editor/2001/aada0c6ce4d6abd313e6f910e9fb5a67_1578834950_7192.png]
5년 전
파이썬은 수학함수가 많이 준비되어 있는 언어니까,,, 이미 있을거 같네요. (numpy에 있는것 같음)
위의 방법도 직관적입니다.
앗 위 댓글에서 '차집합'이 아니라 '여집합'인데 제가 잘못 적었네요.

파이썬에 수학이나 문자열 조작과 관련된 함수 또는 메서드가 많은 것 같아요~
set 자료형에 대해서 교집합을 위한 .intersection() 메서드, 합집합을 위한 .union() 메서드, 차집합을 위한 .difference() 메서드가 존재합니다.
말씀하신 numpy는 제가 사용빈도가 낮아서 관련된 함수로서 어떤 것이 있는지 잘 모르겠네요 ㅠㅠ

그럼 편안한 밤 되시고 안녕히 주무세요!
명량폐인님의 자료나 팁은 매우 신박함. 암튼 대단하십니다. 좋은 팁 감사드립니다. ^^
5년 전
감사합니다~

게시글 목록

번호 제목
17657
17655
17654
17653
17652
17651
17650
17642
17633
17632
17631
17630
17628
17624
17623
17620
17618
17617
17614
17612
17611
17610
17609
17608
17607
17604
17603
17602
17600
17594