如何用計算機寫出時間複雜度為 O n 的演算法?

時間 2021-05-11 09:49:37

1樓:

defdet(m:

np.ndarray

)->float:n

=m.shape[0

]returnm[

0,0]

ifn==1

else

sum([(-1

)**i*

m[i,

0]*det(np

.block

([[m[:i

,1:]],[m

[(i+1

):,1:]]]))

fori

inrange(n

)])n=10

m=np.

random

.randn(n

,n)assert(np

.isclose

(det(m

),np

.linalg

.det(m)))

2樓:

逐個+1計算n!,不論啥時間複雜度都能像這樣寫:

long

long

factorial

(unsignedn)

3樓:

sleep n!秒

import

time

deffactorial(n

):returnn*

factorial(n

-1)if

n>1else

1def

algo(n

):time

.sleep

(factorial(n

))return

"pointless"

4樓:醬紫君

print("n!")

什麼, 你說這不是 O(n!) ?? 那你需要回爐重造...

乙個 的演算法

defpermutation

(_in

):if

len(

_in)==0

:return

iflen

(_in)==

1:return

[_in

]out=

fori

inrange

(len

(_in

)):m

=_in[i

]rem

=_in[:i

]+_in[i+

1:]forp

inpermutation

(rem

):out.([

m]+p

)return

outforpin

permutation

(list

('abc'

)):print(p)

5樓:

def dfs(x):

if(x==0): return

for i in range(0, x):

dfs(x-1)

顯然,時間複雜度 T(x) = x*T(x-1)

6樓:東雲研究所的貓

from

functools

import

reduce

bar=

lambdan:

reduce

(lambdax,

y:x*

y,range(1

,n+1

,1))foo

=lambdan:

reduce

(lambdax,

y:x+

y,[1

]*bar(n))

7樓:vectorwyx

最經典的 的演算法大概是求1~n的全排列了(不全部輸出)(感謝知友指正)

這個演算法可以用DFS做,也可以用STL自帶的next_permutation函式

用計算機證明數學命題可行嗎?

可行,這本身就是研發計算機的早期目標之一 把數學研究乃至演繹推理徹底自動化 Automated reasoning 直到現在也是電腦科學的乙個專門分支,雖然發展後勁遠遠跟不上前輩對它的期望就是了 本來是想從這條道路直接得到有自主思考能力的計算機 比較腦洞大開的思路是什麼呢?注意到電腦程式本身如何改進...

非計算機專業,計算機如何入門?

不懵傘 Fangxun 的推薦,親測有效。Crash Course.我是乙個不接觸計算機專業的人。現在,機械人都要發展起來了。我才不相信電子智慧型是什麼神奇魔法呢!所以,去看了Crash Course。它告訴我,是Computer Science.原來就是一堆電路。大道至簡。的確很神奇! 高讚答案已...

量子計算機出現後會不會重新定義時間複雜度和空間複雜度?

已重置 這個應該不會,因為時間空間複雜度是定義在我們對時空結構的理解上的,至少在電腦科學領域,複雜度還是定義在牛頓時空觀點上的。引入量子計算後,可能改變的是某些問題的複雜度的歸屬可能會發生改變,但是對於複雜度本身的定義應該沒有影響。當然,如果我們理解的時空結構可以被打破,比如出現時間旅行和蟲洞穿越的...