Bạn có thể sử dụng cách xuất phát từ công thức lặp lại dưới đây để tìm mã hóa của mình:
Điều này được chứng minh bằng cách xem xét có bao nhiêu phần tử khác trong phần chứa phần tử . Nếu có trong số này, thì chúng ta có cho chúng và các lựa chọn để phân vùng phần còn lại.Bn + 1= ∑k = 0n( nk) Bk.
n + 1n - k( nn - k) = ( nk)Bk
Sử dụng điều này, chúng tôi có thể đưa ra thuật toán đệ quy để chuyển đổi bất kỳ phân vùng thành một số trong phạm vi . Tôi giả sử bạn đã có cách chuyển đổi một tập hợp con có kích thước là thành một số trong phạm vi (thuật toán như vậy có thể được phát minh theo cùng một cách sử dụng tái phát của Pascal ).n + 10 , ... , Bn + 1- 1k{ 1 , ... , n }0 , ... , ( nk) -1( nk) = ( n-1k) + ( n-1k - 1)
Giả sử rằng phần chứa chứa phần tử khác. Tìm mã của họ . Tính toán phân vùng bằng cách "nén" tất cả các phần tử còn lại vào phạm vi đó. Tính toán đệ quy mã . Mã mới làn + 1kC1{ 1 , Cẩu , n - k }C2C= ∑l = 0n - k - 1( ntôi) Btôi+ C1Bn - k+ C2.
Theo hướng khác, được cung cấp mã , tìm duy nhất sao cho
và xác định
Vì , nên nó có thể được viết là , trong đó . Bây giờ mã hóa các phần tử trong phần chứa và mã hóa phân vùng củaCkΣl = 0n - k - 1( ntôi) Btôi≤ C< ∑l = 0n - k( ntôi) Btôi,
C'= C- Σl = 0n - k - 1( ntôi) Btôi.
0 ≤ C'< ( nk) Bn - kC1Bn - k+ C20 ≤ C2< Bn - kC1n + 1C2{ 1 , Cẩu , n - k }n+1, có thể được giải mã đệ quy. Để hoàn thành việc giải mã, bạn phải "giải nén" phân vùng sau để nó chứa tất cả phần tử không xuất hiện trong phần chứa .n + 1
Dưới đây là cách sử dụng cùng một kỹ thuật để mã hóa một tập hợp con có có kích thước , đệ quy. Nếu thì mã là , vì vậy giả sử . Nếu thì hãy để là mã của , dưới dạng tập hợp con có kích thước của ; mã của là . Nếu thì hãy để là mã của , dưới dạng tập con có kích thước là ; mã củaS{ 1 , ... , n }kk = 00k > 0n ∈ SC1S∖{n}k−1{1,…,n−1}SC1n∉SC1Sk{1,…,n−1}SC 1 +là .C1+(n−1k−1)
Để giải mã một mã , có hai trường hợp. Nếu thì giải mã một tập hợp con của có kích thước có mã là và xuất ra . Mặt khác, giải mã một tập hợp con của có kích thước có mã là và xuất .CC<(n−1k−1)S′{1,…,n−1}k−1CS′∪{n}S′{1,…,n−1}kC−(n−1k−1)S′