剖析

2011-03-21 127 views
2

你有怎样的任何想法,我可以使这个功能更加节省时间的?剖析

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 742.161 <pyshell#3>:1(c) 
     1 0.000 0.000 742.161 742.161 <string>:1(<module>) 
    4816 0.014 0.000 0.014 0.000 rpc.py:149(debug) 
     688 0.010 0.000 3.162 0.005 rpc.py:208(remotecall) 
     688 0.017 0.000 0.107 0.000 rpc.py:218(asynccall) 
     688 0.019 0.000 3.043 0.004 rpc.py:238(asyncreturn) 
     688 0.002 0.000 0.002 0.000 rpc.py:244(decoderesponse) 
     688 0.007 0.000 3.018 0.004 rpc.py:279(getresponse) 
     688 0.006 0.000 0.010 0.000 rpc.py:287(_proxify) 
     688 0.025 0.000 3.000 0.004 rpc.py:295(_getresponse) 
     688 0.002 0.000 0.002 0.000 rpc.py:317(newseq) 
     688 0.023 0.000 0.062 0.000 rpc.py:321(putmessage) 
     688 0.007 0.000 0.011 0.000 rpc.py:546(__getattr__) 
     688 0.002 0.000 0.002 0.000 rpc.py:587(__init__) 
     688 0.004 0.000 3.166 0.005 rpc.py:592(__call__) 
    1376 0.008 0.000 0.011 0.000 threading.py:1012(current_thread) 
     688 0.004 0.000 0.019 0.000 threading.py:172(Condition) 
     688 0.009 0.000 0.015 0.000 threading.py:177(__init__) 
     688 0.019 0.000 2.962 0.004 threading.py:226(wait) 
     688 0.002 0.000 0.002 0.000 threading.py:45(__init__) 
     688 0.002 0.000 0.002 0.000 threading.py:50(_note) 
     688 0.004 0.000 0.004 0.000 threading.py:88(RLock) 
     688 0.004 0.000 0.004 0.000 {built-in method allocate_lock} 
67620326 162.442 0.000 162.442 0.000 {built-in method bin} 
     688 0.007 0.000 0.007 0.000 {built-in method dumps} 
     1 0.000 0.000 742.161 742.161 {built-in method exec} 
    1376 0.003 0.000 0.003 0.000 {built-in method get_ident} 
    1376 0.004 0.000 0.004 0.000 {built-in method isinstance} 
    2064 0.005 0.000 0.005 0.000 {built-in method len} 
     688 0.002 0.000 0.002 0.000 {built-in method pack} 
     344 0.009 0.000 3.187 0.009 {built-in method print} 
     688 0.008 0.000 0.008 0.000 {built-in method select} 
     688 0.003 0.000 0.003 0.000 {method '_acquire_restore' of '_thread.RLock' objects} 
     688 0.002 0.000 0.002 0.000 {method '_is_owned' of '_thread.RLock' objects} 
     688 0.002 0.000 0.002 0.000 {method '_release_save' of '_thread.RLock' objects} 
     688 0.003 0.000 0.003 0.000 {method 'acquire' of '_thread.RLock' objects} 
    1376 2.929 0.002 2.929 0.002 {method 'acquire' of '_thread.lock' objects} 
     688 0.002 0.000 0.002 0.000 {method 'append' of 'list' objects} 
67620325 184.869 0.000 184.869 0.000 {method 'count' of 'str' objects} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
     688 0.002 0.000 0.002 0.000 {method 'get' of 'dict' objects} 
     688 0.002 0.000 0.002 0.000 {method 'release' of '_thread.RLock' objects} 
     688 0.015 0.000 0.015 0.000 {method 'send' of '_socket.socket' objects} 

我试图实现的是计算有多少数字,从0到2 ** 32在它们的二进制表示n1

+1

或许这就是兴趣:http://stackoverflow.com/questions/1851134/generate-all-binary-strings-of-length-n -with-k-bits-set – 2011-03-21 13:04:11

回答

8

你指望许多32位数字如何有1个定数。这个数字是binomial coefficient32 choose bits,并可与计算:

from math import factorial 
print factorial(32) // (factorial(bits) * factorial(32-bits)) 
+0

哦,我的!这是一块蛋糕! – Halst 2011-03-21 13:04:16

+4

一个很好的一个很好的开发者之间的区别... – David 2011-03-21 13:05:44

+3

哪里是大眼夹,当你需要他吗? “看起来你想要计算二项式系数......” – 2011-03-21 13:18:00