目次
イラスト
最長のサブセットは { "0", "0", "1"} で、2 つの 0 と 1 つの 1 が含まれます。
最長のサブセットは、{"0"、"101"、"0"、"1"}、3 つの 0 と 3 つの 1 です。
このセクションでは、再帰を使用した簡単な方法を学びます。配列要素を使用して考えられるすべてのサブセットを構築し、A 0 と B 1 を含む最長のサブセットを見つけます。
方法 2
このセクションでは、上記の方法を最適化しました。この問題を解決するために、私たちは動的プログラミング手法を使用します。問題の時間の複雑さを軽減するために、前の状態の結果を保存します。
- 上記のメソッドで行ったのと同じように、特定のバイナリ文字列内のゼロの総数をカウントする countZeros() 関数を定義します。
ホームページ バックエンド開発 C++ 文字列配列から A 0 と B 1 で構成される最長のサブセットの長さを見つけます。

文字列配列から A 0 と B 1 で構成される最長のサブセットの長さを見つけます。

Sep 11, 2023 pm 12:09 PM
文字列配列

文字列配列から A 0 と B 1 で構成される最長のサブセットの長さを見つけます。

この問題では、最大でも A 0 と B1 を含む最長のサブセットを見つける必要があります。必要なのは、配列要素を使用して考えられるすべてのサブセットを見つけ、最大でも A 0 と B1 を含む最長のサブセットを見つけることだけです。

このチュートリアルでは、まず問題を解決するための再帰的手法を学習します。その後、動的プログラミング手法を使用してコードを最適化します。

問題文 - N 個のバイナリ文字列を含む配列が与えられています。さらに、A と B の整数が与えられます。指定されたバイナリ文字列を使用して、A 0 と B1 より多くが含まれないように最長のサブセットを作成する必要があります。

###例### リーリー リーリー

イラスト

最長のサブセットは { "0", "0", "1"} で、2 つの 0 と 1 つの 1 が含まれます。

リーリー リーリー

イラスト

最長のサブセットは、{"0"、"101"、"0"、"1"}、3 つの 0 と 3 つの 1 です。

方法1

このセクションでは、再帰を使用した簡単な方法を学びます。配列要素を使用して考えられるすべてのサブセットを構築し、A 0 と B 1 を含む最長のサブセットを見つけます。

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

ステップ 1
    - countZeros() 関数を定義して、指定されたバイナリ文字列内のゼロの合計数をカウントします。
  • ステップ 1.1
  • - 「count」変数をゼロに初期化します。
  • ステップ 1.2
  • - for ループを使用して文字列を反復処理します。
  • ステップ 1.3
  • - i 番目のインデックスの文字が「0」の場合、「cnt」の値を 1 増やします。
  • ステップ 1.2
  • - 「cnt」変数の値を返します。
  • ステップ 2
  • - getMaxSubsetLen() は整数値を返し、ベクトル arr、int A、int B、およびインデックスを引数として受け取ります。
  • ステップ 3
  • - 関数内の基本ケースを定義します。インデックスがベクトルのサイズと等しい場合、または A と B の値が両方とも 0 の場合は 0 を返します。
  • ステップ 4
  • - 次に、インデックスの文字列内のゼロの合計数を数えます。
  • ステップ 5
  • - 文字列の長さから 1 の合計数を減算して、1 の合計数を取得します。
  • ステップ 6
  • - 「最初の」変数を 0 に初期化します。
  • ステップ 7
  • - 0 と 1 の合計数がそれぞれ A と B より小さい場合、現在のバイナリ文字列が含まれます。再帰関数呼び出しの戻り値を 1 格納します。再帰呼び出しを行うと、A と B から 0 と 1 が減算されます。
  • ステップ 8
  • - 現在の文字列を除外し、結果の値を「2 番目」の変数に保存します。
  • ステップ 9
  • - 1 番目と 2 番目の最大値を返します。
  • ###例### リーリー ###出力### リーリー 時間計算量 - N 個の配列要素を使用してすべての可能なサブセットを見つけるため、O(2N)。

  • 空間の複雑さ - O(1)

方法 2

このセクションでは、上記の方法を最適化しました。この問題を解決するために、私たちは動的プログラミング手法を使用します。問題の時間の複雑さを軽減するために、前の状態の結果を保存します。

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

ステップ 1

- 上記のメソッドで行ったのと同じように、特定のバイナリ文字列内のゼロの総数をカウントする countZeros() 関数を定義します。

ステップ 2
    - サイズ A x B x N の 3 次元ベクトルを作成して、前の状態の結果を保存します。リストでは、合計 0 が A に等しく、1 が B に等しい場合、インデックス "I" にサブセットの長さを格納します。さらに、それを引数として getMaxSubsetLen() 関数に渡します。
  • ステップ 3
  • - 上記の方法で行ったように、基本ケースを定義します。
  • ステップ 4 - dpTable[A][B][index] の値が 0 より大きい場合、ステータスが計算され、その値が返されたことを意味します。
  • ステップ 5
  • - 現在の文字列内の 0 と 1 の合計数を数えます。
  • ステップ 6
  • - 現在の文字列を含むおよび除外した結果の値を取得します。
  • ステップ 7
  • - max() 関数を使用して最初と 2 番目の最大値を取得し、それを dpTable[A][B][index] に保存した後、return
  • ###例### リーリー ###出力### リーリー 時間計算量 - O(A*B*N)、結果を取得するには 3D リストにデータを入力する必要があるため。

  • 動的プログラミング手法に 3D リストを使用するため、空間複雑度 - O(A*B*N)。

