私は解決するためにリスト全体を(少なくともかなり確かめる)必要がある問題があります。問題は、そのリスト内の別の(より大きい)要素までを加算する、リスト内の連続する数字の最大数を把握することです。もし存在しなければ、リストの中で最も大きな値を候補集計とし、1を要素の最大連続数とする。リスト全体を通過する必要があるPythonコードの高速化
私の一般的なコードは機能しますが、大規模なリスト(> 500,000個の要素)ではそれほどうまく機能しません。私はちょうど私が問題に異なってアプローチする方法についてのヒントを探しています。私の現在のアプローチ:
L = [1,2,3,4,5,6,7,8,9,10]
candidate_sum = L[-1]
largest_count = 1
N = len(L)
i = 0
while i < N - 1:
s = L[i]
j = 0
while s <= (N - L[i + j + 1]):
j += 1
s += L[i+j]
if s in L and (j+1) > largest_count:
largest_count = j+1
candidate_sum = s
i+=1
この場合には、答えは次のようになり[1,2,3,4]、彼らは10まで追加し、長さが4であるように(明らかに、この例のLは、非常に単純な例です) 。
私はその後にループ条件ながら、初期を変更することで、より速くそれを作った:
while i < (N-1)/largest_count
ない偉大な仮定が、数値の分布がやや均一であるので、後半に2つの数字という基本的な考え方リストは平均してリストの最後の数よりも大きいため、失格となります。
私はちょうど探しています:
- 可能なボトルネック
問題をより正確に定義する必要があります。リストは常にソートされ単調ですか?そこにはどんなギャップもありますか?最良の解決策は、正確な問題の記述に応じて異なります。 –
@ŁukaszRogalskiリストは常にソートされています。すべての要素が一意であるため、リストは厳密に増加しています。連続する数字の間には空白があります。 – dimebucker91