配列をサブ配列に分割するアルゴリズム。すべてのサブ配列の最大合計が可能な限り低くなります。

ロビンホポク

intの配列があるとしましょう:a = {2,4,3,5}

そして、k = 3です。

配列の順序を変更できないk(3)個のサブ配列に配列aを分割できます。すべてのサブアレイ間の最大合計ができるだけ低くなるように、各サブアレイの合計はできるだけ低くする必要があります。

上記のソリューションの場合、これにより{2、4}、{3}、{5}が得られ、最大合計は6(4 + 2)になります。

この場合、最大合計は7(4 + 3)であるため、間違った答えは{2}、{4、3}、{5}になります。

すべてのintを合計し、結果のサブ配列の量で除算することにより、配列全体の平均を計算する欲張りアルゴリズムを作成してみました。したがって、上記の例では、これは14/3 = 4(整数除算)を意味します。次に、平均数よりも小さい限り、カウンターに数を合計します。次に、残りのサブ配列について再計算します。

私のソリューションは適切な近似を提供し、ヒューリスティックとして使用できますが、常に正しい答えが得られるとは限りません。

誰かが私にすべての場合に最適な解決策を与え、O(N²)よりも優れているアルゴリズムを手伝ってくれるでしょうか?およそO(n log n)のアルゴリズムを探しています。

前もって感謝します!

Pham Trung

この問題を解決するために二分探索を使用することができます。

したがって、すべてのサブ配列の最大値が、であると仮定すると、x各サブ配列の合計が最大で、以下になるように、O(n)の各サブ配列を貪欲に選択できますxすべてのサブ配列を作成した後、サブ配列の数が、以下の場合kx1つの可能な解決策がありxます。そうでない場合は、を増やします。

擬似コード:

int start = Max_Value_In_Array;
int end = Max_Number;

while(start <= end)
   int mid = (start + end)/2;
   int subSum = 0;
   int numberOfSubArray = 1;
   for(int i = 0; i < n; i++){
      if(subSum + data[i] > mid){
          subSum = data[i];
          numberOfSubArray++;
      }else{
          subSum += data[i];
      }
   }
   if(numberOfSubArray <= k)
       end = mid - 1;
   else
       start = mid + 1;

kとの時間計算量O(n log k)は、可能な最大の合計です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

合計がN以下のサイズLのすべての可能な配列を見つけるアルゴリズム

分類Dev

Kadaneのアルゴリズムには、合計ではなく実際の最大サブ配列またはインデックスを返すのに十分な情報が保持されていますか?

分類Dev

配列のサブシーケンスのすべての配列を出力するアルゴリズムはありますか?

分類Dev

区切り文字を使用してRuby配列をサイズの異なるサブ配列に分割する方法

分類Dev

3 * K配列をK個の等しいサブ配列アルゴリズムに分割する

分類Dev

間違った最大合計サブ配列(kadaneのアルゴリズム)を返しますが、最大合計は正しい

分類Dev

各サブ配列の合計が奇数になるように、配列をN個の連続サブ配列に分割するプログラム

分類Dev

配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

分類Dev

配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

分類Dev

連続サブ配列で最大の合計を見つけるためのこの再帰的アルゴリズムには、何か利点がありますか?

分類Dev

可能な重みが0〜100に割り当てられた配列のすべてのバージョンを生成するアルゴリズム

分類Dev

配列のすべてのサブセットのアルゴリズム

分類Dev

2つの配列をすべての可能な組み合わせの配列にマージするアルゴリズム

分類Dev

JavaScriptアルゴリズムの質問:配列から最大の合計を持つ連続したサブ配列を見つけてください

分類Dev

配列の合計の差が最小になるように、配列を2つのサブ配列に分割しますか?

分類Dev

int配列に65535を超える要素がある場合、最大合計サブ配列が常に機能しなくなるのはなぜですか?

分類Dev

合計が値になる5つの要素の配列を検索するためのアルゴリズム

分類Dev

メキシウムが配列のすべての要素よりも大きくなるように、サイズnの配列を埋める方法の数は?

分類Dev

すべてのアイテムの最大合計を持つサブ配列を取得する方法

分類Dev

