2

100 駅 。隣接する駅間の距離が等しくありません。これらのステーションの間に配置する必要がある 10 個のフラグが与えられます。最初の旗は最初の駅にあり、最後の旗は最後の駅にあります。次に、残りのフラグを、2 つのフラグ間の合計隣接距離が最小になるように配置します。

私のアプローチはこれです:

この問題を 10 駅と 4 旗について考えてみましょう。それらの間の距離を 1-----2--3---4----5-----6------7-- とします。 ---8-9---10

ここで、 - 単位での距離を表します。つまり、1 番目と 2 番目のステーションの間の距離は 5 です。したがって、1 番目と 10 番目のステーションの間の距離は (5+2+3+4+5+6+7+1+3) = 36

1 番目と 10 番目のステーションの間に二分探索を適用するため、36/2 = 18 が得られます。

したがって、距離の 18 単位としてピボットを選択し、バイナリ検索を適用します。

(i) 第 1 フラグの距離の第 1 および第 18 単位

(ii) 2 番目のフラグの距離の 19 番目と 36 番目の単位

距離の平均は、第 4 ステーションに近い第 1 フラグの場合、第 4 ステーションにフラグを配置します。

距離の平均は 9 であるため、開始からの距離は 27 であり、7 番目の駅に近いため、2 番目のフラグを 7 番目の駅に配置します。

したがって、答えは 1 ------ 2--3--- 4 ----5-----6------ 7 -------8-9--- 10になります。 したがって、この場合、任意の 2 つのステーションの b/w は 15 であるため、最大距離は最適化されます。同様に、100 ステーションについて解くことができます。

このアプローチが正しいかどうか、またはより効率的な方法があるかどうかを確認してください。間違っていたら訂正してください よろしくお願いします

4

1 に答える 1

0

あなたのアルゴリズムは間違っています。あなたの例では、ステーション 6 を位置 24 に移動します。あなたのアルゴリズムは、最大距離 15 の答えとして 1-4-7-10 を返しますが、実際には 1-5-6-10 は最大距離でさらに優れています。 14の。

http://www.careercup.com/question?id=10680926の多項式時間ソリューション(この質問を下手にコピーしたもの) には、正しいという利点がありますが、最速の回答とはほど遠いものです。これは、この問題に対するより速い答えです。

使用したい最大距離から始めるとします。最初のステーションから開始し、バイナリ検索を使用してジャンプ先の最も遠いステーションを見つけ、次にそこから最も遠いステーションを検索します。この戦略を使用して、最大入力距離を取る関数を作成できます。使用したフラグの数がわかります。(それができない場合は、非常に多数のフラグ (駅の数など) を報告するだけです。)

これを関数に変換し、実行したい最大のジャンプを入力すると、必要なフラグの数がわかります。

これで、必要なフラグの数を与える最小の最大距離を二分探索できます。

(フラグの数と、同じ正確な答えを与える最小および最大の入力値を返すようにその関数を変更することで、これを高速化できます。余分な 2 ビットの情報を使用して、バイナリ検索を高速化できます。これにより、次の結果が得られます。この問題について私が知っている最速の解決策です。)

于 2012-05-29T07:56:01.810 に答える