条件がarr[high] - arr[low] < delta
のアレイで、最大のサブアレイ10個(最大長)を見つける必要があります。今は50秒かかる(Pythonを使って)。 sum < somevalue
で最大サブアレイを見つけるアルゴリズムを変更することで、最大サブアレイを見つけることができます。今のところ、私はforループを使用しており、すべての繰り返しの後に見つかった最大サブアレイを削除しています。私はたくさんのことを試しましたが、何も正しく機能しなかったので、これに戻ります。配列がソートされます。どのように効率よく10個のサブアレイを見つけることができますか?
with open(in_file) as f_in, open(out_file, 'w') as f_out:
dct = {}
mainlst = []
# Read a file and store values in mainlst and map to some strings using dct
for i in range(10):
start = 0
end = 0
maxim = 0
diff = 0
current = 1
max_start = 0
max_end = 0
while end < len(mainlst)-1:
end += 1
diff = mainlst[end] - mainlst[start]
current += 1
while diff > delta:
start += 1
diff = mainlst[end] - mainlst[start]
current -= 1
if maxim < current:
maxim = current
max_start = start
max_end = end
print("".join([dct[mainlst[max_start]], ",", str(maxim)]), file=f_out)
del mainlst[max_start:max_end+1]
編集:別の条件について言及していませんでした。サブアレイは重複することはできません。
あなたは配列の配列を持っていて、最長の配列を10個見つけたいと思っていますか? – Ali
いいえ私は1つの配列を持ち、最も長いサブ配列を見つける必要があります。 –
入力のサイズは50秒かかりますか? – m69