相关疑难解决方法(0)

创建具有特定位数的多个数字

问题

我需要创建32位数字(有符号或无符号无关紧要,最高位永远不会被设置),每个数字必须设置给定的位数.

天真的解决方案

最简单的解决方案当然是从零开始.在循环内,数字现在增加1,计数位数,如果计数具有所需值,则数字存储到列表中,否则循环重复.如果找到足够的数字,则停止循环.当然这很好用,但是一旦所需位数变得非常高,它就会非常慢.

更好的解决方案

具有(比方说)5位的最简单的数字是设置前5位的数字.这个号码可以很容易地创建.在循环内,第一个位置位,数字向左移一个.这个循环运行5次,我找到第一个设置了5位的数字.接下来的几个数字也很容易创建.我们现在假装数字为6位宽,最高位数未设置.现在我们开始将第一个零位向右移动,因此我们得到101111,110111,111011,111101,1111110.我们可以通过在前面添加另一个0并重复此过程来重复此操作.0111110,1011110,1101110等.然而,这种方式的数字增长速度将超过必要的速度,因为使用这种简单的方法,我们省略了数字,如1010111.

那么有没有更好的方法来创建所有可能的排列,一种可以使用的通用方法,无论下一个数字将包含多少位,无论我们需要设置多少个位?

algorithm binary combinations permutation

18
推荐指数
2
解决办法
5564
查看次数

按位移位以在C中生成所有可能的排列

可能重复:
创建具有特定位数的多个数字

我正在尝试编写一些代码,通过将位移位来将每个可能的数字组合放在一个数组中.

例如,我想找到数组应该包含的3位(最大数字可以是6)的所有可能组合:

000111
001011
001101
001110
010011
010101
010110
011001
011010
011100
100011

等等...

根据我的解释,当最后一个位置为1时,我们将数字移1(x >> 1)并在开始时加1.但是,我不确定如何编写其余的代码.我用C来写这个.

另外 - 据我所知,这是一个colex序列,但是,如果有另一个序列可以给我相同的最终结果(具有约束为N的k位的所有可能组合的数组),我都是耳朵. .

c algorithm combinations bit-manipulation permutation

12
推荐指数
1
解决办法
7280
查看次数

在python中生成唯一的二进制排列

请问,我怎样才能获得所有这些二进制排列,但在Python中没有重复?

 a = list(itertools.permutations([1, 1, 0, 0]))
 for i in range(len(a)):
     print a[i]

    (1, 1, 0, 0)
    (1, 1, 0, 0)
    (1, 0, 1, 0)
    ...
Run Code Online (Sandbox Code Playgroud)

如果它大致有效将会很棒,因为我必须使用这样的30个元素列表.

python python-3.x

12
推荐指数
1
解决办法
987
查看次数

如何在python中获取长度为n的所有组合

我想知道是否有任何方法可以n从数字列表中获取所有长度组合.

例如,如果我的列表是[1, 2, 3, 4],我想输出(如果我选择n = 3)

[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

像[2,1,3]这样的其他排列对我没用.

python combinations

11
推荐指数
2
解决办法
8344
查看次数

以随机顺序迭代具有相同数量的1(或0)的二进制数

我需要以随机顺序生成具有相同数量的1(或0)的二进制数.
有谁知道固定长度二进制数的任何有效算法?2个1位和4位数的示例(只是为了更清楚):

1100
1010
1001
0110
0101
0011
Run Code Online (Sandbox Code Playgroud)

更新无 重复的随机顺序非常重要.需要二进制数的序列,而不是单个排列.

algorithm math

4
推荐指数
1
解决办法
1030
查看次数

分析python函数

您是否知道如何使此功能更加节省时间?

def c(n):
    word = 32
    #l = []
    c = 0
    for i in range(0, 2**word):
        #print(str(bin(i)))#.count('1')
        if str(bin(i)).count('1') == n:
            c = c + 1 
            print(c)

        if i == 2**28:
            print('6 %')
        if i == 2**29:
            print('12 %')
        if i == 2**30:
            print('25 %')
        if i == 2**31:
            print('50 %')
        if i == 2**32:
            print('100 %')
    return c



135274023 function calls in 742.161 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1  391.662  391.662  742.161 …
Run Code Online (Sandbox Code Playgroud)

python profiling python-3.x

2
推荐指数
1
解决办法
377
查看次数