Введение
В математике, и в частности в комбинаторике, комбинаторная система счисления степени k (для некоторого положительного целого числа k), также называемая комбинадикой или представлением Маколея целого числа, является соответствием между натуральными числами (включая 0) N и k-комбинациями. Комбинации представляются строго убывающими последовательностями c<sub>k</sub> > c<sub>k-1</sub> > … > c<sub>2</sub> > c<sub>1</sub> ≥ 0, где каждый c<sub>i</sub> соответствует индексу выбранного элемента в заданной k-комбинации. Различные числа соответствуют различным k-комбинациям и упорядочивают их в лексикографическом порядке. Числа меньше N соответствуют всем k-комбинациям множества {0, 1, …, n − 1}. Соответствие не зависит от размера n множества, из которого берутся k-комбинации, поэтому его можно интерпретировать как отображение из N в k-комбинации, выбранные из N; в этом смысле соответствие является биекцией. Число N, соответствующее (c<sub>k</sub>, …, c<sub>2</sub>, c<sub>1</sub>), определяется следующим образом:
Тот факт, что уникальная последовательность соответствует любому неотрицательному числу N, был впервые отмечен Д. Х. Лемером. Действительно, жадный алгоритм находит k-комбинацию, соответствующую N: выбирают c<sub>k</sub> максимально возможным при условии c<sub>k</sub> < n, затем c<sub>k-1</sub> максимально возможным при условии c<sub>k-1</sub> < c<sub>k</sub>, и так далее. Нахождение числа N по формуле выше из k-комбинации (c<sub>k</sub>, …, c<sub>2</sub>, c<sub>1</sub>) также известно как «ранжирование», а обратная операция (выполняемая жадным алгоритмом) — как «деранжирование»; эти операции известны под этими названиями в большинстве систем компьютерной алгебры и в вычислительной математике. Изначально использовавшийся термин «комбинаторное представление целых чисел» был сокращен Кнутом до «комбинаторной системы счисления», который также приводит более раннюю ссылку; термин «комбинадик» был введен Джеймсом Маккаффри (без ссылки на предыдущую терминологию или работы). В отличие от факториальной системы счисления, комбинаторная система счисления степени k не является системой со смешанным основанием: часть числа N, представленная «цифрой» c<sub>i</sub>, не получается из нее простым умножением на разряд. Основное применение комбинаторной системы счисления заключается в том, что она позволяет быстро вычислять k-комбинацию, находящуюся на заданной позиции в лексикографическом порядке, без необходимости явно перечислять все k-комбинации, предшествующие ей; это позволяет, например, случайно генерировать k-комбинации заданного множества. Перечисление k-комбинаций имеет множество применений, включая тестирование программного обеспечения, выборку, контроль качества и анализ лотерейных игр.
who also gives a much older reference;
the term "combinadic" is introduced by James McCaffrey (without reference to previous terminology or work). Unlike the factorial number system, the combinatorial number system of degree k is not a mixed radix system: the part of the number N represented by a "digit" ci is not obtained from it by simply multiplying by a place value. The main application of the combinatorial number system is that it allows rapid computation of the k combination that is at a given position in the lexicographic ordering, without having to explicitly list the k combinations preceding it; this allows for instance random generation of k combinations of a given set. Enumeration of k combinations has many applications, among which are software testing, sampling, quality control, and the analysis of lottery games.
Комбинации заказов
Комбинация k множества S является подмножеством S, содержащим k (различных) элементов. Основная цель комбинаторной системы счисления — обеспечить представление каждой из всех возможных k-комбинаций множества S из n элементов одним числом. Выбирая для любого n множество {0, 1, ..., n − 1}, можно организовать представление заданной k-комбинации C таким образом, чтобы оно не зависело от значения n (хотя n, конечно, должно быть достаточно большим); другими словами, рассматривая C как подмножество большего множества при увеличении n, число, представляющее C, не изменится. Таким образом, для комбинаторной системы счисления можно просто рассматривать C как k-комбинацию множества N всех натуральных чисел, не указывая явно n. Чтобы гарантировать, что числа, представляющие k-комбинации множества {0, 1, ..., n − 1}, меньше чисел, представляющих k-комбинации, не содержащиеся в этом множестве, k-комбинации должны быть упорядочены таким образом, чтобы их наибольшие элементы сравнивались первыми. Наиболее естественным упорядочением, обладающим этим свойством, является лексикографическое упорядочение убывающей последовательности их элементов. Так, сравнивая две 5-комбинации C = {0, 3, 4, 6, 9} и C′ = {0, 1, 3, 7, 9}, можно заключить, что C предшествует C′, поскольку они имеют одинаковый наибольший элемент 9, но следующий по величине элемент 6 в C меньше следующего по величине элемента 7 в C′; последовательности, сравниваемые лексикографически, — (9, 6, 4, 3, 0) и (9, 7, 3, 1, 0). Другой способ описать это упорядочение — рассматривать комбинации как описание k установленных битов в двоичном представлении числа, так что C = {c1, ..., ck} описывает число (это связывает различные числа со всеми конечными множествами натуральных чисел); тогда сравнение k-комбинаций можно выполнить, сравнив соответствующие двоичные числа. В примере C и C′ соответствуют числам 1001011001₂ = 60110 и 1010001011₂ = 65110, что снова показывает, что C предшествует C′. Однако это число не является тем, которое нужно использовать для представления k-комбинации, поскольку многие двоичные числа имеют количество установленных битов, отличное от k; необходимо найти относительную позицию C в упорядоченном списке (только) k-комбинаций.
In order to ensure that the numbers representing the k combinations of {0, 1, , n − 1} are less than those representing k combinations not contained in {0, 1, , n − 1}, the k combinations must be ordered in such a way that their largest elements are compared first. The most natural ordering that has this property is lexicographic ordering of the decreasing sequence of their elements. So comparing the 5 combinations C = {0,3,4,6,9} and C′ = {0,1,3,7,9}, one has that C comes before C′, since they have the same largest part 9, but the next largest part 6 of C is less than the next largest part 7 of C′; the sequences compared lexicographically are (9,6,4,3,0) and (9,7,3,1,0). Another way to describe this ordering is view combinations as describing the k raised bits in the binary representation of a number, so that C = {c1, , ck} describes the number
(this associates distinct numbers to all finite sets of natural numbers); then comparison of k combinations can be done by comparing the associated binary numbers. In the example C and C′ correspond to numbers 10010110012 = 60110 and 10100010112 = 65110, which again shows that C comes before C′. This number is not however the one one wants to represent the k combination with, since many binary numbers have a number of raised bits different from k; one wants to find the relative position of C in the ordered list of (only) k combinations.
Место комбинации в заказах
Число, связанное в комбинаторной системе счисления степени k с k-комбинацией C, – это число k-комбинаций, строго меньших C в заданном порядке. Это число можно вычислить из C = {ck, …, c2, c1} при условии ck > … > c2 > c1 следующим образом. Из определения порядка следует, что для каждой k-комбинации S, строго меньшей C, существует единственный индекс i, такой что ci отсутствует в S, а ck, …, ci+1 присутствуют в S, и нет другого значения, большего чем ci. Следовательно, можно сгруппировать эти k-комбинации S по возможным значениям i от 1 до k и подсчитать каждую группу отдельно. Для заданного значения i необходимо включить ck, …, ci+1 в S, а оставшиеся i элементов S должны быть выбраны из ci неотрицательных целых чисел, строго меньших ci; при этом любой такой выбор приведет к k-комбинации S, строго меньшей C. Количество возможных выборов равно , что, следовательно, является числом комбинаций в группе i; общее число k-комбинаций, строго меньших C, равно
ck, , ci+1 in S, and the remaining i elements of S must be chosen from the ci non negative integers strictly less than ci; moreover any such choice will result in a k combinations S strictly less than C. The number of possible choices is , which is therefore the number of combinations in group i; the total number of k combinations strictly less than C then is
и это индекс (начиная с 0) k-комбинации C в упорядоченном списке k-комбинаций. Очевидно, что для каждого N ∈ N в списке существует ровно одна k-комбинация с индексом N (при условии k ≥ 1, поскольку список тогда бесконечен), поэтому вышеприведенный аргумент доказывает, что каждое N можно представить ровно одним способом как сумму k биномиальных коэффициентов заданной формы.
Найти k-комбинацию для данного числа
Данная формула позволяет сразу определить место комбинации из k элементов в лексикографическом порядке. Обратный процесс – нахождение комбинации из k элементов, занимающей заданное место N – требует несколько больше усилий, но также является достаточно простым. По определению лексикографического порядка, две комбинации из k элементов, различающиеся своим наибольшим элементом ck, упорядочиваются путем сравнения этих наибольших элементов. Отсюда следует, что все комбинации с фиксированным значением наибольшего элемента расположены последовательно в списке. Более того, наименьшая комбинация с наибольшим элементом ck имеет ci = i − 1 для всех i < k (для этой комбинации все слагаемые в выражении, кроме ck, равны нулю). Следовательно, ck – это наибольшее число, такое что если k > 1, то остальные элементы комбинации из k элементов образуют комбинацию из k − 1 элементов, соответствующую числу в комбинаторной системе счисления степени k − 1, и, таким образом, могут быть найдены, продолжая тем же способом для N и k − 1 вместо N и k.
Пример
Предположим, кто-то хочет определить 5-ю комбинацию в позиции 72. Последовательные значения для n = 4, 5, 6, … равны 0, 1, 6, 21, 56, 126, 252, …, из которых наибольшее, не превышающее 72, равно 56 при n = 8. Следовательно, c5 = 8, а оставшиеся элементы образуют 4-ю комбинацию в позиции. Последовательные значения для n = 3, 4, 5, … равны 0, 1, 5, 15, 35, …, из которых наибольшее, не превышающее 16, равно 15 при n = 6, следовательно, c4 = 6. Продолжая аналогичным образом поиск 3-й комбинации в позиции, находим c3 = 3, что использует последнюю единицу; это определяет , а оставшиеся значения ci будут максимальными при , а именно . Таким образом, мы нашли 5-ю комбинацию {8, 6, 3, 1, 0}.