ホームページ >バックエンド開発 >C++ >可能な最大のバランスの取れたバイナリ部分文字列の分割 (最大でも k を必要とします)

可能な最大のバランスの取れたバイナリ部分文字列の分割 (最大でも k を必要とします)

WBOY
WBOY転載
2023-08-29 09:41:071266ブラウズ

可能な最大のバランスの取れたバイナリ部分文字列の分割 (最大でも k を必要とします)

C プログラミング言語の配列のサイズは固定されており、一度指定したサイズは変更できず、縮小したり拡張したりすることもできません。

ご存知のとおり、配列は同じデータ型の要素のセットであり、連続したメモリ領域に格納されます。

値の配列 v[] とバイナリ配列 a[] が与えられた場合、目的は、各セグメントに等しい量のコインが含まれるようにしながら、できるだけ多くの k 個のコインを使用してバイナリ配列を分割することです。 0 と 1。i と j は分割セグメントの隣接するインデックスで、各分割のコストは (v[i] - v[j])2.

です。 ###問題文###

コストが最大で k になる、可能な限り最大のバランスのとれたバイナリ部分文字列分割を見つけるプログラムを実装します。

例 例 1

リーリー

取得される出力は次のとおりです: 1

###説明###

K の値は 1 なので、最初のインデックスと 2 番目のインデックスの間でカットを行うことができます。

この場合、[0, 1] と [0, 0, 1, 1] は、最終結果のバランスの取れたバイナリ部分文字列です。

この削減を行うには、(8 - 9)^ 2 = 1、および 1 = 1 のコストがかかります。

例 例 2

リーリー リーリー ###説明###

最初のカットは、最初と 2 番目のインデックス (4 と 7) の間で行われ、コストは (4 - 7)^2 = 9 になります。2 番目のカットは、3 番目と 4 番目のインデックス (7 と 10) の間で行われます。 (7 - 10)^ 2 = 9 のコストがかかります。現時点ではこれ以上のカットはできません。この場合に生じるバランスの取れたバイナリ部分文字列は、[1, 0]、[1, 0]、および [1, 1] です。 , 0, 0].

###アプローチ###

最大コスト k で可能な最大のバランスの取れたバイナリ部分文字列分割を見つけるために、次の方法を採用します。

ここでは、トップダウンのアプローチを採用してこの問題を解決し、最大コスト k で可能な最大限のバランスのとれたバイナリ部分文字列分割を見つけます。

トップダウン アプローチ、またはより一般的には動的プログラミング アプローチとして知られるアプローチを使用します。動的プログラミングの主な利点は、単純な再帰の効率が向上することです。動的プログラミングを使用すると、同じ入力への繰り返し呼び出しを伴う再帰的ソリューションを最適化できます。部分問題の結果を後で再計算することを避けるために、それらを保存するという考え方があります。この単純な最適化により、時間計算量は多項式から指数関数に軽減されます。

###アルゴリズム###

最大コスト K で可能な最大のバランスの取れたバイナリ部分文字列分割を見つけるアルゴリズムを以下に示します。

ステップ 1

- 開始

ステップ 2
    - 2 次元行列を定義します m
  • ステップ 3
  • - 可能な最大のバランスのとれたバイナリ部分文字列分割を見つける関数を定義します。
  • ステップ 4
  • -ゼロの数をカウントする整数変数 zeroCount と 1 の数をカウントする oneCount をそれぞれ定義します
  • ステップ 5
  • -分割数を計算するために整数変数 cntSplits を定義します
  • ステップ 6
  • - 指定された配列 a
  • を反復処理します。

    ステップ 7
  • - 0 の数が 1 の数と等しいかどうかを確認し、実行可能な最大の 1 を保存します
  • ステップ 8
  • - インデックスの位置が 0 であると仮定し、それが 1 か 0 かを確認し、カウントをインクリメントします。
  • ステップ 9
  • - カウント 1 とカウント 0 が等しくない場合、cntSplits をゼロに設定します。
  • ステップ 10
  • - 結果の値を行列に保存します
  • ステップ11
  • -得られた目的の結果を印刷します
  • ステップ 12
  • - 停止
  • 例: C プログラム

  • これは、コストが最大 k の、可能な限り最大のバランスのとれたバイナリ部分文字列分割を見つけるための、上記のアルゴリズムの C プログラム実装です。
  • リーリー ###出力### リーリー ###結論は###

    同様に、コストが最大で K になるバランスの取れたバイナリ部分文字列の分割を見つけることができます。 この論文では、最大コスト K で可能な最大のバランスの取れたバイナリ部分文字列分割をプログラムに見つけさせるという課題に取り組みます。

  • ここでは、C プログラミング コードと、コストが最大 K の、可能な限り最大のバランスのとれたバイナリ部分文字列分割を見つけるアルゴリズムとともに提供されます。

以上が可能な最大のバランスの取れたバイナリ部分文字列の分割 (最大でも k を必要とします)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。