n要素の配列から一意の3要素のすべての組み合わせを返す最速のアルゴリズムについて考えていました。明らかなのはO(n^3)ソリューションです。これは考えられるすべての組み合わせを考慮に入れていますが、これはブルートフォースであり、私はもっと迅速に何かを見つけるつもりです。 C++で答えを探すn要素の配列から3要素のすべての組み合わせを見つける
答えて
(配列のすべての項目が異なっている)あなたは出力に
n !/((n - 3)! * 3!) == n * (n - 1) * (n - 2)/6
明確なアイテムを持っているので、O(n**3)
はあなたが達成することができ、すべてのです。配列は、多くのアイテムが、いくつか明確なものを持っている場合 は、あなたがそれを前処理することができます。すべての項目ocurrenciesを削除しますが、3 :
[0, 1, 1, 1, 1, 0, 2, 1, 2, 2, 2, 1] -> [0, 0, 1, 1, 1, 2, 2, 2]
あなたは、配列の項目の前処理のための良好なハッシュ関数を使用している場合ステージはO(N)
となります。 の場合、の場合(すべての項目が同じです)、プリプロセスにはO(N)
が、唯一の回答出力はO(1)
となり、 ルーチン全体ではO(N)
になります。
任意の配列の場合、配列全体をスキャンする必要があるため、O(N)
より複雑ではありません。プロセスがはるかに速くなります運がよけれ場合は最後に、配列の項目のための前処理との良好なハッシュ関数の場合の複雑さは
[O(N)..O(N**3)]
の範囲です。大量のデータを出力する場合は、大きなコレクションを出力します。
これを行う方法はありません。あなたが何をしていても、それらの3つの要素を得る必要があるからです。サイズはnC3 = n*(n-1)*(n-2)/6
です。いつでもこれを繰り返す必要があります。したがって、複雑さの最小値はO(n^3)
になります。 最悪場合
(私の質問で述べたように)私はユニークな順列だけを見ていますか?そのような – PaulW
のセットはその順列[1 2 3]は[3 2 1]と同じです – PaulW
はい、nC3異なる場合が必要です....来る – coderredoc
- 1. 各要素の組み合わせを見つける
- 2. 複数の配列からの要素の組み合わせ
- 3. ブートストラップ3のフォーム要素を並べて組み合わせた
- 4. iterable1のn要素とiterable2のm要素を組み合わせる
- 5. 配列の連続する要素の組み合わせ
- 6. JavaScript - m個の要素を持つn個の配列から組み合わせを生成する
- 7. 各組み合わせのリストの1つの要素の組み合わせ
- 8. リスト内の要素の2^nは-2組み合わせ
- 9. python - 2つの行列の要素の組み合わせ
- 10. 配列と組み合わせパターンの組み合わせを見つける
- 11. 配列要素を組み合わせるArduino
- 12. マトリックス要素の組み合わせ
- 13. いくつかのリストの要素を組み合わせる
- 14. テーブル内の要素のすべての組み合わせを見つける(Lua/PseudoCode)
- 15. JavaScript配列の値のすべての組み合わせを見つける
- 16. 特定の配列の場合、3つの要素の組み合わせを降順に数えます。
- 17. n要素の配列から '公平な組み合わせ'を得るには?
- 18. リストのすべての組み合わせを見つける
- 19. 配列内のすべての可能な要素の組み合わせの最小の差を得る
- 20. 配列内の特定の要素を掛け合わせる
- 21. javascriptですべての組み合わせを見つける
- 22. 2つのコンポーネントの要素を組み合わせて表示する
- 23. リストの要素のすべての可能な組み合わせ
- 24. 配列内の配列要素のインデックスを見つける
- 25. 考えられるすべての要素の組み合わせを列挙する方法
- 26. C++複数の配列の要素のすべての組み合わせを幅優先検索の方法で見つけよう
- 27. 2D配列内の要素セットのすべての行インデックスを見つける
- 28. PHP配列内の要素内のランダムな要素を見つける?
- 29. 配列のすべての要素を含むエントリを見つける
- 30. Pythonのリストの要素のユニークな組み合わせ
本当に 'すべての'組み合わせが必要な場合は、O(n^3)よりも高速に解を作ることは不可能です出力はすでにO(n^3)です。 – newbie
申し訳ありませんが、私はユニークなソリューションについて考えていました。私の質問を編集するつもりだ – PaulW
ユニークな解決策は? – coderredoc