あなたはもうかなり遠いところにいるように感じます。実装をお見せすることもできますが、アルゴリズムについてはすでに説明しているので、自分で実装するのは難しいことではありません。しかし、おそらくあなたは自分の説明に自信がないでしょう。
クエリなどについて必要のない情報を省き、ゆっくりと正確に説明を述べさせていただきます。事前にソートされたリストが2つあり、それらの共通部分を見つけたいと思います。a = [1, 4, 5, 7, 8]
リスト、、、、およびb = [5, 8, 9]
で始まる、少し完全な例と、最初は図から除外する空の出力リストを使用して、図を適合させます。i=0
j=0
out = []
i = 0
a = 1 4 5 7 8
j = 0
b = 5 8 9
まず、それらが等しいかどうかを確認します。a[i]
そうではないので、との最小値を取りb[j]
ます。この場合、、、なのでa[i] == 1
、b[j] == 5
インクリメントしたいと思いますi
。
i = 1
a = 1 4 5 7 8
j = 0
b = 5 8 9
同じ手順を実行して、i
もう一度インクリメントします。
i = 2
a = 1 4 5 7 8
j = 0
b = 5 8 9
今では状況が異なります。a[i]
とb[j]
は同じなので、その値を出力リストに追加し、両方の値をインクリメントします。
i = 3
a = 1 4 5 7 8
j = 1
b = 5 8 9
out = 5
続けます。再び未満a[i]
です...b[j]
i = 4
a = 1 4 5 7 8
j = 1
b = 5 8 9
そして、値は同じなので、その値をに追加しout
、インクリメントi
してj
...
i = 5
a = 1 4 5 7 8
j = 2
b = 5 8 9
out = 5 8
しかし今、私たちはそれを見つけますi == len(a)
。したがって、アルゴリズムが終了したことがわかります。
これで、必要な変数とロジックがどのように機能するかを確立するために必要なすべてが揃いました。a
list 、list b
、index i
、index j
、 listが必要out
です。i == len(a)
またはのいずれかで停止するループを作成し、j == len(b)
そのループ内で、とa[i]
の同等性をテストしb[j]
ます。それらが等しい場合は、との両方をインクリメントしi
、j
に追加a[i]
しout
ます。それらが等しくない場合は、かどうかをテストしa[i] < b[j]
ます。そうである場合は、インクリメントしますi
; それ以外の場合は、インクリメントしますj
。
これにより、2つのリスト間の共通部分が決まります。これを最初と2番目のリストに適用し、次に結果を3番目のリストに適用し、次にその結果を4番目のリストに適用する必要があります。