부분집합

1번 강좌에서 원소가 집합에 포함되었는지를 다음과 같이 표현한다고 했다

n ∈ array, n ∉ array

n ∈ array 이면 n ∉ array2 일때 array 를 array2 의 부분집합 이라 한다.
집합 array 원소가 집합 array2 에도 포함되어 있다는 것을 표현하는 것이다.

array ⊂ array2, array2 ⊃ array



상등 (array2 는 array 를 포함하고 array 는 array2 를 포함한다) 은 다음과 같이 표현한다.
array ⊂ array2 이고 array ⊃ array2 면 array = array2



② 진부분집합

array ⊂ array2 이고 array ≠ array2


③ 유한집합

array = {-2, 1, 2, 3} 와 같이 원소갯수가 유한한 집합

var array:Vector = new Vector.<Number>();
array[0] = -2;
array[1] = 1;
array[2] = 2;
array[3] = 3;


④ 무한집합

array = {n | n은 정수} 와 같이 원소갯수가 무한한 집합

var array:Vector = new Vector.<Number>();
var n:Number = - Infinity;
var count = Infinity;
while(n < count)
{
    array.push(int(n));
    n ++;
}

단, 위의 코드는 실제 실행시키면 무한루프에 빠져 플래시가 다운될 것이다. 원리만 설명하는 것이니 우를 범하지 말자



⑤ 공집합

array = {}, ∅ 원소가 하나도 없는 집합

var array:Vector.<Number> = new Vector.<Number>();
or
array.length = 0;
or
var array:Vector.<Number> = new Vector.<Number>(0, true);








위의 의미들을 이용하여 다음과 같은 클래스가 만들어졌다



package com.minarto.math
{
    public class MathSet
    {
        /**
         * 배열의 중복 원소를 제거
         */
        public static function convertMathSet(a:Array):Array
        {
            if(!a)    return    null;
           
            var mathSet:Array = [];
            var cnt:uint = a.length;
            var i:uint;
            while(i < cnt)
            {
                var n:Number = a[i];
                if(a.indexOf(n, i + 1) == - 1)    mathSet.push(n);
                i++;
            }
           
            return    mathSet;
        }       
       
       
        /**
         * 부분집합
         * a 가 b 의 부분집합인지 판단
         */
        public static function isSubSet(a:Array, b:Array):Boolean
        {
            var same:Boolean = true;
              
            var cnt:uint = a.length;
            var i:uint;
            while(i < cnt)
            {
                var n:Number = a[i];
                if(b.indexOf(n) == - 1)
                {
                    same = false;
                    break;
                }
                i++;
            }
              
            return same;
        }
       
       
        /**
         * 상등
         * 두 집합이 같은지를 판단
         */
        public static function isEqualsSet(a:Array, b:Array):Boolean    {    return    isSubSet(a, b) && isSubSet(b, a);    }
       
       
        /**
         * 진부분집합
         */
        public static function isProperSubSet(a:Array, b:Array):Boolean    {    return    isSubSet(a, b) && !isEqualsSet(a, b);    }
       
       
        /**
         * 합집합
         */
        public static function sumOfSets(a:Array, b:Array):Array    {    return    convertMathSet(a.concat(b));    }
    }
}

'ActionScript 3' 카테고리의 다른 글

4. 유한집합의 원소의 개수  (0) 2009.05.26
3. 집합의 연산  (0) 2009.05.22
2. 집합의 포함관계  (0) 2009.05.22
1. 집합의 뜻과 표시법  (1) 2009.05.20
DisplayObjectContainer.getRect(displayObject) 버그  (0) 2009.05.06
단순 실험 2 - for vs while, ++ vs +1  (0) 2009.03.02
Posted by 미나토

댓글을 달아 주세요