数のセットを隣接せずに2D配列に分散するアルゴリズム

アーメド・モーシン

例として、(0,1 ... 15)のような数値のセットを、それ自体に隣接する数値を許可せずに、既知の次元の大きな2D配列に分散させたい:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 0  1  2  3  4  5  6  7

3  4  5  6  7  8  9  10 11 12 13 14 15 0  1  2  3  4  5  6  7  8  9  10

6  7  8  9  10 11 12 13 14 15 0  1  2  3  4  5  6  7  8  9  10 11 12 13

あなたがどんな数を見ても、あなたはそれがどんな方向にもそれ自身に隣接しているのを見ることは決してないだろうか?

アレラ

うまくいけばあなたのニーズを満たすであろうあなたが望むことをするためのアルゴリズムを説明します。

  1. 最初に元の数値の配列を取得し、それをほぼ同じサイズの4つの配列に分割します(この例では、これは(0,1,2,3)、(4,5,6,7)、 (8,9,10,11)、(12,13,14,15)それが理にかなっている場合)。これらのサブアレイを標識arr1arr2arr3arr4、それぞれ。

  2. ここで、配列を埋めるには、次のように行を埋めます。行のインデックスが偶数(0番目、2番目、4番目など)の場合は、行の最初の要素にからのラドノム番号を入力arr1します。行のインデックスが奇数の場合、行に2番目の数値を入力しarr3ます。次に、配列の次の要素に、次の前の要素の乱数を入力しarrます。例えば、行の最初の要素の数であった場合、arr1後行の次の要素がの要素であろうarr2、とから以下arr3、その後arr4、再びまでarr1等、そして、それはそれです。

なぜ機能するのか:なぜ機能するのか疑問に思われる場合は、最初に2D配列をグラフとして検討してください。対角線を含めると、2次元配列は彩色番号4colorのグラフなります。つまり、グラフに4つの一意の要素が必要です。これらの色は基本的にarr1、...、arr4であるため、グラフにarr「」の数字を入力すると、グラフを効果的に「色付け」します。

グラフの色を確認するには、4x4配列を検討してください。それはそのように4色にすることができます:

[[ 1 , 2 , 3 , 4 ],
 [ 3 , 4 , 1 , 2 ],
 [ 1 , 2 , 3 , 4 ],
 [ 3 , 4 , 1 , 2 ]] 

これは上記のアルゴリズムが何をするかにanalagousであるが、代わりに数1-4の、それは配列から数値を取得する、ことを注意arr1、...、 arr4また、4色がどのm x n配列にも当てはまり、アルゴリズムの有効性が証明されていることも比較的明らかです(これは特に厳密な証明ではありませんが、うまくいけば理解できます)。

注意すべきことがいくつかあります。まず、少なくとも4の長さの初期配列が必要です。そうでない場合は、使用できる「色」が4つ未満になり、このグラフを3色だけで色付けできないことは簡単にわかります。さらに、このアルゴリズムは確かに改善されて、たとえば、現在のように「よりランダム」に見えるようになります。数値は均等に分散されますがarr1、たとえばからの数値しか見つからないため、あまりランダムではないように見えます。最終的な配列の特定の場所。しかし、このアルゴリズムは、ほぼ均等に番号を配布する(あれば最高んarr1arr2arr3arr4全て同じ大きさ)と質問が尋ねたので、私はそれが有効であると考えているものを行います。

グラフ彩色の詳細については、ウィキペディアのページ(数学を多用する)、または関連するこのクールな問題(4色の地図の定理、おそらくあなたはそれに精通していますか?)を読むことをお勧めします。

この回答がお役に立てば幸いです。コメントがあればコメントを残してください。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

2D配列に格納されている隣接するピクセル値をコピーするためのアルゴリズムはありますか?

分類Dev

2D配列を検索するアルゴリズム

分類Dev

2D配列の隣接セルを確認する-Java

分類Dev

配列のセットを再帰的にフラット化するアルゴリズム

分類Dev

バケット内の要素の数を範囲内に分散する方法-アルゴリズム

分類Dev

その配列に有効な要素のセットに基づいてリストを配列に分割するアルゴリズム

分類Dev

Pythonで2Dバイナリリストを10進数に変換するアルゴリズム

分類Dev

2D配列の各要素に1回アクセスする最も非効率的なアルゴリズム

分類Dev

2D配列のピークを見つけるアルゴリズム

分類Dev

テーブルセル/ 2D配列ソートアルゴリズム

分類Dev

'{'と '}'をjavascriptの2つの配列に格納するアルゴリズム

分類Dev

遺伝的アルゴリズム関数JS 2D配列

分類Dev

