私は質問を短くしようとしましたが、これは私ができる最善の方法です。要素の最初と最後の値に基づいて配列内の要素を検出して削除する最も効率的な方法
$var = array(
array(1, 2, 3),
array(1, 3),
array(1, 2, 4, 3),
array(1, 3, 4)
);
私がしたいことは持っている$var
からすべてのアレイを削除することです:
$var
から別の配列と同じですが、後者よりも多くの要素があります。
ので、以下のアレイを削除する必要があります:(1, 2, 3)
と(1, 2, 4, 3)
彼らは両方の1
で始まり、3
で終わると(1, 3)
より多くの要素を持っているので、また始まり、1
と3
で終了します。 1
で始まり、4
で終わり、それよりも少ない要素があるため、(1, 3, 4)
は残ります。
私は、メモリと時間の両方でこれを行う最も効率的な方法を探しています。 $var
には最大100個のアレイがあり、個々のアレイには最大10個の要素が含まれます。私は2つの要素(for(i=0;...) for(j=i+1;...) complexCompareFunction();
)の間の何らかの比較を使用することを考えましたが、これはあまり効率的ではないと私は信じています。
あなたが何をしようとしてのためのユースケースを持っていますか?それを実装するより良い方法があるかもしれません... – Josh
私は、2つのユーザが選択した場所をリンクする公共交通機関のすべての組み合わせを生成しています。生成された行の組み合わせ(この場合は '$ var')から、余分な行を使用する行を削除したいと思います。だから、 '(1,3)'という行で2番目のポイントに到達できるのであれば、なぜ '(1,2,3)'も表示すべきでしょうか?ここでは、行「2」は余分であり、1つは宛先なしに到達することができます。 – linkyndy
おそらく1,2,3は1,3よりも(列車で行くので)時間がかかりません(バスで直接行くことができるからです)。私たちは問題を再構築することができます。ステーションをノードとして、グラフをエッジとして接続します。 2つのノードn、mごとに、nで始まりmで終わる最短パスを検索します。このトピックにはそこにたくさんの参考文献があります。 – Basti