正の整数整数 、および整数 それぞれについて、。整数が存在するかどうかを決めるの複雑さは何であるその結果、すべてのためのとすべてのための?
観察できるのは、と想定し、この順序に従ってを選択する貪欲アルゴリズムが必ずしも機能しないことです。たとえば、ます。置く(それがの余地残さない動作しません)が、どのような作品は入れていると。問題はおそらくNP難しいですか?
正の整数整数 、および整数 それぞれについて、。整数が存在するかどうかを決めるの複雑さは何であるその結果、すべてのためのとすべてのための?
観察できるのは、と想定し、この順序に従ってを選択する貪欲アルゴリズムが必ずしも機能しないことです。たとえば、ます。置く(それがの余地残さない動作しません)が、どのような作品は入れていると。問題はおそらくNP難しいですか?
回答:
前の回答で示したように、この問題はリリースと期日のスケジュール問題としてモデル化できます。ただし、Schrageのヒューリスティックは、の場合(すべての処理時間が)またはリリースとが一致する場合(つまり、と)。
この場合、多項式アルゴリズムはSimons(1978)、Carlier(1981)、およびGareyらによって発見されました。(1981)、時間内で実行、、および。
Garey等のアルゴリズム。単位時間のタスクをスケジュールしますが、任意のリリースと期限を許可します。上記の問題は、すべての日付と処理時間を除算することにより、この設定に減らすことができます。アルゴリズムの主な考え方は、タスクの開始が許可されていない禁止領域のセットを見つけることです。彼らは、禁止された地域を尊重するときのシュラージのヒューリスティックが、最小限のメイクスパンの実行可能なスケジュールを見つけることを示しています。禁止領域を構築するとき、それらのアルゴリズムは実行不可能性を検出することもあります。
アルゴリズムがどのように機能するかを確認するには、まず、より簡単な問題を見てください。禁止された領域、リリース日と期限間に単位時間タスクをスケジュールし、各領域オープンインターバルです。(ここでは、個々のタスクのリリースと期日は関係ありません。)
この問題は、バックスケジュールによって解決できます。番兵の開始時間を定義します。、そして 開始時間を設定 遅くとも遅くとも最新の時刻まで それは禁止されていません。
書く 上記の入力にバックスケジュールを適用し、戻り値を次のように定義します。 、スケジューリングの最も遅い可能な開始日 タスク。今、 実行可能なスケジュールはありません タスク。さらに、 他のタスクを開始できません そうでなければ再びのための実行可能なスケジュールはありませんので タスク、つまり 禁止領域として宣言できます。
このロジックは、シュレージのヒューリスティックな作業を行うために必要なすべての禁止領域を見つけるのに十分であることがわかります。タスクが次のように順序付けられていると仮定します そして書く クローズされた間隔で解放され、期限が切れるタスクの数 。
上記のような簡単な実装には時間がかかります 。Garey et al。(正しさのほかに)バックスケジュールによって取得された時間を更新し、重複する禁止領域を結合し、「禁止された」クエリを実行することにより、 時間を下げることができます 、さらに優れたデータ構造を使用して 。
問題は、リリース時間と期限があり、タスクの長さが同じである非プリエンプティブな単一マシンスケジューリングと呼ばれ、シュラージの貪欲なヒューリスティックを使用して効率的に解決できます。
まず、問題をより正式に説明しましょう。一連の時間間隔が与えられます および一連のジョブの長さ 。2つのジョブが交差しないように、各ジョブをその間隔内でスケジュールする必要があります。
私たちの場合には 、 、および 。各ジョブの開始時間 したがって満たす 、2つのジョブが競合する場合 交差する 、と同じです 。(一般性を失うことなく、すべてのジョブは整数回にスケジュールされます。)
シュラージのヒューリスティックは、必ずしもこれとは限りませんが、いくつかのケースで最適な一般的なヒューリスティックです。ただし、この問題を効率的に解決する他のアルゴリズムが文献に存在します。
Aを 。次に、最初の選択肢は2つあります。 明らかに改善できないものを選ぶ:1つ目は、 そして 可能な限り小さい場合は、 。2つ、jを選ぶ、 、および できるだけ小さくしてから (これは不可能かもしれません)。次に、間隔のリストからその項目を削除し、すべて更新します よりも2だけ大きい それが選ばれ、それが 小さすぎます。深さ優先の検索とバックトラックが解決策を見つけます。
最初の選択はヒューリスティックとして悪くないので、これが速い可能性は十分にあります。
正確にkの間隔がある場合 一部のAでは、k値が見つかります その後、これら これらのkアイテムのバックトラッキングは最適であり、役に立たず、必要になることはありません。一方、値が多すぎる場合 近すぎます。これは、解決策がないことを証明するために使用できます。
最後に、問題は最小からアプローチすることができます 、または最大から同様に 。