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. 集合Nからのk要素の組み合わせ
- 3. 複数の配列からの要素の組み合わせ
- 4. ブートストラップ3のフォーム要素を並べて組み合わせた
- 5. iterable1のn要素とiterable2のm要素を組み合わせる
- 6. 配列の連続する要素の組み合わせ
- 7. JavaScript - m個の要素を持つn個の配列から組み合わせを生成する
- 8. 要素の組み合わせnumpy配列のリスト
- 9. 各組み合わせのリストの1つの要素の組み合わせ
- 10. セットの要素の組み合わせ
- 11. リスト内の要素の2^nは-2組み合わせ
- 12. python - 2つの行列の要素の組み合わせ
- 13. 配列と組み合わせパターンの組み合わせを見つける
- 14. 配列要素を組み合わせるArduino
- 15. マトリックス要素の組み合わせ
- 16. 配列内の要素の組み合わせを見つけるための再帰関数
- 17. いくつかのリストの要素を組み合わせる
- 18. テーブル内の要素のすべての組み合わせを見つける(Lua/PseudoCode)
- 19. Javascript - 1つの配列内の要素のすべての組み合わせを生成する(ペアで)
- 20. JavaScript配列の値のすべての組み合わせを見つける
- 21. 特定の配列の場合、3つの要素の組み合わせを降順に数えます。
- 22. 最小配列数を使用してすべての要素をカバーする配列の組み合わせを見つける
- 23. n要素の配列から '公平な組み合わせ'を得るには?
- 24. 配列の組み合わせの中点を見つける
- 25. 同じ要素を組み合わせて配列を変換する
- 26. リストのすべての組み合わせを見つける
- 27. 配列内のすべての可能な要素の組み合わせの最小の差を得る
- 28. 配列内の特定の要素を掛け合わせる
- 29. javascriptですべての組み合わせを見つける
- 30. 重複要素を持たないリスト要素のすべての組み合わせ
本当に 'すべての'組み合わせが必要な場合は、O(n^3)よりも高速に解を作ることは不可能です出力はすでにO(n^3)です。 – newbie
申し訳ありませんが、私はユニークなソリューションについて考えていました。私の質問を編集するつもりだ – PaulW
ユニークな解決策は? – coderredoc