TopCoder Open 2011 Round 2 by chokudai
-
Upload
chokudai -
Category
Engineering
-
view
568 -
download
5
description
Transcript of TopCoder Open 2011 Round 2 by chokudai
TCO11MMR2
慶應義塾大学大学院 政策メディア研究科1年 高橋 直大
多角形分割問題 点の集合を、
正多角形に十分近い多角形に分割する
多角形分割問題 与えられる点の個数 n は、 50 ~ 5000
点はランダムで与えられ、 x,y 座標は 0 ~ 700 にランダム 分割後に得られるスコアは、 k 角形が Ak 個あるとして、
Σk*k*Ak で表わされる 単純に言えば、k角形に属している点はk点入る
多角形は正多角形に近い形でなければならない。 要求される条件は以下の通り
生成される多角形は、凸多角形でなくてはならない。 ( 最短の辺の長さ / 最長の辺の長さ ) が、 (100-SideDiff)% 以上
SideDiff は、 1 ~ 20 でランダムに与えられる変数である。 中心点からの距離の ( 最短長 / 最長長 ) が、 (100-radiiDiff)% 以上
radiiDiff は, 1 ~ 20 でランダムに与えられる変数である。
制約条件の確認 中心点は算術平均
単純に足して割るだけ SideDiff と radiiDiff
sideDiff 黒い線の最大誤差
radiiDiff 青い線の最大誤差
凸性の条件 内角が 180 度未満
戦略 可能な限り大きい多角形から貪欲で作る
小さいのを作った後、小さいのを崩して大きいのを作るのは、無駄な部分が多く、効率が悪い。
厳密にやるなら、乱択アルゴリズム等で出来るが、実行時間の制約上難しい 今回は、多角形を列挙するための十分な時間がないので割愛
小さい多角形のみ焼きなまし 小さい多角形は生成が簡単
貪欲でなく、焼きなまし法を用いて最適化を行う 列挙は制約上無理なので、最大独立集合はここでも相性は悪い
多角形の生成方法 ある2点を選び、何角形を作るか決める 2点から中心点を決定し、点が存在するべき場所を
算出する。 点が存在するべき場所から、もっとも近い点を選ぶ。 その点の集合が、多角形の条件を満たしていればO
K
実行時間に余裕がある small case では、もうちょっときちんと探索を行う。
多角形の生成方法 2点を選ぶ
工夫するポイント 長い辺を優先的
に選ぶ 長い辺の方が生
成確率が上がる
多角形の生成方法 中心点の設定
工夫するポイント Small case で、
中心点をずらしてあげる
多角形の生成方法 点の場所予測
工夫するポイント Small case では、
円を少しずつずらしてあげる
多角形の生成方法 一番近い点を
取っていく
工夫するポイント 適当なグリッド
に区切って、探索範囲を狭める!
sideDiff の制約を満たせなくなったら即break
厳密な探索をしない理由 radiiDiff の制約の問題
予測中心点が動いてしまう 枝刈り誤爆が発生しやすい
計算時間の問題 動的計画法を用いても、速度的に話にならない 最良1ケースのみで探索→失敗時戻る 程度が限界?
実際は、前述の説明よりほんの少しきちんと探索 非常に緩やかな枝刈りを用いて、生成確率を向上
多角形の生成基準 出来るだけ頂点数の多い多角形を作りたい! 頂点数を増やせば増やすほど、生成確率は落ちる。
各頂点が、何角形まで作成可能かを予測する関数を作る
予測関数の作成 各々の辺に対して、「最大何角形まで作れるか」の
予測を行う!
使う指標は以下の2つ 基準とする円が、正方形の中に納まっているか? 多角形の生成可能確率が十分に高いか?
予測関数その1:枠内に収まるか? 左図角 θ を決める
と、円が決定される。
枠に収まる範囲は、容易に決定できる。
数式は割愛するが、Asin 等を使えばOK
若干余裕を持たせてあげるべき
予測関数その2:生成確率は十分高い? sideDiff の制約
を青の円で表示 radiiDiff の制約
を赤の円で表示 上記より、斜線
部が条件を満たす箇所
これを長方形近似する
予測関数その2:生成確率は十分高い? 長方形の面積を
求めよう! 赤辺は、
半径 *radiiDiff/100
青辺は、 辺長 *sideDiff/
100 よって、この積
が面積の近似値
予測関数その2:生成確率は十分高い? 一辺の長さを d 、生成目標頂点数を t とする。 前述斜線部の面積の近似値 S は、 ただし sD=sideDiff rd=radiiDiff 適当な1点が、面積 S 内に入っている確率 p1 は、
頂点数 n として、面積 S 内に点が1つ以上ある確率p2 は、
予測関数その2:生成確率は十分高い? これが全ての頂点に対して見つかる確率 p3 は、
この P3 が、確率 p 以上になる t の境界が求まれば、生成確率 p 以上の多角形のみ探索することが出来る。 これは、辺の長さ d のみに依存する。 t の上限は、妥当な p を設定した時、高々 50 程度
よって、二分探索等で適当に範囲を求めれば十分。
参考画像:大きなケース 頂点数:
4654 SideDiff :
20 RadiiDiff :
18
参考画像:大きなケース Score: 65554 Score/頂
点 :14.0855 32角形 1個 31角形 2個 30角形 1個 29角形 3個 28角形 3個 27角形 1個 26角形 8個 25角形 5個 24角形 7個 23角形 5個 22角形 7個 21角形 8個 20角形 5個 19角形 5個 18角形 8個 17角形 14個 16角形 4個 15角形 10個 14角形 8個 13角形 17個 12角形 18個 11角形 15個 10角形 18個 9角形 18個 8角形 30個 7角形 36個 6角形 29個 5角形 43個 4角形 109個 3角形 54個