2016-09-12 6 views
1

誰かが、プログラムを超えた空間の複雑さとは何かを説明できますか?それはなぜですか?リスト作成のスペースの複雑さ

def is_pal_per(str): 

s = [i for i in str] 
nums = [0] * 129 

for i in s: 
    nums[ord(i)] += 1 

count = 0 

for i in nums: 
    if i != 0 and i/2 == 0: 
     count += 1 

print count 

if count > 1: 
    return False 
else: 
    return True 

実際、私はこのコード行に興味があります。それは上記のプログラムの空間の複雑さにどのように影響しますか?

s = [i for i in str] 
nums = [0] * 129 

最初は二が一定である、len(str)で直線的に増大する:

s = [i for i in str] 

nums = [0] * 129

+0

は、文字列(文字数)と同じサイズです。大きな弦の場合、それはnumより大きく、小さな弦の場合は小さくなります。まさにその質問は何ですか? – sascha

答えて

0

どこに問題があるのか​​不明です。 sは、単にstrの個々の文字のリストです。スペースの消費量はlen(s)です。

NUMSO(N)用語によって支配、一定の大きさです。

このコードはあなたが書いたものですか、これはあなたに渡されていますか?プログラミングスタイルは、ではなく、 "Pythonic"です。


あなたのコードについては、この崩壊を開始します。 =>ヴァル

count = 0 

for char in str: 
    val = ord[char] + 1 
    if abs(val) == 1: 
     count += 1 

print count 

return count == 0 

まず、私はあなたの単一文字の変数(S =>文字を置き換えます)。それから、中間ステップののほとんどをに切り捨て、コードを読むのに役立ちます。最後に、元の複雑なステートメントではなく、簡単なブール値を使用して戻りました。

私はではありませんでした。は、Pythonのカウント方法を使用します。これは、関数をさらに短縮します。ちなみに、にはがあります。ユニティ値の数を表示するか、ブール値のリターンが必要ですか?単なる戻り値の場合は、これをさらに短くすることができます。

+0

私はエントリレベルのpythonスキルを持っています。だからこそ、コードスタイルはPythonプログラマーのための神ではありません。上のコードでPythonicでないものを教えてください。 2番目のコード行はどうですか?私はどこに 'nums'リストを配置しましたか? –

+1

「Pythonic」のテーマについて - http://stackoverflow.com/questions/25011078/what-does-pythonic-mean – Nick

0

あなたはメモリを割り当てるだけの2行を発見しました。したがって、関数の空間複雑度はO(N)、N =長さはstrです。

関連する問題