Marathon Match 45

賞金付きだったのでついつい参加してしまった

N+M次元のデータがU個あり、それにガウス分布のノイズがかかったものが与えられるから、N次元分のノイズのかかっていないデータから、残りのM次元のデータを推測せよ、という問題
U個のデータは別に生成されたC個のガウス分布のどれかに属する

今のところ暫定8位で賞金は取れなさそうで残念だーorz

以下自分の立てた戦略


まず、C個のガウス分布に属するっていうところを無視すれば、たぶん期待値を返すのが一番なので、てきとーに確率計算すればよい
たぶんこれだけで11~12点くらいでると思う
データを生成するガウス分布が完全に分かったとすると、その中心方向に各データをずらせばちょっとはノイズが除去できる
ちなみにMathematica先生曰く、分散の比で内分した点が期待値らしい
で、問題はどうやって分布を推定するか
いい方針が思い浮かばなかったので、てきとーに中心をばらまいて、生成率が高くなる方向に山登りした
Cの値も分からないが、標準偏差は[0,1]の一様分布で生成されているので、推定したガウス分布標準偏差の平均が0.5から大きくずれたらCの値が違うと判断して修正した
でも、この分布推定の部分いじってもあんまりスコアが変わらなかったw
それより期待値計算のほうでサイズが超でかい時に全然間に合わないのが問題で、てきとーに枝狩りしたりして高速化したが、最終的には少しでも速くするためにC++に乗り換えた
C++版のはローカルで動かそうとするとメモリ足りないよ〜って言われるので、全然テストしてないから超不安だ