Подсчет комбинаций двоичных битовых комбинаций - PullRequest
2 голосов
/ 06 августа 2009

Я ищу алгоритм, который будет подсчитывать количество двоичных битовых комбинаций в слове n-bit, которое равно или меньше произвольного предела, который меньше 2^n.Далее, я хочу сгенерировать счет для всех 1-bit комбинаций, 2-bit комбинаций и т. Д. Очевидно, что если бы предел был 2^n, было бы 2^n комбинаций (C(n,1) 1-bit combinations plus C(n,2) 2-bit plus C(n,3) 3-bit and so on).Однако, если был наложен предел, не каждая из этих возможных комбинаций была бы действительной (меньше наложенного лимита).

Например, скажем n=4.Существует 16 возможных битовых комбинаций, 15 из которых содержат 1 или более 1-bits.Если было введено ограничение в 10, эти шаблоны больше 10 не будут включены в счет.Таким образом, для однобитовых комбинаций допустимыми будут 0001, 0010, 0100 и 1000.Двухбитные структуры будут 0011, 0101, 0110, 1001.Шаблоны 1010 и 1100 не будут учитываться, поскольку они превышают 10. Единственный 3-битный бит будет 0111, тогда как единственный 4-битный шаблон 1111 превышает предел.

Если F является моей функцией подсчета, F(4,10,1) вернет 4, число 4-bit шаблонов 1 бита, которые меньше 10. F(4,10,2) вернет 4, где C(4,2) равно 6. Поскольку фактическоезначение n может быть большим (40 или бит), перечислять возможные шаблоны, тестировать их по пределу и считать действительные нецелесообразно.

Есть идеи относительно того, как это можно сделать эффективно?

Ответы [ 3 ]

2 голосов
/ 06 августа 2009

, так как это помечено как домашнее задание, почему бы вам не предложить свои идеи, и мы можем дать вам совет. Вы могли бы всегда разрабатывать неэффективный алгоритм и анализировать его, чтобы попытаться повысить эффективность ...

0 голосов
/ 10 ноября 2009

Просто подсказка, но попытайтесь атаковать это индуктивно / рекурсивно (какой бы ни прозвище вы ни выбрали); уменьшите проблему до более мелких экземпляров.

0 голосов
/ 06 августа 2009

Разбейте диапазон ниже предела на области размером 2 ^ m с фиксированным префиксом и примите во внимание биты, установленные в префиксе.

...