簡體   English   中英

Python3中用於計算pow(a,b)的內置函數的復雜性

[英]Complexity of inbuilt function used in Python3 to compute pow(a,b)

使用迭代的函數以及n為偶數時n =(axa) n / 2和n為奇數時[[axa) (n-1)/ 2 ] xa的事實是否會比python中的內置函數產生更好的結果3。

不,您將無法執行Python內置操作。 原因很簡單,就CPython而言,那些內置操作運行C代碼。 您不會通過編寫Python代碼來擊敗C代碼。

如果我們專門考慮您的情況,您的解決方案將需要實例化多個整數或浮點對象,進行比較,相乘, 所有這些工作都在Python中完成 這是內置的運算符無法執行的操作,因為Python的一條指令以C語言計算冪,並且僅實例化一個對象,這就是您想要的值。

我們可以通過使用dis來查看python字節碼來看到。

>>> import dis    
>>> dis.dis('a**b')
1         0 LOAD_NAME                0 (a)
          2 LOAD_NAME                1 (b)
          4 BINARY_POWER
          6 RETURN_VALUE

>>> dis.dis("""
r = 1
while b > 1:
    if b % 2:
        b = (b - 1) / 2
        a *= a
        r *= a
    else:
        b /= 2
        a *= a
r *= a""")

2         0 LOAD_CONST               0 (1)
          2 STORE_NAME               0 (r)

3         4 SETUP_LOOP              66 (to 72)
          6 LOAD_NAME                1 (b)
          8 LOAD_CONST               0 (1)
         10 COMPARE_OP               4 (>)
         12 POP_JUMP_IF_FALSE       70

4        14 LOAD_NAME                1 (b)
         16 LOAD_CONST               1 (2)
         18 BINARY_MODULO
         20 POP_JUMP_IF_FALSE       52

5        22 LOAD_NAME                1 (b)
         24 LOAD_CONST               0 (1)
         26 BINARY_SUBTRACT
         28 LOAD_CONST               1 (2)
         30 BINARY_TRUE_DIVIDE
         32 STORE_NAME               1 (b)

6        34 LOAD_NAME                2 (a)
         36 LOAD_NAME                2 (a)
         38 INPLACE_MULTIPLY
         40 STORE_NAME               2 (a)

7          42 LOAD_NAME                0 (r)
         44 LOAD_NAME                2 (a)
         46 INPLACE_MULTIPLY
         48 STORE_NAME               0 (r)
         50 JUMP_ABSOLUTE            6

9        52 LOAD_NAME                1 (b)
         54 LOAD_CONST               1 (2)
         56 INPLACE_TRUE_DIVIDE
         58 STORE_NAME               1 (b)

10       60 LOAD_NAME                2 (a)
         62 LOAD_NAME                2 (a)
         64 INPLACE_MULTIPLY
         66 STORE_NAME               2 (a)
         68 JUMP_ABSOLUTE            6
         70 POP_BLOCK

 11      72 LOAD_NAME                0 (r)
         74 LOAD_NAME                2 (a)
         76 INPLACE_MULTIPLY
         78 STORE_NAME               0 (r)
         80 LOAD_CONST               2 (None)
         82 RETURN_VALUE

我會讓你猜猜內置的效率有多高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM