狠狠撸
Submit Search
搁耻产测で连结リスト使うための驳别尘を作った(迟蝉耻办耻产补.谤产版)
?
3 likes
?
4,787 views
Sho Hosoda
Follow
2013/12/12 のTsukuba.rb の発表資料です。
Read less
Read more
1 of 19
Download now
Download to read offline
More Related Content
搁耻产测で连结リスト使うための驳别尘を作った(迟蝉耻办耻产补.谤产版)
1.
Rubyで連結リスト使うための gemを作った @gam0022
2.
自己紹介 Twitter: @gam0022 情報科学類3年(coins11) @daigoroubot の飼い主 COJT
SWコース Ruby と C# けっこうなんでも書きます
3.
作った動機 Rubyでオーバーヘッドを気にせずに 再帰プログラミングをしたかった。 (情報特別講義の課題)
4.
Rubyで再帰プログラミング Ruby の Array
は 配列で実装されている。 遅い + メモリを消費する 次の操作が 先頭への要素の追加(cons) 連結(append) push などが破壊的操作 再帰プログラミングをするのには致命的
5.
なんとかしたい リストのデータ構造を自分で作ってみた! ImmutableList
6.
ImmutableList 特徴 単方向連結リスト(singly-circularly-linked list) 非破壊的(immutable) Cで実装 (C
Extensions) Rubyで実装すると、オーバーヘッドが多すぎる RubyGemsでは、Cで実装されたLinkedListは見つから なかった
7.
ImmutableList OCaml を意識したメソッド cons head, tail rev_append,
rev, append length nth
8.
Basic
9.
Benchmark 先頭に長さ3のリストを連結するのにかかった秒数 連結回数 Array ImmutableList 10 1.5E-05 2E-05 1000 0.007251 0.00166 10000 0.727542 0.015206 100000 102.080825 0.414083
10.
メモリ効率の良さ Arrayの連結(C = A
+ B) : メモリの使用量が2倍 B A 1 2 3 + 1 2 3 4 4 6 5 8 7 C 5 6 7 8 4 5 6 7 B A 1 2 3 8
11.
メモリ効率の良さ ImutableListの連結(C = A
+ B): BとCはメモリを共有 B A 1 3 2 + 4 6 5 7 8 C 1 2 3 B A 1 2 3 4 5 6 7 8
12.
Quick Sort とは クイックソート 一般的に最も高速なソート
O(n log n)、安定ソートではない アルゴリズム 1. 適当に数(ピポット)を選ぶ 2. ピポットより小さい数を前方、大きい数を後方に分割 3. 2分割されたデータで更に繰り返す
13.
Quick Sort 素朴な実装 tempとか実装上の都合 の変数が多い
(#? ?) プログラムの動作が追い にくい (#? ?) 読みにくい (#? ?)
14.
Quick Sort 再帰版
15.
RubyGemsで公開中 RubyGemとは Rubyのライブラリのパッケージ管理システム
16.
Install コマンド一発で導入可能
17.
ご静聴ありがとうございました 詳しい話はブログで 「ruby immutable_list」で検索 http://gam0022.net/blog/2013/10/22/immutablelist-gem/ http://gam0022.net/blog/2013/10/18/gems-withextensions/
18.
余談 RubyのC拡張は作りやすさは素晴らしい。 しかし、デメリットもある。 Rubyを改良するための大きな変更がしたいときに、C拡張 が足を引っ張る。 効率の良いGCを取り入れたいが、それまでのライブラリが 使えなくなる。
19.
RGenGC GCは重い処理。 現状のRubyは mark&sweep 方式(全探索で遅い) Ruby
2.1 では世代別GCが採用予定 RGecGC 過去のC拡張の互換性を保ちつつ高速化 http://www.atdot.net/ ko1/activities/ RubyKaigi2013-ko1.pdf
Download now