C++

木構造に対してイテレータを作る

Rubyistなら知ってて当然みたいな内容かもしれませんが、自分で作るのはたぶん初めてのように思うのでメモ。本当はC++で同様のことがやりたいのだが、Rubyのほうがぱっとやるには早いのでとりあえずRubyにて。状況、モチベーションRubyにしろ、C++にしろコン…

mapとunordered_mapの違いについてまとめておく

NLPだとstd::mapとtr1::unordered_mapなら後者を使うことになることが多いと思うけど、あれこれ混乱してきたのでメモる。NLPerなら押さえておくべき常識のはず。。。それぞれの特徴 データ構造 std::map tr1::unordered_map 実装 赤黒木 ハッシュテーブル fi…

stlのコンテナをgdbできれいに表示する

vectorの要素を見たいんですよ。こんな風にできる。 (gdb) p f.c.x $2 = std::vector of length 2, capacity 2 = {1.4141999999999999, 3.1415000000000002} STLSupport - GDB Wiki gdbのversionを上げて(macportで入れていたのを上げたんだが、上がっていな…

logsumexpを使って乱数生成 + X^2検定

空港で暇にしていたので書いてみる(出発時間が遅れた)。takanori-i君がベイジアンHMMを作っているらしく、相談に乗る。確率の積が入ってきて、数値計算で死んでしまうときがあるとのことだったので、logsumexpについて教える。logsumexpについては高村本が分…

コピー演算子、代入演算子

C++

自分用メモ。C++でメンバ変数にスマートポインタ系のものがいる場合にはコピー演算子や代入演算子に注意を払っておかないと(勝手にだけど)ひどい目に合う。例えば左の木構造をコピーしようと思ったら差しているポインタがコピー元のleafではなく新しいほうの…

staticと翻訳単位と乱数生成器

C++

明日はもう研究会だというのにC++ではまってなかなか進まないorz(ダメ院生)。staticな変数とかはメモリの上で1つしか存在しないんだと思っていたら、そういうわけではなくソースファイルの中で、ということらしい(キーワード: 翻訳単位)。ちょっと長いが、下…

スマートポインタの先もコピー

C++

シングルスレッドで走っていたプログラムを並列で走らせようとしたら案の定困ったことが起きたりしたので、メモ。Chinese Restaurant Processとかでポインタを使ったりしていて、tableに座っている客の数を増減させたりする。生ポインタはあれなので、スマー…

Gamma分布からのサンプリング

自分用メモ。DPMにおいてハイパーパラメータのサンプリングをする必要がある場合、Gamma分布からサンプリングしてこなければならない。「Boostさんにお願いしてどうにかしてもらおう...」と思っていたところ、BoostさんはGamm分布の1変数のバージョンでしかA…

lower_boundの挙動

C++

あんまり使ったことがなかったので挙動の把握メモ。でかい順に並べておいて、最大のやつを取り除いたときに次にでかいのを知りたい。priority_queueでいいかなと思ったけど、最大以外のものも消えることを想定。 #include <iostream> #include <set> int main(int argc, cha</set></iostream>…

Multinomial DPMを実装してみた

ちょっと前に実装してたんだけど、メモを書くがてら公開してみる。やりたいこととしてはnested Chinse Restaurant Processまで行きたいんだけど、ノンパラベイズ初心者なので一番取りかかりやすいであろうDirichlet Process Mixture(DPM)を文書モデルでやっ…

C++のメモ書き

C++

実験しようと思うもあれこれ詰まる。。。 親クラスのメソッドを呼び出す 子クラスに同名のメソッドがあるとして。base::do_something(hoge);のような形で呼べばよい。 baseが変わったら子クラスのほうを書き換えるのが面倒なんだが、Javaでいうところのsuper…

FOBOSを使ってL1正則化SVM + L1正則化ロジステック回帰を実装しました

というか一ヶ月前くらいに実装してたんですけど、コード公開してなかったというだけです。 GitHub - syou6162/fobos news20のデータ使って遊んでみたりしていて、元々は100万次元以上あったものを正則化かけまくって次元を1000くらいに落としても精度はほと…

仮想関数、純粋な仮想関数についてまとめる

C++

「実験しよう」→「コードが分かりづらいなぁ...」→「ちょっと書き換えるか」→「コンパイル通らなくなった\(^o^)/」というよくある事態に陥ったので、ちょっとまとめて整理を試みる。いつもの通り自分用メモ。以下の本を中心に整理していきます。Javaを最初…

A*アルゴリズムについて整理

辞書を参考にしながら。NAISTのI期辺りでやったはずなんだが、かなりすっ飛んでいる。デジタル人工知能学事典 [CD-ROM付]作者: 人工知能学会出版社/メーカー: 共立出版発売日: 2008/05/16メディア: 単行本購入: 1人 クリック: 6回この商品を含むブログ (6件)…

C++でページランクを実装

実験で使いそうなベースラインがページランク的なアルゴリズムだったので、Rubyの実装を適当にC++に翻訳してみただけ。超簡単なのでよい。 Rubyでもっとも重要なライブラリは何か?PageRankで計算してみた - aikeの日記 #include <map> #include <cmath> #include <iostream> #incl</iostream></cmath></map>…

StackをLinked Listを使って実装

自分用メモ。データ構造とちょっとしたコードの例。StackA stack is a last in, first out data structure. There are two main fundamental operation for stack: push and pop. The push operation adds an item to the top of the stack. The pop operati…

練習がてらC++でHMMのコードを書いた

いわゆるお勉強的なコードなので特に新しいところはないです。HMMをベースにしたモデルを作る必要が(たぶん)出てきそうなんですが、そういえばHMMの前向き後ろ向きアルゴリズムの付近とか実装したことねぇやべぇと思ったので書いてみました*1。系列の長さが1…

配列なめる順序とその方法&実験

C++

ちょっと試してみる。sum取るところはどうでもいいんだが、配列なめる順序によってどれくらい速さが違うのか、iterator使うと速度どうなるのか、accumulateとか使うと早くなるのかなどを試したかった。実験に使ったのは以下のコードで、処理XXXを実験すると…

2010年は未定義です

C++

C++の話。vectorで範囲外参照をしたときに死んでくれるならいいけど、死ななくて範囲外参照していることに気づかないことがある(あった)。atにするのもなんだかなぁと思っていたんだけど、id:mickey24に_GLIBCXX_DEBUGというのを使う方法を教えてもらった。 …

ガンマ関数

C++

メモ。math.hのgamma関数はガンマ関数ではなく、ガンマ関数の値に対数を取ったもの(=lgamma)を返す。tgammaで所望のものが手に入る。なんでこんな名前になっているのか意味が分からん(歴史的な経緯なんだろうけど)。manを見たら"本当の"とか書いてあって冗談…

とあるモデルのMCMC

飽きもせずにGibbs Samplingとかばっかりやってますが、久しぶりにはまった。離散確率分布とかからサンプリングするのにrandとかを使ってたんだけど、これがとてもとてもとてもいけなかった。CとかC++のrandは線形合同法で実装されているとかで周期性が問題…

glogのmesseageを吐く場所

C++

Googleのloggingライブラリでglogというのがあって便利だなーと思って使っていたら/tmp以下のバカでかいlogファイルがたまっていることを教えてもらってあたふたしていたところ。ここを見るに"logtostderr"をtrueにしといてやればlogfileを吐く変わりにstder…

C++でのオブジェクトをRで使い回す

R C++

TokyoCabinetをRから使えるようなライブラリを書くとしたら、例えばこんな感じできる。 GitHub - syou6162/RTokyoCabinet: Simple wrapper of TokyoCabinet for R. しかし、これだとgetやputをするたびにopen&closeしに行っているのでアホな感じである。TCHD…

uint8とかMiniseのコード読んだりとか

C C++

Miniseのコード読みの続き。uint8とかuint64とか出てきてなんじゃいなという感じだったので調べてみる。Minise::addFilehttp://developers.curlap.com/curl/docs/rte/6.0/ja/docs/ja/dguide/primitive.htmlによると データ型 説明 既定値 サイズ(ビット) 有…

C++でUTF-8単位で一文字とか

C++

UTF-8単位で1文字とか - Seeking for my unique color.をC++で書いただけ。あとで自分で使うかもなので。 #include <iostream> #include <string> #include <vector> std::vector<std::string> split_utf8(const std::string& str) { std::vector<std::string> result; std::string tmp; bool first = true; for (</std::string></std::string></vector></string></iostream>…

SRM439 Div1 250 MazeMaker

迷路関係の問題。上下左右に動けるんじゃなくって、動き方が決まっている。いくつか行けない場所が指定されていて、その中で行くのに一番遠い場所に行くためのステップ数を返せ、というような問題。幅優先。 // BEGIN CUT HERE // END CUT HERE // Xの場所は…

pthread関係のメモ

C++

関数ポインタめんどくせえ、無名関数作らせろって感じです!! プログラムの命令やグローバルデータのようなものはプロセスに収める プログラムカウンタやスタックといった実行状態に関連する情報はスレッドに収める #include <iostream> #include <pthread.h> void* do_one_thing(v</pthread.h></iostream>…

shared_ptrのシリアライズ

基本的にここに書いてあることなんだが、解決策が書いてない。 Gmane Loom portで入れたboostのバージョンが $ port installed boost The following ports are currently installed: boost @1.41.0_1 (active) のときはコンパイルで怒られる。1.40.0_0のとき…

グラフ関連のアルゴリズムの俺俺クラスを作ってみた

が、色々網羅する前に力尽き(ry。 深さ、幅優先探索 強連結成分分解 ベルマンフォード法 くらいしか書いてない。 #include <iostream> #include <string> #include <vector> #include <map> #include <queue> #include <math.h> #include <boost/assign.hpp> #include <boost/shared_ptr.hpp> #include <boost/foreach.hpp> template </boost/foreach.hpp></boost/shared_ptr.hpp></boost/assign.hpp></math.h></queue></map></vector></string></iostream>

gtestとstd::tr1::tupleの相性が悪い

C++

テストのコンパイルが通らなくて少しはまったりしたので、メモ。gtestとstd::tr1::tupleを一緒に使っているとこんな感じのエラーが出る。 c++ namespace collision with gtest and boost - Stack Overflow ここに書いてある方法か #ifndef GTEST_HAS_TR1_TUP…