SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌
(2014.7.12)
Boost.Graphで
JR全線乗り尽くしプラン
を立てる
H.Hiro @ Sapporo.cpp
Twitter: @h_hiro_
http://hhiro.net/about/
自己紹介
●
某研究員
(もう学生じゃありません)
●
アルゴリズム作るのは本業です
●
趣味でもプログラム書いてます
●
C++とかRubyとか他にも何でも
●
最近はアマチュアサッカーの
観戦とかも
ソースコードは
こちらです
https://github.com/maraigue
/cpp-chinese-postman
今回の内容
JR線全線を乗り尽くす
地図:国土数値情報 鉄道データ N02-08
(2008年現在;JR以外の鉄道も入ってます)
鉄道ファンにとって
一つのステータス
これをなるべく
短い乗車距離で
実現したい
今回のルール
●
単に乗り尽くしたら終わりでは
なく、「出発地点まで帰って
くる」までの乗車距離で考える
●
出発地点まで戻るときも含め
JR以外の交通機関は
利用しないとする
予備知識
グラフ理論
●
グラフ:状態(頂点 vertex, node)と、
二つの状態を結ぶもの(辺 edge)からなる
データ構造(今回は駅が頂点、路線が辺)
●
各辺には、通ることで加算される利益や
損失の数値(重み)を与えることができる
(今回は距離を重みとし損失とみなす)
桑園 札幌 苗穂 白石 平和
厚別八軒
琴似
22 16 22 36
4422
22
(辺の重みに書かれた
 距離の単位は「0.1km」)
補足
●
今回は、JR線が3方向以上に分岐している
駅のみ頂点とする。
●
今回は、辺は両方向に行き来できるもの
のみ扱う(無向グラフ undirected graph)。
一方通行は考えない
桑園 札幌 苗穂 白石 平和
厚別八軒
琴似
22 16 22 36
4422
22
(辺の重みに書かれた
 距離の単位は「0.1km」)
