5

私の質問はここで尋ねられたものと非常に似ています: 重複する区間で基本区間を見つける

私はそこで与えられた最高の解決策が好きですが、保持する必要のある余分な重要な情報のために、アルゴリズムの微調整/さらなる説明が必要です。背景と同様に、これらの数値はデータベースの参加者の年齢範囲です。重複する研究室間で参加者を均等に分割できるように重複を把握する必要があります。重複がない場合は、すべての参加者をその1つのラボに割り当てることができます。

これは私が得るものです:

Interval    Lab
{75, 105}    A
{100, 120}   B
{100, 130}   C

これは私が入力から取得したいものです(だから私は何を照会するかを知っています):

Interval    Lab(s)
{75, 100}    A
{100, 105}   A, B, C
{105, 120}   B, C
{120, 130}   C

前の質問で示した最上位のアルゴリズムを使用すると、ネストを簡単に取得できます。{75、100、105、120、130}これにより、間隔は{75、100} {100、105} {105、120} { 120、130}。これは素晴らしいことですが、どの間隔がどのラボに対応するのかわかりません(リストをもう一度通過せずに、各ラボを1つずつチェックするため、非効率になる可能性があります)。

誰かがこれを簡単に行う方法を私に説明できますか?ご協力ありがとうございました!

4

1 に答える 1

5

関連するラボで2番目のアレイを作成します

{A, [B,C], A, B, C}
{75, 100, 105, 120, 130}

インターバルを作成するときは、実行中のラボのセットを維持してください。インデックスiをヒットしたら、i番目のラボが存在しない場合は追加し、存在する場合は削除します。それぞれの新しい間隔iをi+1に、セット内のアイテムに関連付けます。

例えば、

i = 0; set = {A}; interval = 75-100; 
i = 1; set = {A,B,C}; interval = 100-105; 
i = 2; set = {B,C}; interval = 105-120; 
i = 3; set = {C}; interval = 120-130; 
于 2012-06-12T03:13:11.107 に答える