配列のすべてのサブ配列にわたる(min * max)の合計を計算します

分類Dev

配列のすべての可能なサブセットの積の合計

分類Dev

文字列の配列を取り込んで、各文字列を並べ替えてから、配列全体を並べ替えるアルゴリズムがあるとします。ランタイムはどうなりますか?

分類Dev

特定の配列のすべてのサブインターバルから可能な最大差の合計を見つける

分類Dev

各サブ配列をサブ配列にRubyし、最後のサブ配列が他のサブ配列とサイズが異なる場合はデフォルトの要素値を設定します

分類Dev

すべてのサブセットの合計ではなく、配列の各サブセットの合計を個別に格納する

分類Dev

サイズnのブール配列のすべての可能な方法を作成しますか?

分類Dev

アルゴリズムの複雑さ : より大きな配列でサブ配列の開始インデックスを見つける

分類Dev

長さKのすべてのサブ配列の合計が等しくなるように、特定の配列の順列があるかどうかを判別します

分類Dev

配列のすべての可能なサブ配列を効率的に見つける方法は?

Related 関連記事

  1. 1

    合計がN以下のサイズLのすべての可能な配列を見つけるアルゴリズム

  2. 2

    Kadaneのアルゴリズムには、合計ではなく実際の最大サブ配列またはインデックスを返すのに十分な情報が保持されていますか?

  3. 3

    配列のサブシーケンスのすべての配列を出力するアルゴリズムはありますか?

  4. 4

    区切り文字を使用してRuby配列をサイズの異なるサブ配列に分割する方法

  5. 5

    3 * K配列をK個の等しいサブ配列アルゴリズムに分割する

  6. 6

    間違った最大合計サブ配列(kadaneのアルゴリズム)を返しますが、最大合計は正しい

  7. 7

    各サブ配列の合計が奇数になるように、配列をN個の連続サブ配列に分割するプログラム

  8. 8

    配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

  9. 9

    配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

  10. 10

    連続サブ配列で最大の合計を見つけるためのこの再帰的アルゴリズムには、何か利点がありますか?

  11. 11

    可能な重みが0〜100に割り当てられた配列のすべてのバージョンを生成するアルゴリズム

  12. 12

    配列のすべてのサブセットのアルゴリズム

  13. 13

    2つの配列をすべての可能な組み合わせの配列にマージするアルゴリズム

  14. 14

    JavaScriptアルゴリズムの質問:配列から最大の合計を持つ連続したサブ配列を見つけてください

  15. 15

    配列の合計の差が最小になるように、配列を2つのサブ配列に分割しますか?

  16. 16

    int配列に65535を超える要素がある場合、最大合計サブ配列が常に機能しなくなるのはなぜですか?

  17. 17

    合計が値になる5つの要素の配列を検索するためのアルゴリズム

  18. 18

    メキシウムが配列のすべての要素よりも大きくなるように、サイズnの配列を埋める方法の数は?

  19. 19

    すべてのアイテムの最大合計を持つサブ配列を取得する方法

  20. 20

    配列のすべてのサブ配列にわたる(min * max)の合計を計算します

  21. 21

    配列のすべての可能なサブセットの積の合計

  22. 22

    文字列の配列を取り込んで、各文字列を並べ替えてから、配列全体を並べ替えるアルゴリズムがあるとします。ランタイムはどうなりますか?

  23. 23

    特定の配列のすべてのサブインターバルから可能な最大差の合計を見つける

  24. 24

    各サブ配列をサブ配列にRubyし、最後のサブ配列が他のサブ配列とサイズが異なる場合はデフォルトの要素値を設定します

  25. 25

    すべてのサブセットの合計ではなく、配列の各サブセットの合計を個別に格納する

  26. 26

    サイズnのブール配列のすべての可能な方法を作成しますか?

  27. 27

    アルゴリズムの複雑さ : より大きな配列でサブ配列の開始インデックスを見つける

  28. 28

    長さKのすべてのサブ配列の合計が等しくなるように、特定の配列の順列があるかどうかを判別します

  29. 29

    配列のすべての可能なサブ配列を効率的に見つける方法は?

ホットタグ

アーカイブ