n 組の数値が与えられた場合、最初の数値は常に 2 番目の数値よりも小さくなります。ペア (c, d) がペア (a, b) の後に続くのは、b <= c の場合のみです。ペアの連鎖は、このようにして形成できます。与えられたペアのセットから形成できる最長のチェーンを見つけます。
例えば{ (1,2), (3,4), (5,7), (9,10), (7,9), (8,9), (0,6) }
したがって、出力は次のようになります。{(1,2), (3,4), (5,7), (8,9), (9,10)}
これに対する私のアルゴリズムは次のとおりです。
1. Sort the list according to the 2nd number of elements
i.e.`{ (1,2), (3,4), (0,6), (5,7), (7,9), (8,9), (9,10) }`
2. choose the first element from the list i.e. `(1,2)`
3. for each element e in the list left
4. choose this element e if the first number of the element is greater than the 2nd number of the previous element. i.e. after `(1,2)` choose `(3,4)` because `3 > 2.`
上記のアルゴリズムの後、出力は{(1,2), (3,4), (5,7), (8,9), (9,10)}
.
アルゴリズムの正しさについて教えてください。ありがとう。
編集:
より直観的な正しさの証明:
証明: より多くのペアをチェーンに含める唯一の方法は、ペアをより小さな Y 値を持つペアに置き換えることです。これにより、次のペアがより小さな X 値を持つようになり、以前は収まらなかった別のペアが収まる可能性があります。ペアを同じ Y 値のペアに置き換えても、何も得られません。置換の Y 値が大きい場合は、以前は適合していたいくつかのペアを潜在的にブロックするだけです。
ペアは Y 値でソートされているため、より小さな Y の置換を見つけることはできません。ソートされたペアを「前方」に見ると、それらはすべて同じかそれ以上の Y 値を持ちます。「後ろ向き」に見ると、最初にチェーンから除外されたものは、X 値が十分に高くなかったためでした。
これはここから取られます