作者dnol (舞秋风 忆白云)
看板C_and_CPP
标题Re: [问题] 在一个给予的mask中,例举所有k-bit 组合
时间Mon Feb 5 12:23:30 2024
谢谢各位大神的建议,我现在可以用到Gosper's Hackw产生我需要的bit组合。
我现在有个更进阶的问题。
我想要根据1 bit的count来排例n bits的数字,但不用sorting。
举例,当n=3时。我希望数字排例如下。当我要读第4个数字时,我会拿到3。
1, 2, 4, "3", 5, 6, 7
[001, 010, 100, 011, 101, 110, 111]
Code 可能如下。
unsigned x = get_kth_number_by_count_of_1_bits(k /*4*/, numer_of_bits /*3*/);
我现在是用gosper hackw先产生一个look up table。
但我希望可以不用look up table,直接透过bit operation或数学运算,
在constant time,拿到我所要的数字。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.21.176.170 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1707107012.A.8E6.html
※ 编辑: dnol (211.21.176.170 台湾), 02/05/2024 12:29:34
1F:→ firejox: look up 不好吗 空间限制有这麽严格? 02/05 13:48
2F:→ dnol: 我目前是在cuda上做平均运算,所以对空间和时间比较要求 02/05 14:09
3F:→ Schottky: CUDA 有直接数几个 1 几个 0 的 function 02/05 15:49
4F:推 FRAXIS: 可以研究一下 Combinatorial number system 02/06 03:08
5F:→ dnol: 谢谢楼上的提示。 02/06 13:42
7F:→ johnjohnlin: 对小的nk来说查表还是比较快,所以要看你资料分布 02/06 16:47
8F:→ johnjohnlin: 记得leetcode有一题就是考O(1) 02/06 16:48