ホームページ >バックエンド開発 >C++ >C++ を使用して指定された条件に基づいて指定されたバイナリ文字列を分割し、合計を最大化します

C++ を使用して指定された条件に基づいて指定されたバイナリ文字列を分割し、合計を最大化します

PHPz
PHPz転載
2023-09-04 10:21:07976ブラウズ

C++ を使用して指定された条件に基づいて指定されたバイナリ文字列を分割し、合計を最大化します

この記事は、個々のコンポーネントから得られる累積合計を最大化する方法でバイナリ文字列を分割するという複雑なアルゴリズムの問​​題を解決することを目的としています。コードを実装するための包括的な構文の概要を読者に提供し、この課題を克服するための 2 つの可能な手法を提案します。さらに、上記の方法に基づいた実際の完全な実行可能コードを 2 つ示します。

###文法###

アルゴリズムを詳しく説明する前に、指定されたメソッドの構造を理解しておくことが重要です。この構造については、今後のコード例で説明します。このメソッドは、バイナリ文字列を入力として受け取り、所定の条件を使用してその入力を分割することによって、可能な最大値を計算します。このアプローチが構文的にどのように見えるかは次のとおりです -

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

ここで、バイナリ文字列を分割して合計を最大化する問題を解決するための段階的アルゴリズムについて説明します。

コードスニペット1

2 つの変数「maxSum」と「currentSum」を初期化し、両方ともゼロに設定します。

  • バイナリ文字列を左から右にトラバースします。

  • 文字列内の各文字 -

  • 文字が「0」の場合、それを現在の部分文字列に追加します。

    • 文字が「1」の場合 -

    • 現在の「currentSum」を追加して「maxSum」を更新します。

      • 「currentSum」をゼロにリセットします。

    • 走査が完了したら、最後の「currentSum」と「maxSum」を追加します。
  • 結果として `maxSum` を返します。

  • 方法 1

  • この問題を解決する最初の方法には、上記のアルゴリズムを実装することが含まれます。対応するコード スニペット -
を見てみましょう。 ###例### リーリー ###出力### リーリー

イラスト

便宜上、コードには最初に必要なライブラリ (「iostream」と「string」) が組み込まれ、「std」名前空間が使用されます。

バイナリ文字列を分割することで達成可能な最大合計を計算するには、バイナリ文字列を入力として受け取り、出力を返す `maximizeSum` 関数を使用できます。

  • この関数内で 2 つの変数 (`maxSum` と `currentSum`) が初期化されます。前者はこれまでに到達した最大値を追跡し、後者は個々の部分文字列の合計を計算します。

  • 範囲ベースの for ループを使用して、入力「binaryString」内の各文字「c」を反復処理します。

  • 現在の文字「c」が「0」の場合、10 を乗算し、値「0」を加算して「currentSum」を更新します。これにより、現在の部分文字列に事実上「0」が追加されます。

  • 現在の文字「c」が「1」の場合、現在の部分文字列が終了することを意味します。 `currentSum`を`maxSum`に追加してこれまでに到達した最大合計を更新し、`currentSum`をゼロにリセットして新しい部分文字列を開始します。

  • ループが完了すると、最後の部分文字列の `currentSum` を前の `maxSum` に加算することによって計算されます。 「main」関数は、ユーザーがバイナリ文字列を入力できるようにするプロンプトを提供します。

  • 「main」関数は、ユーザーがバイナリ文字列を入力できるようにするプロンプトを提供します。

  • 入力文字列は `maximizeSum` 関数に渡され、返された最大合計は `result` 変数に格納されます。

  • 最後に、最大合計がユーザーに表示されます。

  • 方法 2

  • 2 番目のアプローチでは、整数乗算を実行する必要性を排除することでコードを最適化します。代わりに、ビットごとの演算を使用して現在の合計を計算します。このアプローチのコード スニペットを見てみましょう -
  • ###例### リーリー ###出力### リーリー

    イラスト

最初の方法と同様に、コードにはまず必要なライブラリが含まれ、`std` 名前空間が使用されます。

関数 `maximizeSum` と関数 `main` の定義は最初のメソッドと同じです。

`maximizeSum` 関数では、ビット左シフト演算子 (`
    です。
  • 2 を乗算するのと同じです。次に、現在の文字が "0" であるため、`currentSum` に 0 を追加します。

  • コードの残りの部分は、どちらの方法でも同じです。バイナリ文字列を入力として受け取ります。 `maximizeSum` 関数を使用して、文字列を分割するときに可能な最大合計を計算します。この結果はユーザーに表示されます。

  • これらのコードは C コンパイラでコンパイルして実行でき、バイナリ文字列を入力すると、指定された条件に従って文字列を分割した最大値を出力します。

    ###結論は###

    この記事では、指定された条件に基づいてバイナリ文字列を分割して合計を最大化する問題を検討します。コード例で使用されているメソッドの構文を示し、問題を解決する 2 つの方法を提案します。当初は直接算術が使用されていましたが、次の手法ではビット単位の演算を通じてエンコードを最適化します。どちらの方法でも問題は解決されますが、後者の方が整数の乗算が不要になるため効率が高くなります。これらのアルゴリズムを理解して実装すると、バイナリ文字列の分割による合計の最大化を伴う同様の問題を効率的に解決できます。

以上がC++ を使用して指定された条件に基づいて指定されたバイナリ文字列を分割し、合計を最大化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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