A *アルゴリズムは、複数の隣接するセルで構成される開始位置と終了位置に適していますか

分類Dev

隣接リストがプリムアルゴリズムを使用して文字列配列にある隣接リストから最小スパニングツリーを見つける

分類Dev

Pythonの隣接行列に関するダイクストラのアルゴリズム

分類Dev

DFS アルゴリズムを使用して、マトリックス内の隣接する数値の最大領域を見つける

分類Dev

Pythonの2D配列の再帰的アルゴリズム

分類Dev

最初の軸インデックスに沿って 3D 配列に関数を適用する Pythonic アルゴリズム

分類Dev

numpy配列の隣接セルにアクセスする

分類Dev

実際に挿入せずに(c#で)ソートされた数値リストまたは配列内の挿入位置を見つけるための最速のデータ構造および/またはアルゴリズムは何ですか?

分類Dev

2Dグリッドの接続性を繰り返しテストするためのアルゴリズム

分類Dev

衝突せずに配列をランダムに埋めるアルゴリズム

分類Dev

アルゴリズムはカタツムリの2D配列で番号の位置を見つけます

分類Dev

セットを共通の要素とマージするための効率的な分散アルゴリズム

分類Dev

すべての個別の文字をカバーせずにchar文字列からすべてのサブセットを取得する方法についてのアルゴリズムは何ですか?

分類Dev

すべてを検索せずに、複数のセットに番号が存在するかどうかを確認するための優れたアルゴリズムは何ですか?

分類Dev

反復せずに2D配列の行数と列数を取得する

分類Dev

2D配列に円を作成するアルゴリズム編集:ダイヤモンドは大丈夫です

分類Dev

2D配列内の隣接するセルをカウントすることになっているクラスは、C#では正しくカウントされません

Related 関連記事

  1. 1

    2D配列に格納されている隣接するピクセル値をコピーするためのアルゴリズムはありますか?

  2. 2

    2D配列を検索するアルゴリズム

  3. 3

    2D配列の隣接セルを確認する-Java

  4. 4

    配列のセットを再帰的にフラット化するアルゴリズム

  5. 5

    バケット内の要素の数を範囲内に分散する方法-アルゴリズム

  6. 6

    その配列に有効な要素のセットに基づいてリストを配列に分割するアルゴリズム

  7. 7

    Pythonで2Dバイナリリストを10進数に変換するアルゴリズム

  8. 8

    2D配列の各要素に1回アクセスする最も非効率的なアルゴリズム

  9. 9

    2D配列のピークを見つけるアルゴリズム

  10. 10

    テーブルセル/ 2D配列ソートアルゴリズム

  11. 11

    '{'と '}'をjavascriptの2つの配列に格納するアルゴリズム

  12. 12

    遺伝的アルゴリズム関数JS 2D配列

  13. 13

    A *アルゴリズムは、複数の隣接するセルで構成される開始位置と終了位置に適していますか

  14. 14

    隣接リストがプリムアルゴリズムを使用して文字列配列にある隣接リストから最小スパニングツリーを見つける

  15. 15

    Pythonの隣接行列に関するダイクストラのアルゴリズム

  16. 16

    DFS アルゴリズムを使用して、マトリックス内の隣接する数値の最大領域を見つける

  17. 17

    Pythonの2D配列の再帰的アルゴリズム

  18. 18

    最初の軸インデックスに沿って 3D 配列に関数を適用する Pythonic アルゴリズム

  19. 19

    numpy配列の隣接セルにアクセスする

  20. 20

    実際に挿入せずに(c#で)ソートされた数値リストまたは配列内の挿入位置を見つけるための最速のデータ構造および/またはアルゴリズムは何ですか?

  21. 21

    2Dグリッドの接続性を繰り返しテストするためのアルゴリズム

  22. 22

    衝突せずに配列をランダムに埋めるアルゴリズム

  23. 23

    アルゴリズムはカタツムリの2D配列で番号の位置を見つけます

  24. 24

    セットを共通の要素とマージするための効率的な分散アルゴリズム

  25. 25

    すべての個別の文字をカバーせずにchar文字列からすべてのサブセットを取得する方法についてのアルゴリズムは何ですか?

  26. 26

    すべてを検索せずに、複数のセットに番号が存在するかどうかを確認するための優れたアルゴリズムは何ですか?

  27. 27

    反復せずに2D配列の行数と列数を取得する

  28. 28

    2D配列に円を作成するアルゴリズム編集:ダイヤモンドは大丈夫です

  29. 29

    2D配列内の隣接するセルをカウントすることになっているクラスは、C#では正しくカウントされません

ホットタグ

アーカイブ