数が増えていると仮定し、シーケンス内で最長の算術進行の長さを求めたいとします。最長の算術進行とは、[2,4,6,8]または[3,6,9,12]のような共通の差異を持つ増加するシーケンスを意味します。シーケンス内で最長の算術進行を見つける
たとえば、の場合は[5, 10, 14, 15, 17]
、[5, 10, 15]
の場合は長さ3です。
[10, 12, 13, 20, 22, 23, 30]
の場合、[10, 20, 30]
は長さ3の最長算術進行です。 [7, 10, 12, 13, 15, 20, 21]
、[10, 15, 20]
または[7, 10, 13]
ため
は長さ3
このサイト https://prismoskills.appspot.com/lessons/Dynamic_Programming/Chapter_22_-_Longest_arithmetic_progression.jsp で最も長い等差数列あるJの周りにループすることによって、すなわち、問題にいくつかの洞察力を提供していますし、 すべての3つの要素を考慮してください。私はPythonで、このアルゴリズムを使用すると、以下のように私のコードは次のとおりです。
def length_of_AP(L):
n = len(L)
Table = [[0 for _ in range(n)] for _ in range(n)]
length_of_AP = 2
# initialise the last column of the table as all i and (n-1) pairs have lenth 2
for i in range(n):
Table[i][n-1] =2
# loop around the list and i, k such that L[i] + L[k] = 2 * L[j]
for j in range(n - 2, 0, -1):
i = j - 1
k = j + 1
while i >= 0 and k < n:
difference = (L[i] + L[k]) - 2 * L[j]
if difference < 0:
k = k + 1
else:
if difference > 0:
i = i - 1
else:
Table[i][j] = Table[j][k] + 1
length_of_AP = max(length_of_AP, Table[i][j])
k = k + 1
i = i - 1
return length_of_AP
この機能は、[1、3、4、5、7、8、9]で正常に動作しますが、それは動作しません。 [5,10,14,15,20,25,26,27,28,30,31]の場合、6を得るはずですが、4が得られます。その理由は、25,26,27、リストの中の28は、私の機能のための気をそらす要因かもしれません。どのようにして私の機能を変更して、私に望みの結果を与えるのか。
ご協力いただけると助かります。
は、算術進行を定義します。私はあなたが望むと思う[5、10、15]またあなたのコードと期待される出力を示すので、私たちはそれを手伝うことができます。 –
[Google](https://www.google.com/search?q=longest+arithmetic+progression)を試しましたか?効率的なアルゴリズムがすぐに登場する。 – user2357112