Boost.Graph
Boost.Graph:
グラフ構造を扱うライブラリ
// 無向グラフを扱うために必要なものをインクルード
#include <boost/graph/undirected_graph.hpp>
// グラフの型の定義。
// 頂点から出る辺の一覧はstd::vector、頂点の一覧はstd::set、
// 無向グラフ、頂点には駅名、辺にはint型で重みを付与
typedef boost::adjacency_list<boost::vecS, boost::setS,
boost::undirectedS,
boost::property<boost::vertex_name_t, std::string>,
boost::property<boost::edge_weight_t, int> > Graph;
// 続く
Boost.Graph:
グラフ構造を扱うライブラリ
// 続き
int main(void){
Graph g;
// 頂点を追加
vertex_descriptor v1 = boost::add_vertex("桑園", g);
vertex_descriptor v2 = boost::add_vertex("白石", g);
// 辺を追加
// 第3パラメータは辺の属性(ここでは重み=距離)
edge_descriptor e1 = boost::add_edge(v1, v2, 74, g);
}
実際のコードを
見てみましょう
// 駅名をキー、頂点を値とする連想配列
std::map<std::string, RouteNetwork::vertex_descriptor> names2vertices;
while(!(ifs.eof())){
// (中略:ここで行を読み込む)
// s[0] と s[1] に地点名が、 distance に距離が入る
// 頂点を追加(まだ存在していないなら)
for(size_t i = 0; i <= 1; ++i){
it = names2vertices.find(s[i]);
if(it == names2vertices.end()){
vd[i] = boost::add_vertex(s[i], *this);
names2vertices.insert(std::make_pair(s[i], vd[i]));
}else{
vd[i] = it->second;
}
}
// 辺を追加
boost::add_edge(vd[0], vd[1], distance, *this);
total_distance += distance;
}
今回の
問題設定
今回の問題は、グラフ理論の
用語で言えば
●
無向グラフが与えられたとき
●
すべての辺を少なくとも1回通る
始点と終点が同一である経路で
●
経路の辺の重みの総和が最小に
なるものを求めよ。
ちなみにこの問題は
「中国人郵便配達問題」
って名前が付いてます
なお、Wikipediaの
「中国人郵便配達問題」
を書いた"Sinryow"は
私です
もう少し
グラフ理論について
必要なことを解説します
今回用いる
グラフ理論の概念(1)
橋
225
34
236
628
橋:
その辺1本が消えることで
路線網が分断される
(非連結になる)ような辺
函館
大沼
森
長万部
1256
五稜郭
中小国
↓青森
↑三厩
↑桑園
↓東室蘭
353
━━━━ :橋
━━━━ :橋でない
橋:
その辺1本が消えることで
路線網が分断される
(非連結になる)ような辺
➔
橋は明らかに2回通らないと
ならない
(全路線を通って出発地点に
戻る必要があるため)
今回用いる
グラフ理論の概念(2)
オイラーグラフ
オイラーグラフ:
スタート地点から一筆書き
(全ての辺をちょうど1回ずつ通る経路)で
スタート地点に戻ることのできるグラフ
オイラーグラフでない
(一筆書きはできるけど) オイラーグラフである
なぜオイラーグラフを考える?
➔
もしJRの路線網がオイラーグラフなら、
単に一筆書きになる(各区間1回ずつ通る)
ように辿るのが最短経路なのは明らか。
➔
ただ現実には、2回通らないとならない
区間が存在する。
【補足】いかなる区間も1回か2回通ればよく、3回通る
必要はない。(証明は省略)
なぜオイラーグラフを考える?
➔
2回通ったところに辺が2本存在すると
仮定してオイラーグラフになれば
全線乗り尽して出発地点に戻れる。
➔
2回通る区間を極力少なくすればよい。
オイラーグラフでない オイラーグラフである
ここを
2本に増やす
オイラーグラフの特性
●
グラフのすべての頂点について、
繋がっている辺の数(次数)が偶数ならば
オイラーグラフである。逆も成り立つ。
●
一部の辺を2本に増やし、上記の条件を
満たせるようにすればよい。
オイラーグラフでない オイラーグラフである
次数3
次数3
次数2
次数2
次数2 次数2
次数2
次数2
次数4
次数4
問題の解き方
1.
橋を見つけて個別のグラフに
切り離す。
橋は「2回通る」と結論付ける。
函館
五稜郭
中小国
大沼
森
長万部
室蘭
東室蘭
苫小牧
沼ノ端
追分
新得
夕張
新夕張
東釧路
根室
南千歳
新千歳空港
桑園 白石
新十津川
増毛
滝川
深川
旭川 新旭川
稚内
富良野
様似
岩見沢
1.
橋を見つけて個別のグラフに
切り離す。
橋は「2回通る」と結論付ける。
函館
五稜郭
中小国
大沼
森
長万部
室蘭
東室蘭
苫小牧
沼ノ端
追分
新得
夕張
新夕張
東釧路
根室
南千歳
新千歳空港
桑園 白石
新十津川
増毛
滝川
深川
旭川 新旭川
稚内
富良野
様似
岩見沢
橋を検出するアルゴリズム
http://nupioca.hatenadiary.jp/
entry/2013/11/03/200006
●
アルゴリズム自体はシンプルです
●
逆に、何でこのアルゴリズムでうまく
いくのかが不思議です(私も理解してません)
2.
次数2以下の頂点を削除し辺を
統合する。(やらなくても
いいけど効率化のために)
894 新得254 新夕張追分
↓沼ノ端
↑岩見沢
↑富良野
↓東釧路
←南千歳
夕張
橋のため削除
2.
次数2以下の頂点を削除し辺を
統合する。(やらなくても
いいけど効率化のために)
新得254+894=1148追分
↓沼ノ端
↑岩見沢
↑富良野
↓東釧路
←南千歳
夕張
橋のため削除
2.
次数2以下の頂点を削除し辺を
統合する。(やらなくても
いいけど効率化のために)
函館
五稜郭
中小国
大沼
森
長万部
室蘭
東室蘭
苫小牧
沼ノ端
追分
新得
夕張
新夕張
東釧路
根室
南千歳
新千歳空港
桑園 白石
新十津川
増毛
滝川
深川
旭川 新旭川
稚内
富良野
様似
岩見沢
2.
次数2以下の頂点を削除し辺を
統合する。(やらなくても
いいけど効率化のために)
沼ノ端
追分
新得南千歳
白石
滝川
旭川
富良野
岩見沢
Boost.Graphだとこんな具合
// ---------- 変数宣言類は大幅に省略してます ----------
std::pair<vertex_iterator, vertex_iterator> vertex_range = boost::vertices(*this);
for(vertex_iterator itv = vertex_range.first; itv != vertex_range.second; ++itv){
if(out_degree(*itv, *this) == 2){ // 次数が2の頂点があったら
// 隣接する頂点と辺を覚えておき
std::pair<out_edge_iterator, out_edge_iterator> edge_range =
boost::out_edges(*itv, *this);
for(out_edge_iterator ite = edge_range.first;
ite != edge_range.second; ++ite, ++i){
sides[i] = vertex_target(*itv, *ite);
distance += boost::get(boost::edge_weight, *this, *ite);
links[i] = *ite;
}
// 元の辺を取り除くとともに新しく辺を加える
boost::add_edge(sides[0], sides[1], distance, *this);
boost::remove_edge(links[0], *this); boost::remove_edge(links[1], *this);
}
}
3. (どこの辺を2本に増やすか決めたい)
分割された各グラフについて、
「すべての頂点の組に対する
最短距離」を求める
白 岩 滝 旭 富 新 南 沼 追
白
岩
滝
旭
富
新
南
沼
追
沼ノ端
追分
新得南千歳
白石
滝川
旭川
富良野
岩見沢
白 岩 滝 旭 富 新 南 沼 追
白
岩
滝
旭
富
新
南
沼
追
この問題には「フロイド=ワーシャル法」と
いう有名なアルゴリズムがあって
Boost.Graphにも入っています
boost::floyd_warshall_all_pairs_shortest_paths(graph, result);
resultは「result[vertex1][vertex2] としたときに辺の重みが返る」
ものなら何でもよい。例えばstd::map< vertex_descriptor,
std::map<vertex_descriptor, int> > (辺の重みがintの場合)
沼ノ端
追分
新得南千歳
白石
滝川
旭川
富良野
岩見沢
4. (どこの辺を2本に増やすか決めたい)
次数が奇数の頂点を2つずつ
組み合わせ、さっき求めた距離の
和が最小になるものを見つける
沼ノ端
追分
新得南千歳
白石
滝川
旭川
富良野
岩見沢
●
(白石, 旭川)・(南千歳, 新得)・
(沼ノ端, 岩見沢)・(滝川, 富良野)
●
(白石, 南千歳)・(沼ノ端, 岩見沢)・
(滝川, 新得)・(旭川, 富良野)
…
4. (どこの辺を2本に増やすか決めたい)
次数が奇数の頂点を2つずつ
組み合わせ、さっき求めた距離の
和が最小になるものを見つける
沼ノ端
追分
新得南千歳
白石
滝川
旭川
富良野
岩見沢
最適な組み合わせ:
(白石, 岩見沢)・(南千歳, 沼ノ端)・
(滝川, 旭川)・(富良野, 新得)
最適な「2つずつの組み合わせ方」
を求めるのは面倒
●
全通り組み合わせてみるのは、
組み合わせ爆発を起こしてしまう
●
「整数計画問題」という形に落とせば、
ライブラリに食わせて解ける
→今回は"GLPK"を使います
整数計画問題
●
変数に整数しか入らず、かつ
指定された制約式を満たすものの中で
特定の式を最大化/最小化する問題
制約式・最大化/最小化する式には
和・定数倍・等式/不等式のみ利用可能
●
変数が多いと一般には低速(組み合わせ爆発
が起きる)だが、多くの場合に高速
●
今回の場合は、頂点数の3乗に比例する
程度の時間で解ける(っぽい)
●
GLPK:これを解いてくれるライブラリ
どう整数計画問題にするのか
●
変数:2つの駅の組み合わせ
(使ったもの:1、使わなかったもの:0)
●
制約式:どの駅も1回しか登場しない
●
最小化すべきもの:組み合わせにより
生じる移動距離の総和
最小化すべき式:777×白石滝川+348×白石岩見沢+…
// 「組の距離×使った辺」を最小にする。各組の距離はさっき求めた
0≦白石滝川≦1、0≦白石岩見沢≦1、0≦白石沼ノ端≦1、…
// 各組み合わせは「使うか使わないか」の二つだけ
白石滝川+白石岩見沢+白石沼ノ端+…=1
白石滝川+滝川岩見沢+滝川沼ノ端+…=1
// 各駅とも、1回の組み合わせにしか登場しない
GLPKに解かせた結果
(JR北海道分)
沼ノ端
追分
新得
南千歳
白石
滝川
旭川
富良野
岩見沢
GLPKに解かせた結果
(JR全国分)
GLPKに解かせた結果
(JR全国分)
メモリ不足で
解けませんでした…。
頂点数140くらい、
考えるべき辺が10,000組くらい
最終結果:JR北海道全線
(橋と、最小距離組み合わせの結果出た辺のみ2回通ればよい)
函館
五稜郭
中小国
大沼
森
長万部
室蘭
東室蘭
苫小牧
沼ノ端
追分
新得
夕張
新夕張
東釧路
根室
南千歳
新千歳空港
桑園 白石
新十津川
増毛
滝川
深川
旭川 新旭川
稚内
富良野
様似
岩見沢
━━━━:2回通る
━━━━:1回通る
JR北海道の総距離
2457.7km(営業キロ)
左図の総乗車距離
3565.0km(同)
総距離の145%
最終結果:JR北海道全線
(橋と、最小距離組み合わせの結果出た辺のみ2回通ればよい)
函館
五稜郭
中小国
大沼
森
長万部
室蘭
東室蘭
苫小牧
沼ノ端
追分
新得
夕張
新夕張
東釧路
根室
南千歳
新千歳空港
桑園 白石
新十津川
増毛
滝川
深川
旭川 新旭川
稚内
富良野
様似
岩見沢
一筆書き経路の例
白石→桑園→新十津川→桑園
→長万部→森→大沼→五稜郭
→函館→五稜郭→中小国→五稜郭
→大沼→森→長万部→東室蘭
→室蘭→東室蘭→苫小牧→様似
→苫小牧→沼ノ端→追分→岩見沢
→白石→南千歳→沼ノ端→南千歳
→新千歳空港→南千歳→追分
→新夕張→夕張→新夕張→新得
→東釧路→根室→東釧路→新旭川
→稚内→新旭川→旭川→深川
→増毛→深川→滝川→富良野
→新得→富良野→旭川→深川
→滝川→岩見沢→白石
補足:
●
「2回通る必要のある辺」が求められれば、
実際にどの経路で辿ればよいかは勝手に
決まる。
●
オイラーグラフの特徴として、「辿れなく
なる頂点が存在しなくならない限りは、
適当に辿っていても一筆書きになる」
というものがあるため。
実際に
プログラムで
解いてみます
参考文献・資料:
●
アルゴリズムの大枠の解説:
「経営科学OR用語大事典」
Saul I. Gass、Carl M. Harris
森村英典[監訳]、刀根薫[監訳]、伊理正夫[監訳]
朝倉書店 ISBN 4254121318
●
グラフ理論の基礎:
「グラフ理論入門(原書第4版)」
Robin J. Wilson、西関隆夫[訳]・西関裕子[訳]
近代科学社 ISBN 4764902966
参考資料:
http://ocw.hokudai.ac.jp/Course/Faculty/Engineering
/GraphTheory/2007/
参考文献・資料:
●
もっと難しい(理論的に考えたときに
計算時間がかかる)問題:
「JRの切符として買える最長のものを求める」
(最長片道切符)
http://www.swa.gr.jp/lop/
ありがとう
ございました

