1

いくつかの文字列を含むメイン配列があります。メイン配列の各値について、サブ配列にどの文字列が何回出現したかを確認したいと思います。たとえば、次の配列があります。

主な入力

mainArray = {A, B, C, P}

Subarrays
arrayA = {a,c,d,m,o}
arrayB = {b,c,p,q,r}
arrayC = {a,p,q,r,t,e,o}
……………………………
……………………………
arrayN = {a,c,p,n,o}

ここで、A、B、C、および P が一緒に出現した場所と回数を確認したいと思います。次の出力が生成されます。

resultArray = {{a,b,0}{a,c,2}{a,p,1}{b,c,0}{b,p,0}{c,p,2}}

最後のステップは、メイン配列の各文字列がサブ配列に出現した回数です。

最終出力

lastArray = A=3,B=0,C=4,P=3

数千のメイン配列と数千のサブ配列が必要です。したがって、パフォーマンスも問題です:(

4

2 に答える 2

0

標準 Java のままにしましょう。問題をステップに分割します。

  1. これらの変数の名前を変更します。mainSet、setA、setB などは実際には配列であり、セットではありません。それらを候補文字列、arrayA、arrayB などと呼びます。
  2. arrayA、arrayB などをリスト内の項目に書き換えて、それらをループできるようにします。List<String[]>新しい名前のがあります。私はあなたの目的を知らないので、トポロジーのオープン カバーのアイデアにちなんで、このリストをpartitionsまたはと呼ぶかもしれません。coverパーティションを使いましょう。
  3. Set<String>Java Collections フレームワークを使用できるように、各パーティションを s に変換します。あなたはで終わるでしょうList<Set<String>>
  4. mainSet のすべての 2 要素サブセットのセットを計算します。ちなみに、候補ストリングが としてより適切に機能するのはそのためListです。を使用Set<Set<String>>して呼び出しますpairs
  5. mainList の 2 要素サブセットごとに、 Set.containsAllを使用して、それを含むパーティションの数を数えます。Map<Set<String>, Integer>と呼ばれる新しい にカウントを格納しますpairCounts
  6. ここではあまり意味がありませresultSetん。どのようなデータ構造に{a, b, 0}なりますか? pairCounts人間が消費できるようにフォーマットするメソッドを書くだけです。
  7. candidateStringsと の両方を反復処理して、実際には と呼ばれるはずのpartitionsを計算します。lastSetMap<String, Integer>counts
  8. format へのメソッドを記述しますcounts

さて、これは遅いかもしれません。それが動作します。各ステップのテストを作成できます。正しいコードを書いたら、速度について心配してください。

于 2013-03-29T19:52:18.683 に答える
0

グアバライブラリマルチセットを使用します

于 2013-03-29T04:05:13.070 に答える