Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最長のフィボナッチサブシーケンスの長さを見つけるプログラム


X_1、X_2、...のような1つのシーケンスがあるとすると、-

の場合、X_nはフィボナッチのようになります。
  • n> =3

  • X_i + X_i +1=すべてのi+2に対してX_i+2 <=n

ここで、シーケンスを形成する厳密に増加する配列Aを想定し、Aの最長のフィボナッチのようなサブシーケンスの長さを見つける必要があります。そのようなシーケンスがない場合は、0を返します。

したがって、入力がA =[1,2,3,4,5,6,7,8]のようである場合、次のシーケンス[1,2,3,5,8]があるため、出力は5になります。長さ5。

これを解決するには、次の手順に従います-

  • sA:=Aの要素からの新しいセット

  • last:=Aの最後の要素

  • B:=Aに存在する各元素とその頻度を含むマップ

  • 最高:=0

  • Aのサイズが0までのiの場合、実行します

    • a:=A [i]

    • Aのサブ配列内の各bについて[インデックスi+1から終了まで]、実行

      • c:=a + b

      • cがsAに存在する場合、

        • B [a、b]:=1 + B [b、c]

        • ベスト:=ベストの最大値とB [a、b] +2

      • それ以外の場合、c>が最後の場合、

        • ループから出てきます

  • 最高のリターン

理解を深めるために、次の実装を見てみましょう-

from collections import Counter
def solve(A):
   sA = set(A)
   last = A[-1]
   B = Counter()
   best = 0
   for i in reversed(range(len(A))):
      a = A[i]
      for b in A[i+1:]:
         c = a+b
         if c in sA:
            B[a,b] = 1 + B[b,c]
            best = max(best , B[a,b]+2)
         elif c>last:
            break
   return best

A = [1,2,3,4,5,6,7,8]
print(solve(A))

入力

[1,2,3,4,5,6,7,8]

出力

5

  1. Pythonで最長のアナグラムサブシーケンスの長さを見つけるプログラム

    2つの小文字の文字列SとTがあるとすると、最長のアナグラムサブシーケンスの長さを見つける必要があります。 したがって、入力がS =helloworld、T =hellorldの場合、出力は8になります これを解決するには、次の手順に従います- c:=新しいマップ、d:=新しいマップ 0からaのサイズの範囲のiの場合、実行 cのa[i]の場合、 c [a [i]]:=c [a [i]] + 1 それ以外の場合 c [a [i]]:=1 0からbのサイズの範囲のiの場合、実行 dのb[i]の場合、 d [b [i]]:=

  2. Pythonで最も長いバランスの取れたサブシーケンスの長さを見つけるプログラム

    括弧「(」および「)」を含む文字列sがあるとすると、バランスの取れた括弧の最長のサブシーケンスの長さを見つける必要があります。 したがって、入力がs =())(()(の場合、出力は4になります。これは、 ()()のようなサブシーケンスを取ることができるためです。 これを解決するには、次の手順に従います- res:=0 n:=sのサイズ close:=0 n-1から0の範囲のiの場合、1ずつ減らします。 s[i]が)と同じ場合、 close:=close + 1 それ以外の場合 0の場合、 close:=close-1 r