怎樣將一個24的n次方複雜度的計算優化?

設計一個演算法發現關於n的複雜度是24的n次方,有什麼辦法優化嗎?

有n個數組 A B C D ....n

A = [[1,2,3,4] (A是一個數組,裡面有24個元素)

B,C,D....n跟A一樣

現在要得到A中的元素,B,C,D....n中的元素的組合重新得到一組新的數組

裡面單元體的結構如下

[A[0],B[1],C[0],D[1].....n[x]]類似這樣的

求所有的情況

我的做法是將嵌套n個循環比如

for i in A:

for j in B:

for k in C:

..........

這樣的話複雜度就有24的n次方

不知道該怎麼優化


既然是求全部組合,組合的個數就是24^n,所以是無法優化的,如果是求第k個解,那麼有優化的空間。


笛卡爾積?itertools.product?


你遍歷所有的組合是為了什麼呢?找某種最優組合,還是計數,應該是有一些篩選條件的吧?這個可以看做狀態空間遍歷的過程,假如可以在遍歷過程中根據一些條件進行剪枝,或許是可以優化的,搜搜「分支限界法」,「回溯」,「A*演算法」等等,或許對你有啟發。但是,如果你無論如何就是要生成所有組合,那沒什麼好說的了。


可以大規模平行化,考慮一個n位24進位數,它和你的一個組合構成一一對應。

-------_-分割線-------

當然,這個特性事實上意味著,有時不必真的完成這個計算,只要在需要的時候直接使用對應的整數就可以得到相應組合的任意信息。而那些整數已經在那裡了。


新的數組就是有24^{n} 種,所以無論採用那個演算法都至少是這麼多,除非不完全生成。但如果n是變數,沒法像樓主那樣寫嵌套的for循環。

for(i=0;i&


問題描述看不懂。。。排序腫么楊


我覺得對於這個問題應該優化需求而不是演算法,因為在不考慮原始數組中包含重複元素的情況下,你想得到的數組裡面就得有2的n次方個對象,不考慮其他情況,賦值至少得O(2^n)的時間複雜度。


對數?

--------------

還是沒搞懂意思。


沒有給出這個問題的具體情況,恐怕很難有人能給出優化方法。畢竟沒有哪種優化方法是可以對任何問題都做優化的。


推薦閱讀:

Chrome 實用調試技巧

TAG:Python | 演算法 | 優化 | 演算法交易 | 代碼質量 | 時間複雜度 | 演算法設計 | 演算法複雜度 |