我寫的代碼似乎看起來很糟糕,用漸近測量運行時間和空間 我得到 T(N)= T(N-1)* N + O ((N-1!)* N)其中N是輸入的大小。我需要建議去優化它置換一個字符串打印所有可能的字
因爲它是我們要實現最有效的方式在邏輯所需的基於算法的面試問題,而無需使用任何庫
這裏是我的代碼
def str_permutations(str_input,i):
if len(str_input) == 1:
return [str_input]
comb_list = []
while i < len(str_input):
key = str_input[i]
if i+1 != len(str_input):
remaining_str = "".join((str_input[0:i],str_input[i+1:]))
else:
remaining_str = str_input[0:i]
all_combinations = str_permutations(remaining_str,0)
for index,value in enumerate(all_combinations):
all_combinations[index] = "".join((key,value))
comb_list.extend(all_combinations)
i = i+1
return comb_list
你能解決復發關係嗎?我忘了怎麼做。另外,當你說「排列......打印所有......組合」時,我假設你實際上並不是指組合(因爲只有n個組合的n個組合),而是指所有排列組合?鑑於有n!一個字符串在n個不同的(!)字母上的排列,在一般情況下(時間和空間)都不會低於指數複雜度;但是在實際創建排列之前,您可以爲每個字符計算出現的次數。 –
說k_i是字符串中字母i的出現次數;事先對外觀進行計數(使用直方圖的線性時間和空間),您將爲「字符串中的所有字符i」保存「product over k_i!」因子(注意階乘)。 –
@ G.Bach謝謝你的回覆,我想這很難再解決,但我同意你的觀點,因爲這個問題需要所有的排列組合,它不能小於n!並且對於正在運行的程序肯定會有更多的複雜性,但是我的程序的運行時間看起來很糟糕,我猜 – Sandy