아래의 되풀이 수식이 파생 된 방식을 사용하여 인코딩을 찾을 수 있습니다
이것은 요소를 포함하는 부분에 몇 개의 다른 요소가 있는지를 고려하여 증명됩니다 . 이 중 가 있으면 선택 항목과 나머지를 분할하기위한 선택 항목이 있습니다.Bn+1=∑k=0n(nk)Bk.
n+1n−k(nn−k)=(nk)Bk
이를 사용하여 의 모든 파티션을 범위의 숫자 로 변환하는 재귀 알고리즘을 제공 할 수 있습니다 . I 이미 크기의 서브 세트로 변환하는 방법이 생각 의를 범위의 숫자 (이러한 알고리즘 Pascal의 재발 사용하여 같은 방식으로 고안 할 수 있습니다 .n+10,…,Bn+1−1k{1,…,n}0,…,(nk)−1(nk)=(n−1k)+(n−1k−1)
포함 하는 부분 에 다른 요소 가 있다고 가정하십시오 . 코드 찾으십시오 . 나머지 모든 요소를 해당 범위로 "압축"하여 의 파티션을 계산하십시오 . 재귀 적으로 코드 계산하십시오 . 새 코드는n+1kC1{1,…,n−k}C2C=∑l=0n−k−1(nl)Bl+C1Bn−k+C2.
코드 주어진 다른 방향에서 , 고유 찾을 되도록
및 정의
이후 ,이 같이 쓸 수있다 , 여기서 . 이제 은 포함하는 부분의 요소를 코딩 하고 는 의 파티션을 코딩합니다.Ck∑l=0n−k−1(nl)Bl≤C<∑l=0n−k(nl)Bl,
C′=C−∑l=0n−k−1(nl)Bl.
0≤C′<(nk)Bn−kC1Bn−k+C20≤C2<Bn−kC1n+1C2{1,…,n−k}재귀 적으로 디코딩 할 수 있습니다. 디코딩을 완료하려면 후자 파티션을 "압축 해제"하여 포함하는 부분에 나타나지 않는 모든 요소를 포함해야합니다 .n+1
다음은 동일한 기술을 사용하여 크기 의 하위 집합 를 재귀 적 으로 인코딩하는 방법 입니다. 경우 다음 코드는 이므로 가정하자 . 경우 다음하자 규범 수 크기의 서브셋으로, 의 ; 의 코드 는 입니다. 만약 , 을 크기 의 서브 세트로서 로하여 을 의 코드 라 하자 . 의 코드S{1,…,n}kk=00k>0n∈SC1S∖{n}k−1{1,…,n−1}SC1n∉SC1Sk{1,…,n−1}S인 .C1+(n−1k−1)
코드 를 디코딩하기 위해 두 가지 경우가 있습니다. 경우 그런 다음 디코딩 서브 세트 의 크기의 , 그 코드 및 출력 . 그렇지 않은 경우, 디코딩 서브 세트 의 크기의 코드 , 출력 .CC<(n−1k−1)S′{1,…,n−1}k−1CS′∪{n}S′{1,…,n−1}kC−(n−1k−1)S′