2016-12-16 13 views
1

私は、2つの非常に大きな範囲のリストを比較して重複領域を見つけることが1ステップである複雑なアルゴリズムをC#で作成しています。私はそれらを見つけるために多くの方法を試みましたが、すべての可能性をカバーしているかどうかはわかりません。また、このステップの私の仲間は、巨大なリストでは長すぎます。C#で2つの整数範囲の重複領域を見つける#

例:

範囲1 = 1-400

範囲2 = 200~600

ので、私はすべきこれらの二つの範囲の間の重複をチェックしたいとき入手する

答え= 200

合計200個の数字は、これら二つの範囲の間で重複しているため。だから私は答えを求めている、私は2つの範囲の間で重複している整数の正確な数が欲しい。リストの

例:

リスト1:1-400、401から800まで、801から1200など.... LIST2:10240から10276、10420 10456、11646- 11682など...

リスト1の各範囲をリスト2の各範囲と比較し、list1の特定の範囲がlist2の範囲と重複しているかどうかを調べる必要があります。これらは重複する回答ですか?これは単なるサンプル値なので、わかります。

2つの範囲の重複解を見つけるには、単純で最も効率的な/高速の式が必要です。ループアルゴリズムの残りの部分を管理できます。

例式:2つの範囲が全く重複していない場合

var OverlappingValue = FindOverlapping(range1.StartValue, range1.EndValue,range2.StartValue, range2.EndValue); 

は、その関数は事前 PSで0 感謝を返す必要があります。私はその本当に複雑にbcz私のコードを投稿しdidntは多くの条件で、私は単純な式が1つだけ必要です。ありがとう。

+0

あなたは400から200までできますか? –

+0

if range2.start

+0

@OscarSiauwまた、range1.startがrange2.endの前後にあるかどうか、またrange2.endがrange1.endの前後にあるかどうかをチェックする必要があります。 – juharr

答えて

6

重複範囲がある場合。それは最大下限から最低上限まで開始する必要がありますので、その "数式"を使用してください
次に、下限の上限を引いてその範囲の項目の数を取得し、1を追加します(すべてを含む)おっとC#のないVB:その量が負の場合
は最後に、範囲はちょうどその量と0の間で最大の

編集そのケースを扱うために得るので、重複していなかったことを意味します。ネット

int FindOverlapping (int start1, int end1, int start2, int end1) 
{ 
    return Math.Max (0, Math.Min (end1, end2) - Math.Max (start1, start2) + 1); 
} 
+0

ありがとう、私はちょうど私が必要としたものを与え、再度、感謝します :) – touseef

関連する問題