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

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

· 5년 전 · 3497 · 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년 전
감사합니다~

게시글 목록

번호 제목
16619
16618
16612
16603
16598
16589
16578
16571
16563
16554
16546
16534
16527
16520
16513
16510
16505
16498
16490
16486
16482
16465
16458
16456
16448
16447
16440
16439
16438
16430