2017-12-01 1 views
0
l1= [(1, 4), (1, 5), (2, 4), (3, 5)] 
l2= [(3, 5), (1, 4), (2, 3), (3, 4), (2, 5), (4, 5)] 

2つのエッジリストがあり、2つのリストのエッジを比較し、[1,1,0,0,0,0 ]これは、l1の辺をl2と比較することによって形成され、辺がl2に存在する場合は1、それ以外の場合は0となります。辺リストの辺がl1の形(1,4)の場合、 (4,1)がl2にある場合は、見つかったものとして扱う必要があります。2つのエッジリストのエッジを比較すると、無向エッジ条件が保証されます

編集で、実際のデータセットベクトルの大きさはl1は(時間とメモリは何の問題ではないように)長すぎない場合、あなたはこのような何かを行うことができ10万

+0

あなたは隣接リストではなく、中のエッジのリストとしてあなたのグラフを表す考慮しませんでした最初の場所(すなわち、i番目の頂点が頂点iのすべての近傍を含むようなリスト/集合のリストとして)?これにより、必要なチェックを効率的に実行できます。 – pho7

答えて

0

の範囲内である:

l1_set = [set(e) for e in l1] 
vec = [int(set(e) in l1_set) for e in l2] 

vecは実際には[1, 1, 0, 0, 0, 0]です。

EDIT: また、あなたが最初の場所に隣接リスト(というよりもエッジリスト)として、あなたのグラフを表すことができます:

l1 = [[], [4, 5], [4], [5], [], []] 
l2 = [[], [4], [3, 5], [5, 4], [5], []] 

この方法は、あなたが任意の種類を作成することなく、必要なチェックを行うことができすべての中間データ構造の:あなたのグラフは、多くのエッジを持っている場合

>>> [[int(vertex in l1[n] or n in l1[vertex]) for n in neighbors] for vertex, neighbors in enumerate(l2)] 
[[], [1], [0, 0], [1, 0], [0], []] 

、しかし、あなたはそれ自体のリストとしてグラフを表す。このアプローチのバリエーションを考えることもできますts(f5r5e5dによって指摘されているように)それはsetl1を作る1時間コスト価値があるかもしれ

+0

実際のデータセットでは、100,000の範囲のベクトルサイズ –

関連する問題