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

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

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

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]
파이썬은 수학함수가 많이 준비되어 있는 언어니까,,, 이미 있을거 같네요. (numpy에 있는것 같음)
위의 방법도 직관적입니다.
앗 위 댓글에서 '차집합'이 아니라 '여집합'인데 제가 잘못 적었네요.

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

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

게시글 목록

번호 제목
16329
16328
16327
16326
16325
16324
16323
16322
16321
16320
16319
16318
16317
16316
16315
16310
16309
16308
16305
16304
16303
16302
16301
16300
16299
16298
16297
16295
16294
16293