2. 집합의 포함관계
ActionScript 3 2009. 5. 22. 11:40 |① 부분집합
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[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 ++;
}
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);
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)); }
}
}
{
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 |
1. 집합의 뜻과 표시법 (1) | 2009.05.20 |
DisplayObjectContainer.getRect(displayObject) 버그 (0) | 2009.05.06 |
단순 실험 2 - for vs while, ++ vs +1 (0) | 2009.03.02 |