Part2ぶった切れ~~。部分和問題なんて楽勝じゃーー。前回に引き続き部分和問題について。今回は、動的計画法で解いてみましょう。なるA'を列挙するのではなく、そのようなA'が存在するかどうかを提示するだけでいいというのがポイントであることは前回ちょろっと述べました。メモリ上にキャッシュしておくべき情報は、部分集合のすべての要素ではなく、すべてのA'に対するsub(A')の和だけでいいのです!!これちょっと分かりにくいので、ソースコードみて何を言わんとしているか理解して下さい。Aの部分集合A'をすべてキャッシュしています。割り当てられるメモリサイズはO(2^|A|)です。ためのマクロを使用しています。これに対し、sum(A')の値をキャッシュする場合。KとなるA'を探せばいいことから、状態をキャッシュするために用意すべき配列サイズはO(K)です。false;}上に示した2つのプログラムは同一の解を出力します。なんか騙されたような感じです。踏み込んで考えてみましょう。なるA'を探してみましょう。Kを満たすA'が複数存在しますね。φ(A)なる写像φががうまく作用して問題をAの世界ではなく、φ(A)の世界で考えているような感じです。これが何となく騙されたようなトリックじゃないでしょうか。上記2つの実行速度を比較してみましょう。0.189(s)はい(笑)違いは明白です。26くらいになると解くのは不可能でしょう。ちなみにwindowsの場合は、メモリ制限は2GBまでです。3.49GB※部分配列のサイズは、簡単のため|A|/2としています。こりゃ、解けないわー。Programmingの真髄を見た感じがします。Postsmemset()とmemcpy()恥ずかしながら、Cのmemset()とmemcpy()を今まで使ったことがなかった。みたいな話を聞いたことがあったので、「あーじゃ要らない機能なんだー。editorialに投稿された解答がmems...便利なPythonライブラリ(5)retryデコレータつけるだけで、リトライしてくれるという便利ライブラリ。失敗するかもしれない不安定な関数に@retryをつけると成功するまで実行してくれる。ret...S3のファイルを一般公開するAWSのS3のファイルを一般公開する方法について説明します。2つの場合に分けて説明します。本番中ゴリ押し解を思いつくには思いついたのだが、C++でマルチスレッドの処理を書いたことが無くて、ごにょごにょやってるうちにタイムアップとなってしまった。C++...C#入門(9)Action、Func、Predicateの違いAction、Func、Predicateについて簡単に整理しておく。メソッドへのDelegate。メソッドへのDelegate。スライド区間に対するクエリ処理の種類とそれに対するアルゴリズムをいくつか紹介します。「スライド区間」の定義ですが、窓関数のようなものを想像してください。まではコンピュータの力を使って正多面体をt色以下で塗るパターン数を数えていました。今回は手計算で計算してみようと思います。そのためにはまず回転を表す対称群をうまく列挙するために回転軸について考える必要があります。見聞きする木の用語を整理しておく。節点vから最も離れた節点をwとする。w)の長さをvの離心数と呼ぶ。記号で表すときは、ε(v)と書く。使って遊んでみました。いった便利な機能を提供してくれるテストフレームワークです。repor...キャッシュヒット率の測定perfというツールを使ってキャッシュヒット率を測定してみた。キャッシュの影響なんてたかが知れていると甘くみていたら、痛い目るので要注意。知らない用語がちらほらあったので、簡単にまとめておく。