1

我正在尝试做某事,但它超出了我的领域。为了解释,让我们设置 n=3 以简化事情,其中​​ n 是此示例中的参数总数:A、B、C。这些参数可以具有 ON 和 OFF 状态(也称为 0 或 1)。在这种情况下,这些参数的组合总数为 2^n = 8,可以可视化为:

   ABC
1: 000
2: 111
3: 100
4: 010
5: 001
6: 110
7: 011
8: 101

当然上面的列表可以按(2^n)排序!= 40320 种方式。我想要一个算法,这样我就可以在给定一个从 1 到 2^n 的数字的情况下计算我的任何参数(0 或 1)的状态。例如,如果我使用上面的表格有 3 的数量,我知道 A 的状态是 1,B 和 C 是 0。当然,你可以有一个表格/数组来查找它,给定特定的排序,但即使是相对较小的n 的值你需要有一个巨大的表。

我不熟悉这个和你可以做索引的方法,这就是我需要帮助的原因。

亲切的问候

4

2 回答 2

0

刚刚意识到你实际上可以用另一种方式看待它。您想要的是一个将 N 位加密为另一组 N 位的函数。实际上,这与格式保留加密相同。问题是,你是否关心:

  • 涵盖了所有2^n情况,或者只是足够大的数量接近2^n(您必须选择正确的加密/散列方法)
  • 你想以一种方式或两种方式来做这件事(也就是说,你有没有想问 - 我有这个数字对应于那个数字,我使用的是哪个排列)

如果两者的答案都是否定的,你可以找到一个不需要你生成整个表的 FPE 算法(有些人会这样做)。

于 2016-06-19T01:34:01.343 回答
0

我已经看到另一个问题,即使用 bitmask 查找给定集合的所有子集。您可以在您的案例中使用相同的概念。此链接包含一个很好的教程。

于 2016-06-19T01:39:13.057 回答