最小限の違いで数字を分離する


7

正の整数整数 n、および整数 a1,b1,,an,bnそれぞれについて、。整数が存在するかどうかを決めるの複雑さは何であるその結果、すべてのためのとすべてのための?aibiic1,,cnaicibii|cicj|2i,j

観察できるのは、と想定し、この順序に従ってを選択する貪欲アルゴリズムが必ずしも機能しないことです。たとえば、ます。置く(それがの余地残さない動作しません)が、どのような作品は入れていると。問題はおそらくNP難しいですか?a1ancia1=1,b1=4,a2=b2=2c1=1c2c1=4c2=2


1
動的プログラミングを検討しましたか?
John L.

はい。問題は、の順序がわからないため、たとえば、左側にを使用した「最良の」解を格納できなかったことです。cic1,,ck
pi66

元の問題への参照を追加できますか?
ジョンL.

参照はありません。誰か知っていたら興味があります。
pi66

回答:


5

前の回答で示したように、この問題はリリースと期日のスケジュール問題としてモデル化できます。ただし、Schrageのヒューリスティックは、の場合(すべての処理時間が)またはリリースとが一致する場合(つまり、と)。pj=11r1rnd1dn

この場合、多項式アルゴリズムはSimons(1978)Carlier(1981)、およびGareyらによって発見されました(1981)、時間内で実行、、および。pj=pO(n2logn)O(n2logn)O(nlogn)

Garey等のアルゴリズム。単位時間のタスクをスケジュールしますが、任意のリリースと期限を許可します。上記の問題は、すべての日付と処理時間を除算することにより、この設定に減らすことができます。アルゴリズムの主な考え方は、タスクの開始が許可されていない禁止領域のセットを見つけることです。彼らは、禁止された地域を尊重するときのシュラージのヒューリスティックが、最小限のメイクスパンの実行可能なスケジュールを見つけることを示しています。禁止領域を構築するとき、それらのアルゴリズムは実行不可能性を検出することもあります。p

アルゴリズムがどのように機能するかを確認するには、まず、より簡単な問題を見てください。禁止された領域、リリース日と期限間に単位時間タスクをスケジュールし、各領域nrdF=i(ai,bi)abオープンインターバルです。(ここでは、個々のタスクのリリースと期日は関係ありません。)

この問題は、バックスケジュールによって解決できます。番兵の開始時間を定義します。s+1=d、そして =11 開始時間を設定 s 遅くとも遅くとも最新の時刻まで s+11 それは禁止されていません。

書く BrdF 上記の入力にバックスケジュールを適用し、戻り値を次のように定義します。 s1、スケジューリングの最も遅い可能な開始日 タスク。今、BrdF<r 実行可能なスケジュールはありません タスク。さらに、rBrdF<r+1 他のタスクを開始できません BrdF1r そうでなければ再びのための実行可能なスケジュールはありませんので タスク、つまり BrdF1r 禁止領域として宣言できます。

このロジックは、シュレージのヒューリスティックな作業を行うために必要なすべての禁止領域を見つけるのに十分であることがわかります。タスクが次のように順序付けられていると仮定しますr1r2r そして書く rd クローズされた間隔で解放され、期限が切れるタスクの数 [rd]

  1. セットする F=
  2. タスク用 =11
  3.   c={BrdjrdjF|jdjd}
  4.   もし c<r:「実行可能なスケジュールなし」を返します
  5.   そうでなければ ric<ri+1: セットする F=F{(c1,ri)}

上記のような簡単な実装には時間がかかります O(n4)。Garey et al。(正しさのほかに)バックスケジュールによって取得された時間を更新し、重複する禁止領域を結合し、「禁止された」クエリを実行することにより、O(1) 時間を下げることができます O(n2)、さらに優れたデータ構造を使用して O(nlogn)


1
有望に見えますが、最初と最後のリンクはペイウォールに移動し、2番目のリンクは壊れた証明書と「500内部サーバーエラー」ページにつながります。アルゴリズムの1つを要約できますか、それとも一般にアクセス可能なリンクを提供できますか?ありがとう!
j_random_hacker

申し訳ありませんが、これらの記事は入手しにくいようです。Carlierの記事はResearch Gateに関するものですが、フランス語です。簡単な要約を提供できるかどうかを確認します。
マーカスリット


0

問題は、リリース時間と期限があり、タスクの長さが同じである非プリエンプティブな単一マシンスケジューリングと呼ばれ、シュラージの貪欲なヒューリスティックを使用して効率的に解決できます。

まず、問題をより正式に説明しましょう。一連の時間間隔が与えられます[ri,di] および一連のジョブの長さ pi。2つのジョブが交差しないように、各ジョブをその間隔内でスケジュールする必要があります。

私たちの場合には ri=aidi=bi+2、および pi=2。各ジョブの開始時間ci したがって満たす aicibi、2つのジョブが競合する場合 (ci,ci+2) 交差する (cj,cj+2)、と同じです |cicj|<2。(一般性を失うことなく、すべてのジョブは整数回にスケジュールされます。)

シュラージのヒューリスティックは、必ずしもこれとは限りませんが、いくつかのケースで最適な一般的なヒューリスティックです。ただし、この問題を効率的に解決する他のアルゴリズムが文献に存在します。


2
シュラージのヒューリスティックは、 pj=1 のためではない pj=p (取る r=(01)d=(53)p=(22))。多項式アルゴリズムpj=pSimons(1978)、Carlier(1981)、およびGareyらによって与えられました。(1981)、後者のO(nlogn)
マーカスリット

@MarcusRittヒューリスティックが機能しないことに同意します。参照用のリンク(または少なくともタイトル)を教えてもらえますか?
pi66

の価値がわかりません p画像に入ります。あなたはすべてで分割することができますpユニット長のジョブを取得します。
Yuval Filmus

1
@YuvalFilmusはい。ただし、リリース日と期限が整数ではなくなる可能性があり、問題がさらに困難になります。実際にはギャリーら。(1981)非整数日付で単位時間問題を解決し、それらのアルゴリズムは、すべてをp
マーカスリット

0

Aを ai。次に、最初の選択肢は2つあります。ci 明らかに改善できないものを選ぶ:1つ目は、 ai=A そして bi 可能な限り小さい場合は、 ci=ai。2つ、jを選ぶaj=A+1bj<bi、および bj できるだけ小さくしてから cj=bj(これは不可能かもしれません)。次に、間隔のリストからその項目を削除し、すべて更新しますai よりも2だけ大きい ci それが選ばれ、それが bi小さすぎます。深さ優先の検索とバックトラックが解決策を見つけます。

最初の選択はヒューリスティックとして悪くないので、これが速い可能性は十分にあります。

正確にkの間隔がある場合 ai<A 一部のAでは、k値が見つかります ci<=A2 その後、これら ciこれらのkアイテムのバックトラッキングは最適であり、役に立たず、必要になることはありません。一方、値が多すぎる場合bi 近すぎます。これは、解決策がないことを証明するために使用できます。

最後に、問題は最小からアプローチすることができます ai、または最大から同様に bi

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.