リストのリストが 2 つあり、サブリストはパスを表します。すべてのパスを検索したい。
List<List<E>> pathList1
List<List<E>> pathList2
もちろん素朴な解決策:
List<List<E>> result = new ArrayList<List<E>>();
for(List<E> p1 : pathList1) {
for(List<E> p2: pathList2) {
List<E> newList = new ArrayList<E>(p1.size()+p2.size());
newList.addAll(p1);
newList.addAll(p2);
result.add(newList);
}
}
無関係な理論上の問題
最近、時間の複雑さについて学びました。これは自己チェックです。私が正しければ、誰かがコメントしてくれることを願っています。
N = pathList1 の num リストとする
M = pathList2 の num リストとする
X = pathList1 のパスの平均の長さ
Y = pathList2 のパスの平均の長さ
「この関数の複雑さは何ですか?」と聞かれたら、私は与えるだろう
~O(NM(X + Y))
これを行うためのより速い方法があるかどうか疑問に思っていましたか?
多分より良いデータ構造?
同時進行?
ある種の「未来」を作り、代わりにそれを返しますか?(完全な開示、私は先物について97%無知です)。
私は巧妙なトリックやユニークなソリューション、または純粋に実用的なものに対してオープンです。
ありがとう。