元の配列と、各フィルターがフィルターで許可されるインデックスで構成されるフィルターのリストがあります。フィルタはかなりいいです(例:次のように2のべき乗ごとにグループ化されます(フィルタはn = 20まで)。 8 (2^3) = 1 2 3 4 5 6 7 8 17 18 19 20
xorまたは配列にフィルターを適用した後
4 (2^2) = 1 2 3 4 9 10 11 12 17 18 19 20
2 (2^1) = 1 2 5 6 9 10 13 14 17 18
1 (2^0) = 1 3 5 7 9 11 13 15 17 19
-
は、私はあなたのアイデアを得る願っています。ここでは、元の配列にこれらのフィルタの一部またはすべて(ユーザーが適用するフィルタを指定)を適用し、変換された配列の要素のxorを答えにします。元のアレイが
[3 7 8 1 2 9 6 4 11]
である場合の例を挙げてください。 n = 9であり、4,2,1のフィルタを適用する必要があった場合、変換は次のようになります。今3及び11、例えばのXORを
[3 x x x x x x x 11]
から1のフィルタを適用した後[3 7 x x x x x x 11]
[3 7 8 1 x x x x 11]
- 8が答えです。私はこのO(n * no。of filter)時間を解決することができますが、O(フィルターなし)時間で答えを出す良い解決策が必要です。 xorのプロパティを利用したり、結果をあらかじめ計算してからフィルタに答えを出す方法はありますか?これは、フィルタを使用するクエリが多いため、O(フィルタなし)時間のクエリに答える必要があるためです。どんな種類の助けにも感謝します。
をそれは、Mは、すべてのフィルタを通過した項目の数であるO(M)で行うことができます。配列の終わりに達するまで、上記のルールを使用して(常に有効である)0で開始し、インクリメント(フィルタの数に関係なく)、それはOKですか? – harold
私はその解決策を知りたいと思います。ありがとうございました。 – smashingpumpkin