簡體   English   中英

Python代碼不斷給出超時錯誤! 迭代器與生成器?

[英]Python code keeps giving timeout error! iterators vs generators?

我想要的是生成字符串的所有可能的排列,然后檢查是否有任何排列是回文,如果是,那么我就跳出循環並分配為真,但是我面臨的問題是代碼不斷給出超時錯誤! 現在,由於我是Python新手,所以我對生成器和迭代器只有一個基本的了解,我希望有人指出如何有效使用生成器來解決此超時問題。

from itertools import permutations
string = raw_input()
for perm in permutations(string):
    if perm == perm[::-1]:
        found=True
        break
if found==True:
    print("YES")
else:
    print("NO")

生成器/迭代器不是造成此問題的原因,我假設“超時”表示它花費的時間太長(在黑客排名上)。 問題是處理即使是中等長度的字符串也可能產生的大量排列所花費的時間。 您正在查看階乘時間復雜度,因為這是給定字符串存在的排列數。

這是另一種不產生任何排列的方法。 取而代之的是,該算法僅依賴於這樣的事實,即只有當組成該字符串的每個字符的計數為偶數,或者最多有1個字符的奇數計數時,才可以為字符串形成回文。

from collections import Counter

def can_form_palindrome(s):
    return [v%2 for v in Counter(s).values()].count(1) < 2

if __name__ == '__main__':
    if can_form_palindrome(raw_input()):
        print("YES")
    else:
        print("NO")

那不是發電機的問題。 您的算法不是最佳的。 嘗試所有可能的排列不是最好的方法,以檢查給定的字符集是否可以建立回文。 您的算法的復雜度為O(N!),其增長速度快於任何指數復雜度,並且指數復雜度已經非常差。 但是,有一種算法O(N)與字符數成線性關系。

暫無
暫無

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

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