文字列のすべての部分列を取得しようとしています。例: -大きな文字列の部分列の検索
firstString = "ABCD"
O/Pは次のとおりです。そのために
'ABCD', 'BCD', 'ACD', 'ABD', 'ABC', 'CD', 'BD', 'BC', 'AD', 'AC', 'AB', 'D', 'C', 'B', 'A'
私は、次のコードの一部を使用しています: -
#!usr/bin/python
from __future__ import print_function
from operator import itemgetter
from subprocess import call
import math
import itertools
import operator
call(["date"])
firstArray = []
firstString = "ABCD"
firstList = list(firstString)
for L in range(0, len(firstList)+1):
for subset in itertools.combinations(firstList, L):
firstArray.append(''.join(subset))
firstArray.reverse()
print (firstArray)
call(["date"])
しかし、このコードはスケーラブルではありません。
私が提供した場合: -
firstString = "ABCDABCDABCDABCDABCDABCDABCD"
をプログラムが完了するまでに約6分の時間がかかります。
スクリプトを実行している間----------------
python sample-0012.py
Wed Feb 8 21:30:30 PST 2017
Wed Feb 8 21:30:30 PST 2017
--------------------キャプチャ
誰かが助けてくれますか?
私はあなたが現実的でなければならないと思います。文字列の長さは28文字で、長さが268435456のpowersetを返します(空のセットを含めない場合は1文字小さい)。それは目の瞬きの中で決して起こることはありません。リバースを呼び出すことは、怠惰なイテレータを使用することを妨げるので、確かに役に立たない。おそらくあなたが本当に最低のものを最初に望むのであれば、より大きな組み合わせを最初に検索するために、おそらく '組み合わせ(data、len(firstList) - r)'を使うことができます。 –