Mais conteúdo relacionado

Mais procurados

Moving computation to the data (1)
Moving computation to the data (1)Moving computation to the data (1)
Moving computation to the data (1)
Kazunori Sato
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
demuyan
 

Mais procurados (20)

ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法
 
Moving computation to the data (1)
Moving computation to the data (1)Moving computation to the data (1)
Moving computation to the data (1)
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
 
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
 
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halfCvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 

Destaque

Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Hiro H.
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
Hiro H.
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
 
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を 効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を 効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
Hiro H.
 

Destaque (20)

C++用将棋ライブラリ "OpenShogiLib"の紹介
C++用将棋ライブラリ"OpenShogiLib"の紹介C++用将棋ライブラリ"OpenShogiLib"の紹介
C++用将棋ライブラリ "OpenShogiLib"の紹介
 
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
 
Study3 boost
Study3 boostStudy3 boost
Study3 boost
 
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
 
C++ template-primer
C++ template-primerC++ template-primer
C++ template-primer
 
Sapporocpp#2 exception-primer
Sapporocpp#2 exception-primerSapporocpp#2 exception-primer
Sapporocpp#2 exception-primer
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
 
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を 効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を 効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
 
最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5
 
Introduction to boost test
Introduction to boost testIntroduction to boost test
Introduction to boost test
 
CG基礎3 メタリンク
CG基礎3 メタリンクCG基礎3 メタリンク
CG基礎3 メタリンク
 
ABC2015 Summer LT
ABC2015 Summer LTABC2015 Summer LT
ABC2015 Summer LT
 
Boost study meeting opening 4
Boost study meeting opening 4Boost study meeting opening 4
Boost study meeting opening 4
 
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
 

Mais de Hiro H.

わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
 

Mais de Hiro H. (20)

pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
 
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
 
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
 
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
 
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
 
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
 
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよPCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
 
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
 
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかったスマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
 
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめシンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
 
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
 
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
 
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってますデレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
 
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
 
MSYS2使いはじめました
MSYS2使いはじめましたMSYS2使いはじめました
MSYS2使いはじめました
 
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
 
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
 

Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)