それは最高のタイトルだったかどうかわかりませんが、私は2つのpythonリストを持っています。 L1とL2の両方がタイプTのエレメントを持ち、同じ長さを持たない。2つのリストl1とl2については、すべてのe1∈l1、∃p(e1、e2)に対してチェックするにはどうすればよいでしょう?ここで、e2はl2の要素です。
私はL1のすべての要素Eのことをチェックしたい型T.
の二つの要素についてのプロパティをチェックする述語である関数P(T、T)、P(E、Eを有しています')が成り立つ。ここで、e'はL2のSOME要素である。基本的にL1の各要素については、2番目のリストに行き、述語が要素のいずれかに当てはまるかどうかを確認します。しかし、私はまた、他のリストについても同じことをチェックしたいと思っています。
p(T、T)は対称です。したがって、p(e、e ')ならばp(e'、e)。私はその対称性のために同じことを二度したくない。私は何とかp(e、e ')を見ればp(e'、e)を知っていて、2番目のリストをもう一度チェックする必要はないことを記録する必要があります。
これをPythonで行う最良の方法は何ですか?私は、e2が他のリストのメンバーである場合、p(e1、e2)が成立するかどうかをそれぞれのリストの各要素e1に別のフィールドを持つことを考えました。しかし、私はこれらのリストを両方ともコピーする必要があると思うので、私はそれを変更しません。これを行う良い方法はありますか?
事前計算を行う場合は、L1の各要素についてO(1)時間内にチェックを行うことができます。 LL1のi番目の要素e1に対して、p(e1、e2)となるようなe1がL2内に存在する場合に限りLL1 [i] == 1となるように2つ以上のリストLL1とLL2を作成してください。あなたは全体的な質問への答えを記録することができます(L1のすべてのe1が存在するため...) – Alejandro
[OK]を、私はそのコードで私の質問を編集しました。私はそれがあなたが意味していたものなのかどうかは分かりませんが、それがあれば、それは私には大変意味があります。 – Lana
@Alejandro:それは実際にはどんな仕事も保存しません。事前計算は 'O(n ** 2)'であり、あまり再利用できません。 – user2357112