1. 問題の説明
調査隊が現地に調査に行っており、調査ルート上にキャンプ場として利用できる場所が n か所あり、キャンプ場からスタート地点までの距離が x1, x2...xn であることがわかっています。 x1<x2<. ......<xn を満たします。彼らは毎日 30KM しか前進できず、各キャンプ場には 1 日しか滞在できません。キャンプの総日数を最小限に抑える行動計画を見つけたいと考えています。この問題を解決するアルゴリズムを設計し、彼の正しさを証明してください。
2. アルゴリズム解析
キャンプ日数をできるだけ 減らすために、まずはできるだけ遠くのキャンプ場を選んで調査しますが、遠征隊は1日の行程が限られているため、できるだけ遠くのキャンプ場を選ぶ必要があります。 30km圏内で調査・宿泊可能。
疑似コードは次のとおりです。
while (y < end) {
if (camparea[i] - start <= 30) {
if (s < camparea[i] - start) {
s = camparea[i] - start;
}
i++;
}
else {
k = k + 1;
T[i - 1] = 1;
y = camparea[i];
start = camparea[i - 1];
}
3. 実験の正しさを証明する
この実験では比較的単純な方法で証明を行っており、全体的な証明の考え方は私が精査した結果大きな問題はないと思われますが、証明方法については慎重に検討する必要があります。
このアルゴリズムの正しさの証明:
提案: 任意の K 個の選択されたキャンプ場について、調査日数が最小になるように貪欲アルゴリズムで K 個のキャンプ場を見つけることができます。
証明:帰納法による
K=1 の場合、このとき始点から終点までの中で、始点から最も遠いキャンプ場を選択することが最適解となるはずです このとき、最低キャンプ日数はは 1;
それが k で確立されると仮定すると、アルゴリズムについては、最初の k ステップでの貪欲アルゴリズムの選択において、各選択の結果が最小のキャンプ日数 Tk になります。今、K+1 のとき、次のことが証明されます。貪欲アルゴリズム 1 によって得られる Tk+ は、キャンプの最小日数でもあり、これが最適解です。
矛盾による証明を使用する:
仮説: k+1 番目のステップが選択された場合、結果 Tk+1 は最適解ではありません。
仮定によれば、Tk+1 より小さい T'k+1 が存在すると結論付けることができます。
たった今
Tk+1=Tk+Txk+1 > T'k+1=T'k+Tx'k+1 (1)
と
Txk+1=T'xk+1=1 (2)
したがって、次のように結論付けることができます
たっく > たーく (3)
ただし、帰納法の条件によれば、最初のkステップでの貪欲アルゴリズムの選択において、各選択の結果は最小のキャンプ日数Tkを得ることができます。
TK+1=Tk+1 <= T'k+1=T'k+1 (4)
これは仮定から推論された結果と矛盾するため、仮定は真ではないので、元の命題が真であることが証明され、K+1 のとき、貪欲アルゴリズムで得られた Tk+1 もまた、キャンプの最小日数、これが最適なソリューションです。