我有一个进程返回给定长度N
的位串并给出popcount k
,即每个位串都有k
个和N - k
个零。
我需要计算返回每个位字符串的频率。目前,我使用关联的base2-integer来增加2^N
维数组中的计数器。但是,对于大型N
,这变得不切实际,因为数组太大。为了做得更好,我想利用事先知道popcount k
的事实,所以我只需要一个维度M = N choose k
数组来存储计数。为此,我需要一个过程来将给定的位串转换为唯一的整数,例如对于示例N=3
,k=2
,以下映射就足够了:
011 → 1
110 → 2
101 → 3
请注意,我不需要反向映射,尽管它应该存在。什么可能是这样的映射?这(与之相关)是一个已知问题吗?
答案 0 :(得分:2)
正如SaiBot建议的那样,您可以使用哈希集将唯一的位串映射到值。否则,你可以查找"排名排列"作为对(n,k)0和1的所有排列进行编号的方法。