以上が文字列配列から A 0 と B 1 で構成される最長のサブセットの長さを見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracleでsplit()関数を使用する方法 Oracleでsplit()関数を使用する方法 May 07, 2024 pm 01:06 PM

SPLIT() 関数は、指定された区切り文字によって文字列を配列に分割し、各要素が元の文字列の区切り文字で区切られた部分である文字列の配列を返します。使用法には、コンマで区切られた値のリストを配列に分割する、パスからファイル名を抽出する、電子メール アドレスをユーザー名とドメインに分割するなどが含まれます。

Javaで文字列をソートする方法 Javaで文字列をソートする方法 Apr 02, 2024 am 02:18 AM

Java で文字列を並べ替える方法: Arrays.sort() メソッドを使用して、文字列の配列を昇順に並べ替えます。 Collections.sort() メソッドを使用して、文字列のリストを昇順に並べ替えます。文字列のカスタム並べ替えには Comparator インターフェイスを使用します。

C言語で\0は何を意味しますか C言語で\0は何を意味しますか Apr 27, 2024 pm 10:54 PM

C 言語では、\0 は文字列の終了マークであり、ヌル文字またはターミネータと呼ばれます。文字列はバイト配列としてメモリに格納されるため、コンパイラは \0 を介して文字列の末尾を認識し、文字列が正しく処理されることを保証します。 \0 仕組み: コンパイラは \0 に遭遇すると文字の読み取りを停止し、それ以降の文字は無視されます。 \0 自体はストレージ領域を占有しません。利点としては、信頼性の高い文字列処理、効率の向上 (終端を見つけるために配列全体をスキャンする必要がない)、比較と操作の容易さが挙げられます。

Javaのargsは何を意味しますか Javaのargsは何を意味しますか Apr 25, 2024 pm 10:15 PM

args は Java のコマンド ライン引数を表し、プログラムの起動時にプログラムに渡される引数のリストを含む文字列の配列です。これは main メソッドでのみ使用でき、デフォルト値は空の配列で、各パラメーターはインデックスによってアクセスできます。 args は、プログラムの開始時に入力データを構成または提供するためにコマンド ライン引数を受け取って処理するために使用されます。

Javaのargsは何を意味しますか Javaのargsは何を意味しますか May 07, 2024 am 02:24 AM

args は Java の main メソッドの特別なパラメータ配列で、コマンド ライン パラメータまたは外部入力の文字列配列を取得するために使用されます。 args 配列にアクセスすることで、プログラムはこれらの引数を読み取り、必要に応じて処理できます。

C言語環境で漢字をソートするにはどうすればよいですか? C言語環境で漢字をソートするにはどうすればよいですか? Feb 18, 2024 pm 02:10 PM

C言語プログラミングソフトウェアに漢字ソート機能を実装するにはどうすればよいですか?現代社会において、漢字ソート機能は多くのソフトウェアに欠かせない機能の一つとなっています。ワープロ ソフトウェア、検索エンジン、データベース システムのいずれにおいても、中国語のテキスト データをより適切に表示および処理するには、中国語の文字を並べ替える必要があります。 C言語プログラミングで、漢字ソート機能を実装するにはどうすればよいですか?一つの方法を以下に簡単に紹介します。まず、C言語で漢字ソート機能を実装するには、文字列比較関数を使用する必要があります。ラン

PHP機能への人工知能技術の応用 PHP機能への人工知能技術の応用 May 01, 2024 pm 01:15 PM

AI テクノロジーと PHP の機能を組み合わせて、アプリケーションの機能を強化しました。具体的な AI アプリケーションには、Naive Bayes などの機械学習アルゴリズムを使用したテキストの分類が含まれます。単語のセグメンテーションやステミングなどの自然言語処理技術を使用して、詳細なテキスト分析を実行します。

C++ 関数はプログラムのパフォーマンスにどのような影響を与えますか? C++ 関数はプログラムのパフォーマンスにどのような影響を与えますか? Apr 12, 2024 am 09:39 AM

C++ プログラムのパフォーマンスに対する関数の影響には、関数呼び出しのオーバーヘッド、ローカル変数、およびオブジェクト割り当てのオーバーヘッドが含まれます。 関数呼び出しのオーバーヘッド: スタック フレーム割り当て、パラメーター転送、および制御転送が含まれます。これは、小規模な関数に大きな影響を与えます。ローカル変数とオブジェクト割り当てのオーバーヘッド: ローカル変数やオブジェクトの作成と破棄が大量に行われると、スタック オーバーフローやパフォーマンスの低下が発生する可能性があります。

See all articles